Dans les lignes ci-dessous, je pourrais avoir un fichier de configuration spécifique au site qui contient des fastcgi_params supplémentaires uniques à ce site. Si ce fichier existe, je veux le charger.
server {
listen 80 default;
server_name _;
root /path/www/$host;
# Pass PHP scripts to php-fastcgi listening on port 9000
location ~ \.php {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
if (-f /path/www/$host/nginx.conf) {
include /path/www/$host/nginx.conf;
}
}
}
Cependant, cela ne fonctionne pas et l'erreur que j'obtiens est:
nginx: [Emerg] la directive "include" n'est pas autorisée ici dans ...
Mise à jour
J'ai pensé que plutôt que de vérifier séparément, je pouvais laisser inclure le chèque pour moi.
server {
listen 80 default;
server_name _;
root /path/www/$host;
# Pass PHP scripts to php-fastcgi listening on port 9000
location ~ \.php {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
include /path/www/$host/*.nginx;
}
}
Cependant, cela ne semble pas fonctionner.
nginx
fastcgi
configuration
Xeoncross
la source
la source
Réponses:
include
fait son travail lors du démarrage du serveur - les variables d'exécution comme$host
ne peuvent pas être utilisées, ni ne peuvent être utilisées dans unif
contexte, comme vous l'avez découvert.Vous devez diviser les
server
blocs pour différents hôtes. Pardon!la source
Eh bien, c'est plutôt vieux, mais de toute façon, j'ai trouvé une solution.
J'ai une configuration avec des vhosts configurés dans ce style:
Au lieu de vérifier si le fichier existe (ce qui n'est pas possible), je fais simplement:
De cette façon, je peux simplement créer un fichier dans le
sites-customizations
dossier-qui, selon ma convention, est nommé de la même manière que la configuration principale. Les*
œuvres à peu près comme le cas, car il ne se brise pas s'il n'y a pas de fichiers de configuration supplémentaires. Si vous le souhaitez, cela vous permet également d'ajouter plusieurs configurations supplémentaires dans des fichiers séparés.la source
Je sais que c'est vieux mais la solution pourrait aider quelqu'un qui cherche une réponse comme moi.
J'avais un tas de redirections que je devais inclure pour un hôte spécifique uniquement et bien que ce
include
ne soit pas autorisé dans laif
directive, j'ai fini par ajouter l'if
intérieur du fichier que j'incluais ...J'ai donc un
include /etc/nginx/conf.d/redirects
et à l'intérieur de ce fichier j'ai:la source
Je profite de l'
glob()
expansion du modèle de fonction, qui est utilisée par nginx dans lainclude
directive, et fonctionne bien sur mes serveurs Debian.Dans votre cas, essayez de remplacer cette ligne:
avec celui-ci:
c'est un masque de fichier qui ne correspond qu'à un seul fichier et ne fera pas nginx se plaindre si le fichier n'existe pas. Cependant, les variables ne sont pas autorisées dans les directives include, vous devez donc fournir une valeur fixe dans
<hostname>
. Nous avons dû créer un script qui génère des fichiers .conf individuels (un par vhost).Éditer
Comme l'a souligné Gerald Schneider , je proposais de conserver
$host
le remplaçant, ce qui n'est pas autorisé. J'ai changé la suggestion ci-dessus.la source
$host
ne fonctionnera toujours pas ici.