I hate configuring nginx. It's so complicated. How do I get PHP to work in my user dirs? Here's the relevant part of my nginx.conf:
location ~ ^/~(.+?)(/.*)?$ {
autoindex on;
autoindex_exact_size off;
alias /home/$1/public_html$2;
location ~ \.php {
include /etc/nginx/fastcgi.conf;
fastcgi_intercept_errors on;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}
}
This gives me the error: FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
in the nginx error log.
Here's my /etc/nginx/fastcgi.conf
:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
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_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 HTTPS $https if_not_empty;
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;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
I'm assuming nginx isn't resolving the script name correctly. I hate having to tell nginx where to look in my filesystem, writing custom regexes for what should be built-in (or at least standardized and documented) functionality.
Problem is that in your fastcgi.conf you define
SCRIPT_FILENAME
as$document_root$fastcgi_script_name;
but you then use thealias
direcive to set the path.You should update your
SCRIPT_FILENAME
to use$request_filename
You can also go back to nested location if you prefer. If you still get this error afterwards then I have documented all the possibilities here: http://blog.martinfjordvald.com/2011/01/no-input-file-specified-with-php-and-nginx/
Please check that as there can be multiple other causes.
When You define redirects, aliases and You do use fastcgi in the conf of your site in nginx You can try this to let them work:
Change:
Into:
If this does not work try to use as said above without the REQUEST_URI, so it will be:
Try using a separate
location
block for PHP scripts in the userdirs. This does not need to be nested.