PHP and CGI on UserDir

Smart Goldman ytlec2014 at gmail.com
Tue Dec 1 16:52:06 UTC 2015


Hi Francis Daly and Aleksandar Lazic,
I am sorry I am late.

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,
>
>> I try to enable PHP and CGI(Perl) on UserDir (/home/user/public_html)
with
>> nginx.
>> But on my Chrome, PHP script is downloaded and CGI script shows me "404
Not
>> Found" page.
>
> In nginx, one requests is handled in one location.
>
> http://nginx.org/r/location describes how the one location is chosen
> for a particular request.
>
> You have:
>
>>     location / {
>>     location ~ ^/~(.+?)(/.*)?$ {
>>     location = /50x.html {
>>     location ~ (^~)*\.php$ {
>>     location ~ (^~)*\.pl|cgi$ {
>>     location ~ .*~.*\.php$ {
>>     location ~ .*~.*\.pl|cgi$ {
>
> According to the description, the requests /~user/index.cgi and
> /~user/index.php are both handled in the second location there,
> which says:
>
>>     location ~ ^/~(.+?)(/.*)?$ {
>>         alias /home/$1/public_html$2;
>>         index  index.html index.htm;
>>         autoindex on;
>
> which says "serve the file /home/user/public_html/index.cgi (or index.php)
> from the filesystem, with no further processing". And that is what you
> see -- one file does not exist, do you get 404; the other file does exist,
> so you get it.
>
> To make things work, you will need to arrange your location{} blocks
> so that the one that you want nginx to use to process a request, is the
> one that nginx does choose to process a request.
>
> And then make sure that you know what mapping you want nginx to use for
> *this* request should be handled by processing *this* file through *that*
> fastcgi server (or whatever is appropriate).
>
> Good luck with it,

Thank you for great help!
I did not understand /~user/index.cgi and /~user/index.php are handled on
"location ~ ^/~(.+?)(/.*)?$ {".
I remade /etc/nginx/conf.d/default.conf as the following:

server {
    listen       80;
    server_name  localhost;
    access_log  /var/log/nginx/access.log;
    error_log   /var/log/nginx/error.log;

    #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$fastcgi_script_name;
        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$fastcgi_script_name;
        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;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

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

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

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.

2015-12-01 1:47 GMT+09:00 Aleksandar Lazic <al-nginx at none.at>:
> Hi.
>
> Am 29-11-2015 12:02, schrieb Smart Goldman:
>>
>> Hi, thank you for great help, Aleksandar Lazic.
>> I tried it.
>
>
> How looks now your config?

I remade as above config.

>> PHP script shows me "File not found." and outputs the following log:
>> 2015/11/29 05:50:15 [error] 5048#0: *6 FastCGI sent in stderr: "Primary
>> script unknown" while reading response header from upstream, client:
>> 119.105.136.26, server: localhost, request: "GET /~user/index.php
>> HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000 [2]", host:
>> "host.domain.com [4]"
>>
>> - I do not know how to fix it...
>>
>> CGI script shows me "Error: No such CGI app -
>> /home//public_html/~user/index.cgi may not exist or is not executable by
>> this process." and outputs nothing to error.log.
>>
>> - /home//public_html/~user/... I think this path is wrong and I tried to
>> fix this path but I could not. /home/user/public_html/ should be correct
>> path..
>
>
> Please run the debug log to see more.
>
> http://nginx.org/en/docs/debugging_log.html
>
> Due to the fact that I don't know if you use the centos packes or the
nginx
> package I suggest to install the following packages
>
> http://nginx.org/en/linux_packages.html#mainline
>
> and the nginx-debug and run the debug instance with the suggested settings
> in
>
> http://nginx.org/en/docs/debugging_log.html

I installed nginx with rpm -Uvh
http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
and yum -y install nginx.
Do I need to reinstall nginx for the debug?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx/attachments/20151202/4d810b08/attachment.html>


More information about the nginx mailing list