Nas linhas abaixo, talvez eu tenha um arquivo de configuração específico do site que contenha fastcgi_params adicionais exclusivos desse site. Se esse arquivo existir, quero carregá-lo.
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;
}
}
}
No entanto, isso não funciona e o erro que recebo é:
A diretiva nginx: [emerg] "include" não é permitida aqui em ...
Atualizar
Eu pensei que, em vez de verificar separadamente, eu poderia deixar incluir o cheque para mim.
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;
}
}
No entanto, isso não parece estar funcionando.
nginx
fastcgi
configuration
Xeoncross
fonte
fonte
Respostas:
include
funciona durante a inicialização do servidor - variáveis de tempo de execução como$host
não podem ser usadas, nem podem ser usadas em umif
contexto, como você descobriu.Você precisaria dividir os
server
blocos para diferentes hosts. Desculpe!fonte
Bem, isso é bastante antigo, mas de qualquer maneira, encontrei uma solução alternativa.
Eu tenho uma instalação com vhosts configurados neste estilo:
Em vez de verificar se o arquivo existe (o que não é possível), basta:
Dessa forma, eu posso simplesmente criar um arquivo na
sites-customizations
pasta-, que, segundo minha convenção, tem o mesmo nome da configuração principal. As*
obras praticamente como o caso, uma vez que não quebrar se não há arquivos de configuração extra. Se você preferir, isso também permite adicionar várias configurações extras em arquivos separados.fonte
Sei que isso é antigo, mas a solução pode ajudar alguém que procura uma resposta como eu.
Eu tinha vários redirecionamentos que precisava incluir apenas para um host específico e, embora
include
não seja permitido naif
diretiva, acabei adicionandoif
o arquivo dentro do arquivo que estava incluindo ...Então, eu tenho um
include /etc/nginx/conf.d/redirects
e dentro desse arquivo eu tenho:fonte
Aproveito a
glob()
expansão do padrão de função, que é usada pelo nginx nainclude
diretiva, e funciona bem em meus servidores Debian.No seu caso, tente substituir esta linha:
com este:
é uma máscara de arquivo que corresponde a apenas um arquivo e não fará o nginx reclamar se o arquivo não existir. No entanto variáveis não são permitidos incluem directivas, para que você deve fornecer um valor fixo em
<hostname>
. Tivemos que criar um script que gere arquivos .conf individuais (um por vhost).Editar
Como Gerald Schneider apontou, eu estava sugerindo manter
$host
a substituição, o que não é permitido. Eu mudei a sugestão acima.fonte
$host
ainda não vai funcionar aqui.