nginx, php-fpm, and multiple roots - how to properly try_files?
Posted
by
Carson C.
on Server Fault
See other posts from Server Fault
or by Carson C.
Published on 2012-01-09T20:15:16Z
Indexed on
2012/09/08
3:40 UTC
Read the original article
Hit count: 501
I have a server context which is rooted in a login application. The login application handles, well, logins, and then returns a redirect to "/app" on the same server if a login is successful. The application is rooted elsewhere, which is handled by the location block shown here:
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;
}
}
This works just fine, however the $uri getting passed to PHP still contains /app
, even though I am using alias rather than root. Because of this, the try_files
directive fails to a 404
unless I link app -> ./
in /usr/share/nginx/www/website.com/content/public
.
It's obviously silly to have that link in there, and if that link ever gets lost, bam dead website without an obvious cause.
The next thing I tried...
Was to remove the try_files
directive entirely. This allowed me to rm
the app
link in my /public
folder, and PHP had no problem locating the file and executing it. I used that to dump my $_SERVER
global from PHP, and found that "SCRIPT_FILENAME" => "/usr/share/nginx/www/website.com/content/public/index.php"
when the browser URI is /app
.
This is exactly right. Based on my fastcgi_params
below, this led me to beleive that try_files $request_filename =404;
should work, but no dice. nginx still doesn't find the file, and returns 404.
So for right now, it will only work without any try_files
directive. PHP finds the file, whereas try_files could not. I understand this may be a PHP security risk. Can anyone indicate how to move forward? The nginx logs don't contain anything relating to the failed try_files attempt, as far as I can see.
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;
© Server Fault or respective owner