J'ai nginx agissant en tant que proxy inverse pour Apache. Je dois maintenant ajouter un nouveau sous-domaine Qui servira les fichiers d'un autre répertoire, mais je veux également 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 dans le nouveau sous-domaine, cela fonctionnera, mais existe-t-il un moyen pour le sous-domaine d'hériter des règles?
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
Vous pouvez déplacer les parties communes vers 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 copié de mon serveur en cours d'exécution. Je configure les paramètres de base de mon serveur dans /etc/nginx/sites-enabled
(ce qui est normal pour nginx sur Ubuntu/Debian). Par exemple, le fichier de configuration de mon serveur principal bunkus.org
est /etc/nginx/sites-enabled
et ressemble à ceci:
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 fichier /etc/nginx/include.d/all-common
qui est inclus à partir des deux contextes server
:
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;
}
Un autre type de solution serait de générer automatiquement les fichiers de configuration nginx via les modèles Jinja2 de ansible . L'avantage de ceci est un déploiement facile dans un environnement cloud et une réplication facile sur plusieurs machines de développement.