79 votes

Configuration du sous-domaine Nginx

J'ai nginx qui agit comme un proxy inverse pour apache. J'ai maintenant besoin d'ajouter un nouveau sous-domaine qui servira des fichiers provenant d'un autre répertoire, mais je veux en même temps que toutes les directives location et proxy_pass que j'ai pour l'hôte par défaut s'appliquent également au sous-domaine.

Je sais que si je copie les règles de l'hôte par défaut vers le nouveau sous-domaine, cela fonctionnera, mais existe-t-il un moyen pour que le sous-domaine hérite des règles ? Voici un exemple de configuration

server {
    listen       80;
    server_name  www.somesite.com;
    access_log  logs/access.log;
    error_log  logs/error.log error;

   location /mvc {
      proxy_pass  http://localhost:8080/mvc;
   }

   location /assets {
      alias   /var/www/html/assets;
      expires     max;
   }

   ... a lot more locations
}

server {
    listen       80;
    server_name  subdomain.somesite.com;

    location / {
                root   /var/www/some_dir;
                index  index.html index.htm;
        }
}

Merci

92voto

Moritz Bunkus Points 7445

Vous pourriez déplacer les parties communes dans un autre fichier de configuration et include à partir des deux contextes de serveur. Cela devrait fonctionner :

server {
  listen 80;
  server_name server1.example;
  ...
  include /etc/nginx/include.d/your-common-stuff.conf;
}

server {
  listen 80;
  server_name another-one.example;
  ...
  include /etc/nginx/include.d/your-common-stuff.conf;
}

Edit : Voici un exemple qui est en fait copié à partir de mon serveur en fonctionnement. Je configure les paramètres de base de mon serveur dans /etc/nginx/sites-enabled (trucs normaux pour nginx sur Ubuntu/Debian). Par exemple, mon serveur principal bunkus.org Le fichier de configuration de l'utilisateur est /etc/nginx/sites-enabled et ça ressemble à ça :

server {
  listen   80 default_server;
  listen   [2a01:4f8:120:3105::101:1]:80 default_server;

  include /etc/nginx/include.d/all-common;
  include /etc/nginx/include.d/bunkus.org-common;
  include /etc/nginx/include.d/bunkus.org-80;
}

server {
  listen   443 default_server;
  listen   [2a01:4f8:120:3105::101:1]:443 default_server;

  include /etc/nginx/include.d/all-common;
  include /etc/nginx/include.d/ssl-common;
  include /etc/nginx/include.d/bunkus.org-common;
  include /etc/nginx/include.d/bunkus.org-443;
}

À titre d'exemple, voici le /etc/nginx/include.d/all-common qui est inclus dans les deux server contextes :

index index.html index.htm index.php .dirindex.php;
try_files $uri $uri/ =404;

location ~ /\.ht {
  deny all;
}

location = /favicon.ico {
  log_not_found off;
  access_log off;
}

location ~ /(README|ChangeLog)$ {
  types { }
  default_type text/plain;
}

1 votes

Bonne idée. Dois-je envelopper les directives sous une autre, car j'ai fait ce que vous suggérez et nginx se plaint quand je le redémarre que nginx : [emerg] La directive "location" n'est pas autorisée ici

0 votes

La quasi-totalité de ma configuration nginx consiste en des fichiers de sous-configuration inclus de manière similaire. Oui, cela fonctionne. Peut-être pourriez-vous poster votre configuration actuelle avec le fichier include et le contenu du fichier inclus également. Modifiez votre question originale en conséquence.

0 votes

J'ai mis à jour ma réponse pour inclure les fichiers de configuration du serveur qui fonctionnent réellement.

-1voto

Jonathan Leaders Points 317

Un autre type de solution consisterait à générer automatiquement les fichiers conf de nginx via des modèles Jinja2 à partir d'ansible . L'avantage de ce système est qu'il est facile à déployer dans un environnement en nuage et à répliquer sur plusieurs machines de développement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X