Eu tenho um contexto de servidor que está enraizado em um aplicativo de login. O aplicativo de login manipula, bem, logins e, em seguida, retorna um redirecionamento para "/ app" no mesmo servidor, se um login for bem-sucedido. O aplicativo está enraizado em outro lugar, que é tratado pelo bloco de localização mostrado aqui:
location ^~ /app {
alias /usr/share/nginx/www/website.com/content/public;
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/tmp/php5-fpm.sock;
include fastcgi_params;
}
}
Isso funciona muito bem, no entanto, o $ uri sendo passado para o PHP ainda contém /app
, embora eu esteja usando alias em vez de root. Por causa disso, a diretiva try_files
falha em 404
, a menos que eu vincule app -> ./
em /usr/share/nginx/www/website.com/content/public
.
É obviamente bobo ter esse link lá, e se esse link for perdido, um site bam dead sem uma causa óbvia.
A próxima coisa que eu tentei ...
Foi remover completamente a diretiva try_files
. Isso me permitiu% rm
o link app
na minha pasta /public
, e o PHP não teve problemas para localizar o arquivo e executá-lo. Eu usei isso para despejar meu $_SERVER
global do PHP e descobri que "SCRIPT_FILENAME" => "/usr/share/nginx/www/website.com/content/public/index.php"
quando o URI do navegador é /app
.
Isto é exatamente certo . Baseado no meu fastcgi_params
abaixo, isso me levou a acreditar que try_files $request_filename =404;
deveria funcionar, mas sem dados. O nginx ainda não encontra o arquivo e retorna 404.
Então, por enquanto, funcionará somente sem a diretiva try_files
. O PHP encontra o arquivo, enquanto o try_files não. Eu entendo isso pode ser um risco de segurança do PHP. Alguém pode indicar como seguir em frente? Os logs nginx não contêm nada relacionado à tentativa try_files com falha, até onde eu posso ver.
fastcgi_aparams
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param HTTPS $server_https;