Nginx root basée sur le nom d'hôte sans www

L'anglais n'est pas ma langue maternelle, acceptez mes excuses pour tout problème de langue.

Je veux une configuration avec une racine automatique, indépendamment du domaine, ressemble à ceci (en utilisant nginx):

root /var/www/${http_host}/public 

Mais je veux que le domaine racine et le "www" indiquent le même directory, mais sans le "www":

Exemple:

  1. " www.mysite.com " et " mysite.com "

    root / var / www / mysite.com / public

  2. Mais " blog.mysite.com "

    root / var / www / blog.mysite.com / public


C'est-à-dire que seul le "www" devrait pointer vers le directory qui n'a pas "www" dans le nom.

Oui, j'ai vu qu'il y a d'autres questions similaires ( comme celle-ci ), mais j'ai eu du mal à supprimer le "www". Excusez-moi!

Je n'utiliserai pas un nom de server générique, mais cela devrait fonctionner même avec:

 server_name ~.+$; 

Mais aussi:

 listn 443 ssl http2; server_name ~ ^((www|blog|account|bbs)\.)?mysite.com$; root /var/www/${http_host}/public ssl_certificatee /ssl/${http_host}/{http_host}.pem ssl_certificatee_key /ss/${http_host}/{http_host}.key 

REMARQUE: il devrait fonctionner à partir du path de certificate ssl.

Vous pouvez utiliser une map dans le bloc http comme ceci:

 map $http_host $rootdir { "~^(?:www\.)?(<domain>.+)$ $domain; } 

Ensuite, vous utilisez ce qui suit dans votre bloc server :

 root /var/www/$rootdir/public; 

Dans la directive de map , nous convertit la variable $http_host contenant l'en-tête de l' Host requête HTTP en $rootdir utilisant l'expression régulière.

Dans l'expression régulière, nous extrayons le nom de domaine réel sur la variable $domain de l'en-tête Host en excluant www. préfixe s'il existe. Nous utilisons ensuite la variable $domain pour créer la variable $rootdir .

Cependant, cette méthode pourrait ne pas fonctionner avec SSL en raison des raisons mentionnées dans le commentaire. Dans ce cas, vous devez implémenter un système de gestion de configuration qui génère des files de configuration pour les domaines à partir de templates.