Nginx + Php5-fpm not rendering php files

14,335

Solution 1

I believe I ran into exactly the same problem today, nginx does send the request to php-fpm (as indicated in the header) yet you get a 404, even though the file exists and has no (PHP/syntax) error at all, and no errors show up in any log (ngins or php-fpm).

You didn't include your full nginx config, but is it possible you don't have the option "root" define (correctly?) in your "server" section ? You need to make sure you do, that it points to the right location ofc and that it is inside the "server" section, not within a "location" one -- e.g:

server {
    root /var/www/eman;
    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;
    }
}

Solution 2

If you take a look at the headers http://eman.id.au/test.php responds with then you'll see X-Powered-By: PHP/5.3.2-1ubuntu4.5ppa5~lucid1. It would not show this if the request was not passed to PHP. Also, if PHP cannot find the file path passed to it, it will echo the error No input file specified.

Since your site does output the powered by header and does not have the No input file specified. error the most likely reason is that you have an error in your PHP script and have display errors turned off. This results in a blank page and an entry in your error log, so have a look in there and see if it isn't filling up.

Share:
14,335

Related videos on Youtube

Emmanuel
Author by

Emmanuel

Updated on September 17, 2022

Comments

  • Emmanuel
    Emmanuel almost 2 years

    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.

    edit: 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

  • Emmanuel
    Emmanuel over 13 years
    Okay, I've edited the conf files, but sill no luck...
  • Emmanuel
    Emmanuel over 13 years
    The URL is: eman.id.au/test.php, eman.id.au itself works fine on index.html
  • Martin Fjordvald
    Martin Fjordvald over 13 years
    The caching thing is not true, Nginx does not cache anything you do not specifically tell it to. It is NOT like Apache however, changes the the config file requires a reloading of the config file. Also your browser will cache requests, so that's what you might be confusing it with.
  • Emmanuel
    Emmanuel over 13 years
    Ah, so it does!! I was viewing the page in google chrome and it was just giving me a 404 error, but I've just viewed it in firefox and it is just a blank page. There are no errors in the php script. In fact I've just taken all php out of it and the only content of it is a h1 tag
  • Emmanuel
    Emmanuel over 13 years
    I've updated my original post with the http headers of the test.php file
  • Martin Fjordvald
    Martin Fjordvald over 13 years
    And you are absolutely certain that your scripts are located in /var/www/eman/ and that the path and files are readable and executable by the PHP process?
  • Emmanuel
    Emmanuel over 13 years
    Yes they are the scripts are definitely in /var/www/eman/ the test.php file is in the same directory as index.html which works fine. What should I check to make sure they are readable and executable by the PHP process??? I'm not sure about that?
  • Martin Fjordvald
    Martin Fjordvald over 13 years
    Well you spawn PHP in some way either via spawn-fcgi or php-fpm, the configuration file or command used to spawn should contain the user of the process, after that you'll have to check the linux permission for that user.
  • Emmanuel
    Emmanuel over 13 years
    sorry for my ignorance, but where should I find the configuration file or command used to spawn?
  • Emmanuel
    Emmanuel over 13 years
    I'm using php-fpm
  • Martin Fjordvald
    Martin Fjordvald over 13 years
    /usr/local/etc/php-fpm.conf is the default location for PHP from source, can't say for the Ubuntu repository.
  • Emmanuel
    Emmanuel over 13 years
    ah right, I'll be able to find it now
  • Emmanuel
    Emmanuel over 13 years
    Found the config file in /etc/php5/fpm/php5-fpm.conf, The user is "www-data", so how do I check the permissions?
  • Emmanuel
    Emmanuel over 13 years
    I'm not certain, but that could have been the problem
  • Emmanuel
    Emmanuel over 13 years
    I've ended up re-building the VPS and trying again using different tutorial, and now it's working fine. :)
  • Sean
    Sean about 9 years
    This worked for me, and I was using a unix socket for the fastcgi_pass parameter