O "garbling" de que você fala é, até onde eu sei, um bug no nginx relacionado a blocos de localização aninhados (ou talvez aliases em blocos de localização que fazem correspondência baseada em regex sem uma captura ... não tenho certeza). O que eu consegui fazer, no entanto, foi bastante simples.
Primeiro, você pode colocar todos os seus parâmetros fastcgi, incluindo a fastcgi_pass
line e fastcgi_param SCRIPT_FILENAME $request_filename
em um arquivo separado para inclusão nas partes relevantes do site. Eu coloquei o meu em /etc/nginx/fragments/php
.
Então, para /foosite
, você precisa de dois blocos de localização, assim:
location /foosite {
alias /var/aliases/foo;
}
location /foosite(.*\.php)$ {
alias /var/aliases/foo$1;
include /etc/nginx/fragments/php;
}
Uma coisa a ser cautelosa daqui - ao contrário dos blocos de localização "regulares", parece que a correspondência baseada em regex é executada na ordem especificada no arquivo de configuração (não é a correspondência mais longa primeiro, como parece ser o caso de blocos de localização não-regex). Então, se você está fazendo uma localização PHP específica do site, assim como um manipulador genérico do PHP "all-site" ( location ~ \.php$
), então você precisará colocar o manipulador genérico "all-site" último no bloco do servidor, ou todo o inferno vai se soltar.
Sim, isso é péssimo, e se eu aumentar a motivação eu posso tentar descobrir exatamente o que está errado com o caso aninhado (o analisador de configuração não funciona nele, então eu suspeito que ele deveria funcionar, mas ninguém realmente usa, então é buggy).