Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

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 have done days of reading on this issues, as admittedly, I am an Nginx newb. I have read official and unofficial documentation alike and can't seem to solve my problem. Hopefully, someone here will be kind enought to help me out.

I can server my html pages, such as 403, 404 and 50x.html so I know nginx is working in some capacity. My https redirect also works.

I can telnet to PHP FPM on 9001.

All my permissions appear correct, at least to me.

I have included relavant configuration files and outputs below:


        listen                  [::]:80;
        server_name   ;
        return                  301$request_uri;
        #rewrite                ^$request_uri? permanent;
        listen 443              default ssl;
        server_name   ;
        ssl                     on;
        ssl_certificate         /etc/ss-certificates/;
        ssl_certificate_key     /etc/ss-certificates/;

        root                    /var/www/;
        index                   index.php;
        access_log              /var/www/ combined;
        error_log               /var/www/ debug;

        error_page              404 /404.html;
        error_page              403 /403.html;
        error_page              500 502 503 504 /50x.html;

        location /
                try_files       $uri $uri/ /index.php?q=$uri&$args;

        location ~ \.php$
                try_files       $uri =404;
                include         fastcgi_params;
                fastcgi_param   HTTPS                   on;
                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   SCRIPT_FILENAME         $document_root$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;
                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;

        location ~ /\.ht
                deny all;

        location = /favicon.ico
                log_not_found off;
                access_log off;



listen  =
user    = www-data
group   = www-data
pm = dynamic
pm.max_children = 10
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
chroot = /var/www/
chdir = /

web directory:

ll -s -R /var/www/
total 16
4 drwxr-xr-x 4 www-data www-data 4096 Jul 23 22:48 ./
4 drwxr-xr-x 3 root     root     4096 Jul 22 22:49 ../
4 drwxr-xr-x 2 www-data www-data 4096 Jul 25 22:59 logs/
4 drwxr-xr-x 2 www-data www-data 4096 Jul 28 15:00 wwwroot/

total 516
  4 drwxr-xr-x 2 www-data www-data   4096 Jul 25 22:59 ./
  4 drwxr-xr-x 4 www-data www-data   4096 Jul 23 22:48 ../
 24 -rw-r--r-- 1 www-data www-data  18128 Jul 28 15:19 access.log
484 -rw-r--r-- 1 www-data www-data 490826 Jul 28 15:20 error.log

total 28
4 drwxr-xr-x 2 www-data www-data 4096 Jul 28 15:00 ./
4 drwxr-xr-x 4 www-data www-data 4096 Jul 23 22:48 ../
4 -rw-r--r-- 1 www-data www-data   53 Jul 26 22:56 403.html
4 -rw-r--r-- 1 www-data www-data   53 Jul 26 22:55 404.html
4 -rw-r--r-- 1 www-data www-data  383 Jul 23 22:42 50x.html
4 -rw-r--r-- 1 www-data www-data 1406 Jul 25 21:46 favicon.ico
4 -rwxr-xr-x 1 www-data www-data   88 Jul 22 22:58 index.php*


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

events {
        worker_connections 768;
        # multi_accept on;

http {

        # Basic Settings

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

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

        # Logging Settings

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

        # Gzip Settings

        gzip on;
        gzip_disable "msie6";

        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

        # nginx-naxsi config
        # Uncomment it if you installed nginx-naxsi

        #include /etc/nginx/naxsi_core.rules;

        # nginx-passenger config
        # Uncomment it if you installed nginx-passenger

        #passenger_root /usr;
        #passenger_ruby /usr/bin/ruby;

        # Virtual Host Configs

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

Thanks in advance for everyone help.



share|improve this question
Does it work without chrooting? chroot = /var/www/ – VBart Jul 28 '12 at 12:15
What's the exact problem you're trying to solve? There isn't really an addressable problem specification in this "question". – womble Jul 28 '12 at 12:16
up vote 1 down vote accepted

Is there anything in your access / error logs?

Also, why do you include fastcgi_params and then pretty much define them all?

This is what my location block looks like in nginx with php-fpm:

    location ~ \.php$ {

            try_files $uri =404;
            fastcgi_intercept_errors on;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /path/to/$fastcgi_script_name$
            fastcgi_param  PATH_INFO $fastcgi_script_name;
            include fastcgi_params;

Try moving fastcgi_pass up towards the top.

share|improve this answer

The problem here is that you're putting php-fpm in a chroot jail, but nginx is passing the full SCRIPT_FILENAME path to the PHP script.

In your nginx conf you have (among other things):

root /var/www/;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

For a request for /index.php his translates into /var/www/ But you have placed php-fpm into a chroot jail:

chroot = /var/www/

So php-fpm sees the file at /index.php and not /var/www/

Therefore, you must adjust the path for SCRIPT_FILENAME so that it matches what php-fpm will see in the chroot. Do this by stripping off $document_root.

fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
share|improve this answer

I guess that you can´t get nginx to show your .php files in your browser.

I see a lot of stuff you simple do not need to have, in order to get php to work. As i understand, and have read about, you can only pass one "fastcgi_param" parameter. That is just how FastCGI works as far as I know. If you have more than one fastcgi_param" parameter, nginx picks the first in line. Try to only list "fastcgi_pass;" as a fastcgi parameter and see what happens.

You can read some more about fastcgi on this page

share|improve this answer
You can have as many fastcgi_param parameters as you need. But you can only have one fastcgi_pass per location. – Michael Hampton Jul 29 '12 at 2:03
That is correct in some way, but nginx only reads the first fastcgi_param. Therefore you need to have them declared in the same fastcgi_param. My answer was in the first and second rows "I guess that you can´t get nginx to show your .php files in your browser. I see a lot of stuff you simple do not need to have, in order to get php to work." – Marcus Sjodin Jul 29 '12 at 13:02
That is still not correct. Please go read the nginx documentation. – Michael Hampton Jul 29 '12 at 15:12

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.