nginx, alias, php-fpm = File not Found

33,569

Solution 1

Fixed it. Turns out, you have to include the php bit under every location block.

location /calender {
    alias  /usr/share/davical/htdocs;

        location ~ \.php$ {
        fastcgi_split_path_info ^(.+?\.php)(/.*)?$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        }

}

Solution 2

I found that moving my php matching block above my root location block worked just fine.

location ~ \.php$ {
    include fastcgi.conf;
    fastcgi_intercept_errors on;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index  index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

location / {
    root /Users/YOU/Projects/PROJECT;
}
Share:
33,569

Related videos on Youtube

Martin
Author by

Martin

Updated on September 18, 2022

Comments

  • Martin
    Martin over 1 year

    I'm trying to set up nginx with DAViCal. However, I'm getting a "File not Found" with a "FastCGI sent in stderr: "Primary script unknown" in the log. Looks like something is wrong with my aliasing but I sure can't figure it out.

    My virtual host:

    server {
    listen   80; ## listen for ipv4; this line is default and implied
    listen   [::]:80 default_server ipv6only=on; ## listen for ipv6
    
    root /var/www-data;
    index index.html index.htm index.shtml index.php;
    
    # Make site accessible from http://localhost/
    server_name just.a.server;
    
    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ /index.html;
        ssi on;
        # Uncomment to enable naxsi on this location
        # include /etc/nginx/naxsi.rules
    }
    location ~ \.php$ {
        #try_files  $uri =404;
        include /etc/nginx/fastcgi_params;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
    }
    
    location /kalender {
        alias  /usr/share/davical/htdocs;
    }
    

    }

    My fastcgi_params

    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           $https;
    
    # PHP only, required if PHP was built with --enable-force-cgi-redirect
    fastcgi_param   REDIRECT_STATUS     200;
    

    Looking forward to your replies.

    • Admin
      Admin over 10 years
      htdocs is 777 btw
  • Sandro Antonucci
    Sandro Antonucci over 9 years
    Awesome, there be a way to "include" this otherwise you need to change the php stuff for every location!
  • Z. Zlatev
    Z. Zlatev almost 9 years
    not relevant. nginx always tries regex location blocks first.
  • hrvoj3e
    hrvoj3e over 5 years
    this will not work on every OS and every version. it all depends on fastcgi_param SCRIPT_FILENAME and the fact is it set in fastcgi_params or fastcgi.conf see this and this