Réutilisez les instructions de configuration pour les domaines dans nginx.conf

Disons que j’ai une configuration nginx configurée pour un domaine comme celui-ci:

server { root /path/to/one; server_name one.example.org; location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } 

Maintenant, si je veux append un autre domaine avec un contenu différent, y a-t-il un moyen de réutiliser des déclarations équivalentes du domaine précédent ou dois-je tout dupliquer pour chaque nouveau domaine que je veux prendre en charge?

 server { root /path/to/two; # different server_name two.example.org; # different location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } 

J’ai essayé de déplacer la directive d’ location dehors de la fermeture du server , mais évidemment les choses ne fonctionnent pas comme ça parce que j’ai eu une erreur “la directive d’emplacement n’est pas autorisée ici” lors du redémarrage de nginx.

tu peux faire:

  server_name one.example.org two.example.org; 

si les deux sont exactement identiques à l’exception du nom de domaine

si vous avez juste des blocs de localisation similaires, vous pouvez déplacer ces emplacements dans un fichier séparé et ensuite faire un

 include /etc/nginx/your-filename; 

pour l’utiliser facilement dans chaque bloc de serveur

C’est un bon exemple d’utilisation du module nginx Map. http://wiki.nginx.org/HttpMapModule

Voici ce que j’ai essayé. Cela fonctionne dans ma devbox. Remarque

  1. directive directive ne peut être placée que dans le bloc http.
  2. pénalité de performance de déclarer une directive de carte est négligeable (voir le lien ci-dessus)
  3. vous pouvez avoir la liberté d’avoir un dossier racine ou un numéro de port différent, etc.

     map $subdomain $root_folder { one /path/to/one; two /path/to/two; } map $subdomain $port_number { one 9000; two 9100; } server { listen 80; server_name ~^(?P.+?)\.mydomain\.com$; root $root_folder; location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:$port_number; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }