Nginx + Php5-fpm not rendering php files

Hi all,

I've spent hours figuring out how to install Nginx + Ruby Enterprise Edition + PHP5-fpm and MYSQL, finally it is all installed and all seems to have started fine.

But for some reason php files are not being processed.

.html files work fine, but when I try and view a .php file it appears as though it doesn't exist, even though it does. Interestingly, when I try and view a .html file that doesn't exist I get a nice Nginx 404 message, but when I view a .php file it doesn't even give me that.

So to my novice understanding, it looks like there's either something wrong with the config, or Nginx and PHP-fpm aren't talking to each other.

I've been looking at as many other examples of nginx config files and I'm sure that side of things is okay. Well… here's the relevant bit of the conf file anyway:

location ~ \.php$ {
   fastcgi_pass 127.0.0.1:9000;
   fastcgi_index index.php;
   fastcgi_param SCRIPT_FILENAME /var/www/eman/$fastcgi_script_name;
   include fastcgi_params;
 }

And

    fastcgi_connect_timeout 60;
 fastcgi_send_timeout 180;
 fastcgi_read_timeout 180;
 fastcgi_buffer_size 128k;
 fastcgi_buffers 4 256k;
 fastcgi_busy_buffers_size 256k;
 fastcgi_temp_file_write_size 256k;
 fastcgi_intercept_errors on;

Any help is greatly appreciated.

Here are the headers being returned from the test php file "http://eman.id.au/test.php":

HTTP/1.1 404 Not Found =>
Server => nginx/0.8.54
Date => Thu, 16 Dec 2010 19:30:30 GMT
Content-Type => text/html
Connection => close
X-Powered-By => PHP/5.3.2-1ubuntu4.5ppa5~lucid1

9 Replies

The X-Powered-By header indicates that nginx is talking to PHP all right. The 404 error looks different from the nginx standard 404 message because it's generated by PHP, not nginx. I get the same symptoms when I try to call a non-existent PHP script.

1. Are you sure /var/www/eman is where your PHP files are located?

2. Try removing that last slash before $fastcgiscriptname. Technically this shouldn't matter, but just to be on the safe side…

Yes, the full path to the php file is: /var/www/eman/test.php

I tried removing the slash, but no luck.

I also tried:

fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;

Anything else I could try?

Do you have anything in /etc/nginx/fastcgiparams or any other nginx config file that might override your SCRIPTFILENAME variable? Can you post all of your nginx config files here? (If it's too big, use pastebin and post a link here.)

Do you have any safemode or openbasedir restrictions that might prevent PHP from opening the file? (Check /etc/php5/fpm/php.ini) Are you running PHP inside a chroot by any means?

Sorry, but right now I'm leaving for Christmas Holidays… But I'll check all that as soon as I've got time, and post back with what I find.

Thanks a lot.

Okay,

I've checked the fastcgiparams, nope, nothing there to override the SCRIPT_FILENAME

safemode is OFF, and openbasedir is set to nothing

I'm not clear what chroot is, but I don't think I'm using it.

nginx.conf is as follows:

user www-data;
worker_processes 4;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;
    # multi_accept on;
}

http {

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    gzip on;
    gzip_disable "msie6";

     gzip_proxied any;
     gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;

    fastcgi_connect_timeout 60;
    fastcgi_send_timeout 180;
    fastcgi_read_timeout 180;
    fastcgi_buffer_size 128k;
    fastcgi_buffers 4 256k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
    fastcgi_intercept_errors on;

}

The other nginx conf file, for the eman.id.au domain is:

server {
 listen 80;
 server_name *.eman.id.au;
}

server {
 listen 80;
 server_name eman.id.au;
 location / {
 root   /var/www/eman;
 index  index.php index.html index.htm;
 }

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

}

Did you ever find the answer? I would be grateful if you could let us know as I am also having nginx problems and reading through your config I can't see anything wrong with it - it's almost identical to mine (which doesn't work either for anything other than index files.

I had a similar problem when upgrading Ubuntu from 10.10 to 11.04. I saw that file /etc/nginx/fastcgi_params was empty after I upgraded.

Copying the old fastcgi_params back and restarting nginx solved it.

You could also use fastcgi.conf which even solves the $document_root problem.

Reply

Please enter an answer
Tips:

You can mention users to notify them: @username

You can use Markdown to format your question. For more examples see the Markdown Cheatsheet.

> I’m a blockquote.

I’m a blockquote.

[I'm a link] (https://www.google.com)

I'm a link

**I am bold** I am bold

*I am italicized* I am italicized

Community Code of Conduct