Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I am getting 404 not found on php files with my nginx/php-fastcgi install.

I have tried several variations of declaring root in different places but cant find one that works, and I suspect this is something to do with it.

Here are my config files, can anyone see what might be wrong/missing?

My nginx.conf;

worker_processes  1;
error_log  /opt/local/var/log/nginx/error.log;
pid /opt/local/var/run/;

events {
    worker_connections  1024;

http {
    include       mime.types;
    default_type  text/html;
    sendfile        on;
    keepalive_timeout  65;

    passenger_root /opt/local/lib/ruby/gems/1.8/gems/passenger-3.0.7;
    passenger_ruby /opt/local/bin/ruby;

    server {
        listen       80;
        server_name  localhost;
        root   /Users/foo/Sites;

        location / {
            root   /Users/foo/Sites;
            index  index.html index.htm;

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   share/nginx/html;

        location ~ \.php$ {
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $fastcgi_script_name;
            include        fastcgi.conf;

And my 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  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;
share|improve this question
up vote 0 down vote accepted

Remove fastcgi_param SCRIPT_FILENAME $fastcgi_script_name; from your PHP location and move your root and index directive from location / to server level.

share|improve this answer
I've tried both and still the same 404. FWIW, I'm getting *10 upstream prematurely closed connection while reading response header from upstream, client:, server: localhost, request: error in the logs. – Andrew Duncan Jun 13 '11 at 22:27
Fixed it. It was a permissions problem with php-fastcgi not having sufficient rights. – Andrew Duncan Jun 13 '11 at 23:17

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.