Confusion over apparently conflicting advice in guide/wiki/examples

talkingnews nginx-forum at nginx.us
Mon Mar 3 21:11:52 UTC 2014


I'd call myself very much a beginner with NGiNX, but I've been looking
further through the documentation, particularly the
http://wiki.nginx.org/Pitfalls page, and now I'm left with confusion!

This page http://wiki.nginx.org/PHPFcgiExample says
"This guide run fine on php.ini cgi.fix_pathinfo = 1 (the default). Some
guide insist to change it to cgi.fix_pathinfo = 0 but doing that make
PHP_SELF variable broken (not equal to DOCUMENT_URI).".

But http://wiki.nginx.org/Pitfalls says:
Set cgi.fix_pathinfo=0 in php.ini. This causes the PHP interpreter to only
try the literal path given and to stop processing if the file is not found.

And the provided nginx/sites-available/default says
# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

Which is correct?

My second question: As I understand it, you should always make parameter
changes only where they are needed, and in an overriding way - ie: one never
touches php.ini itself.
So, I am looking at this entry:

http://wiki.nginx.org/Pyrocms

In the server stanza there is:

server {
    fastcgi_buffers 8 16k;
    fastcgi_buffer_size 32k;
    fastcgi_read_timeout 180;
    ....

and then separately it says to add to fastcgi_params the following:

    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 off;

Some of those numbers are HUGE - most of the buffer defaults are normally
4k|8k. And 3 minutes between connections? Is this over-the-top? And the
three items in server are conflicted by different values in fastcgi params.

And isn't that going to "pollute" the whole fpm server? I thought it would
be better to have it in the fpm pool, so first I had it like this:

php_value[upload_max_filesize] = 128M
php_value[max_file_uploads] = 60
php_value[default_socket_timeout] = 180
php_value[date.timezone] = 'Europe/London'
php_value[session.gc_maxlifetime] = 28800


The I realised I only needed these high values for one area of my server, so
again I changed it:

    location ~ /upload/ {
        location ~ \.(php)$ {
            try_files $uri =404;
            set $php_value "post_max_size = 128M";
            set $php_value "$php_value \n upload_max_filesize = 128M";
            set $php_value "$php_value \n session.gc_maxlifetime = 28800";
            set $php_value "$php_value \n max_file_uploads = 60";
            fastcgi_pass   unix:/var/run/php5-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME
$document_root$fastcgi_script_name;
            fastcgi_param  PHP_VALUE $php_value;
            include fastcgi_params;
        }
    }

And it works fine. No core ini files are touched, only the area which need
to change is changed.

Also, the example config has:

 location ~ \.php {
                fastcgi_pass   unix:/tmp/domain.sock;
                fastcgi_split_path_info ^(.+\.php)(.*)$;
                fastcgi_param  SCRIPT_FILENAME 
$document_root$fastcgi_script_name;
                include        fastcgi_params;

But the Pitfalls guide suggests this is dangerous.

So, my question would be:

Is this example file wrong/outdated/dangerous?

Or am I completely misunderstanding something?

Posted at Nginx Forum: http://forum.nginx.org/read.php?2,248051,248051#msg-248051



More information about the nginx mailing list