PHP and CGI on UserDir

Smart Goldman ytlec2014 at gmail.com
Wed Dec 2 13:04:25 UTC 2015


Hi Francis,

2015-12-02 5:50 GMT+09:00 Francis Daly <francis at daoine.org>:
> On Wed, Dec 02, 2015 at 01:52:06AM +0900, Smart Goldman wrote:
>> 2015-11-29 20:10 GMT+09:00 Francis Daly <francis at daoine.org>:
>> > On Sun, Nov 29, 2015 at 05:04:50PM +0900, Smart Goldman wrote:
>
> Hi there,
>
>>     location ~ ^/~(.+?)(/.*)?\.(php)$ {
>>         alias /home/$1/public_html$2.$3;
>>         fastcgi_pass   127.0.0.1:9000;
>>         fastcgi_index  index.php;
>
> Delete that line - it does nothing useful here. (It does no harm, other
> than being a distraction.)
>
>>         fastcgi_param  SCRIPT_FILENAME
$document_root$fastcgi_script_name;
>
> Change that line to be just
>
>     fastcgi_param  SCRIPT_FILENAME $document_root;
>
> "alias" is a bit funny. In this context, it means that $document_root
> corresponds to the file on the filesystem that you want the fastcgi
> server to process.
>
> I'm a bit surprised that the current version works -- perhaps your php
> config does not have
>
>   cgi.fix_pathinfo=0

This value is commented out.
$ grep cgi.fix_pathinfo php.ini
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for
CGI.  PHP's
;cgi.fix_pathinfo=1
I've never edited php.ini.

> and so takes more than one guess at the file to process.
>
>>         include        /etc/nginx/fastcgi_params;
>>     }
>>
>>     location ~ ^/~(.+?)(/.*)?\.(pl|cgi)$ {
>>         alias /home/$1/public_html$2.$3;
>>         fastcgi_pass   127.0.0.1:8999;
>>         fastcgi_index  index.cgi;
>
> Delete.
>
>>         fastcgi_param  SCRIPT_FILENAME
$document_root$fastcgi_script_name;
>
> Change to remove $fastcgi_script_name, just like the previous case.
>
> Here, most likely php is not involved, and your fastcgi server just tries
> to process SCRIPT_FILENAME, which does not name a real file right now.
>
>>         include        /etc/nginx/fastcgi_params;
>>     }
>
>> After that, I restarted nginx. Looks like PHP (/~user/index.php) finally
>> works!
>> But CGI (/~user/index.cgi) says "Error: No such CGI app -
>> /home/user/public_html/index.cgi/~user/index.cgi may not exist or is not
>> executable by this process." though I don't know why.
>
> I think that the explanations are above, along with the one necessary fix
> (for cgi/pl) and the one strongly suggested fix (for php).
>
> Good luck with it,

Great!! Both of CGI and PHP finally works!!
I made configuration file by copying from configuration file which I found
from somewhere and I did not understand what fastcgi_param means.
Thanks so much for your help!

I put successful configuration here again for future use.

/etc/nginx/conf.d/default.conf
server {
    listen       80;
    server_name  localhost;
    access_log  /var/log/nginx/access.log;
    error_log   /var/log/nginx/error.log debug;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location / {
        root   /var/www/html;
        index  index.html index.htm;
    }

    location ~ ^/~(.+?)(/.*)?\.(php)$ {
        alias /home/$1/public_html$2.$3;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root;
        include        /etc/nginx/fastcgi_params;
    }

    location ~ ^/~(.+?)(/.*)?\.(pl|cgi)$ {
        alias /home/$1/public_html$2.$3;
        fastcgi_pass   127.0.0.1:8999;
        fastcgi_index  index.cgi;
        fastcgi_param  SCRIPT_FILENAME $document_root;
        include        /etc/nginx/fastcgi_params;
    }

    location ~ ^/~(.+?)(/.*)?$ {
        alias /home/$1/public_html$2;
        index  index.html index.htm;
        autoindex on;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /var/www/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    location ~ \.php$ {
        root           /var/www/html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        /etc/nginx/fastcgi_params;
    }
    location ~ \.pl|cgi$ {
        root           /var/www/html;
        fastcgi_pass   127.0.0.1:8999;
        fastcgi_index  index.cgi;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        /etc/nginx/fastcgi_params;
    }
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx/attachments/20151202/4b01def7/attachment.html>


More information about the nginx mailing list