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