En las líneas a continuación, podría tener un archivo de configuración específico del sitio que contiene fastcgi_params adicionales únicos para ese sitio. Si este archivo existe, quiero cargarlo.
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;
}
}
}
Sin embargo, esto no funciona y el error que obtengo es:
nginx: [emergeg] la directiva "include" no está permitida aquí en ...
Actualizar
Pensé que, en lugar de verificar por separado, podría dejar incluir el cheque por mí.
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;
}
}
Sin embargo, esto no parece estar funcionando.
nginx
fastcgi
configuration
Xeoncross
fuente
fuente
Respuestas:
include
hace lo suyo durante el inicio del servidor: las variables de tiempo de ejecución como$host
no se pueden usar, ni se puede usar en unif
contexto, como descubrió.Tendría que dividir los
server
bloques para diferentes hosts. ¡Lo siento!fuente
Bueno, esto es bastante viejo, pero de todos modos, encontré una solución alternativa.
Tengo una configuración con vhosts configurados en este estilo:
En lugar de verificar si el archivo existe (lo cual no es posible), simplemente hago:
De esta manera, simplemente puedo crear un archivo en la
sites-customizations
carpeta, que según mi convención, se denomina igual que la configuración principal. Los*
trabajos más o menos como el caso, ya que no se rompe si no hay archivos de configuración adicionales. Si lo desea, esto también le permite agregar múltiples configuraciones adicionales en archivos separados.fuente
Sé que esto es antiguo, pero la solución podría ayudar a alguien a buscar una respuesta como yo.
Tenía un montón de redireccionamientos que necesitaba incluir solo para un host específico y, aunque
include
no está permitido en laif
directiva, terminé agregando elif
interior del archivo que estaba incluyendo ...Entonces tengo un
include /etc/nginx/conf.d/redirects
y dentro de ese archivo tengo:fuente
Aprovecho la
glob()
expansión del patrón de función, que es utilizada por nginx en lainclude
directiva, y funciona bien en mis servidores Debian.En su caso, intente reemplazar esta línea:
Con este:
es una máscara de archivo que coincide con un solo archivo y no hará que nginx se queje si el archivo no existe. Sin embargo, las variables no están permitidas en las directivas de inclusión, por lo que debe proporcionar un valor fijo en
<hostname>
. Tuvimos que crear un script que genera archivos .conf individuales (uno por vhost).Editar
Como señaló Gerald Schneider , estaba sugiriendo mantener
$host
el reemplazo, lo cual no está permitido. He cambiado la sugerencia anterior.fuente
$host
todavía no va a funcionar aquí.