<div dir="ltr"><div class="gmail_extra"><div>Hi Francis Daly and Aleksandar Lazic,</div><div>I am sorry I am late.</div><div><br></div><div>2015-11-29 20:10 GMT+09:00 Francis Daly <<a href="mailto:francis@daoine.org">francis@daoine.org</a>>:</div><div>> On Sun, Nov 29, 2015 at 05:04:50PM +0900, Smart Goldman wrote:</div><div>></div><div>> Hi there,</div><div>></div><div>>> I try to enable PHP and CGI(Perl) on UserDir (/home/user/public_html) with</div><div>>> nginx.</div><div>>> But on my Chrome, PHP script is downloaded and CGI script shows me "404 Not</div><div>>> Found" page.</div><div>></div><div>> In nginx, one requests is handled in one location.</div><div>></div><div>> <a href="http://nginx.org/r/location">http://nginx.org/r/location</a> describes how the one location is chosen</div><div>> for a particular request.</div><div>></div><div>> You have:</div><div>></div><div>>>     location / {</div><div>>>     location ~ ^/~(.+?)(/.*)?$ {</div><div>>>     location = /50x.html {</div><div>>>     location ~ (^~)*\.php$ {</div><div>>>     location ~ (^~)*\.pl|cgi$ {</div><div>>>     location ~ .*~.*\.php$ {</div><div>>>     location ~ .*~.*\.pl|cgi$ {</div><div>></div><div>> According to the description, the requests /~user/index.cgi and</div><div>> /~user/index.php are both handled in the second location there,</div><div>> which says:</div><div>></div><div>>>     location ~ ^/~(.+?)(/.*)?$ {</div><div>>>         alias /home/$1/public_html$2;</div><div>>>         index  index.html index.htm;</div><div>>>         autoindex on;</div><div>></div><div>> which says "serve the file /home/user/public_html/index.cgi (or index.php)</div><div>> from the filesystem, with no further processing". And that is what you</div><div>> see -- one file does not exist, do you get 404; the other file does exist,</div><div>> so you get it.</div><div>></div><div>> To make things work, you will need to arrange your location{} blocks</div><div>> so that the one that you want nginx to use to process a request, is the</div><div>> one that nginx does choose to process a request.</div><div>></div><div>> And then make sure that you know what mapping you want nginx to use for</div><div>> *this* request should be handled by processing *this* file through *that*</div><div>> fastcgi server (or whatever is appropriate).</div><div>></div><div>> Good luck with it,</div><div><br></div><div>Thank you for great help!</div><div>I did not understand /~user/index.cgi and /~user/index.php are handled on "location ~ ^/~(.+?)(/.*)?$ {".</div><div>I remade /etc/nginx/conf.d/default.conf as the following:</div><div><br></div><div>server {</div><div>    listen       80;</div><div>    server_name  localhost;</div><div>    access_log  /var/log/nginx/access.log;</div><div>    error_log   /var/log/nginx/error.log;</div><div><br></div><div>    #charset koi8-r;</div><div>    #access_log  /var/log/nginx/log/host.access.log  main;</div><div><br></div><div>    location / {</div><div>        root   /var/www/html;</div><div>        index  index.html index.htm;</div><div>    }</div><div><br></div><div>    location ~ ^/~(.+?)(/.*)?\.(php)$ {</div><div>        alias /home/$1/public_html$2.$3;</div><div>        fastcgi_pass   <a href="http://127.0.0.1:9000">127.0.0.1:9000</a>;</div><div>        fastcgi_index  index.php;</div><div>        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;</div><div>        include        /etc/nginx/fastcgi_params;</div><div>    }</div><div><br></div><div>    location ~ ^/~(.+?)(/.*)?\.(pl|cgi)$ {</div><div>        alias /home/$1/public_html$2.$3;</div><div>        fastcgi_pass   <a href="http://127.0.0.1:8999">127.0.0.1:8999</a>;</div><div>        fastcgi_index  index.cgi;</div><div>        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;</div><div>        include        /etc/nginx/fastcgi_params;</div><div>    }</div><div><br></div><div>    location ~ ^/~(.+?)(/.*)?$ {</div><div>        alias /home/$1/public_html$2;</div><div>        index  index.html index.htm;</div><div>        autoindex on;</div><div>    }</div><div><br></div><div>    #error_page  404              /404.html;</div><div><br></div><div>    # redirect server error pages to the static page /50x.html</div><div>    #</div><div>    error_page   500 502 503 504  /50x.html;</div><div>    location = /50x.html {</div><div>        root   /var/www/html;</div><div>    }</div><div><br></div><div>    # proxy the PHP scripts to Apache listening on <a href="http://127.0.0.1:80">127.0.0.1:80</a></div><div>    #</div><div>    #location ~ \.php$ {</div><div>    #    proxy_pass   <a href="http://127.0.0.1">http://127.0.0.1</a>;</div><div>    #}</div><div><br></div><div>    # pass the PHP scripts to FastCGI server listening on <a href="http://127.0.0.1:9000">127.0.0.1:9000</a></div><div>    #</div><div>    #location ~ \.php$ {</div><div>    #    root           html;</div><div>    #    fastcgi_pass   <a href="http://127.0.0.1:9000">127.0.0.1:9000</a>;</div><div>    #    fastcgi_index  index.php;</div><div>    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;</div><div>    #    include        fastcgi_params;</div><div>    #}</div><div><br></div><div>    location ~ \.php$ {</div><div>        root           /var/www/html;</div><div>        fastcgi_pass   <a href="http://127.0.0.1:9000">127.0.0.1:9000</a>;</div><div>        fastcgi_index  index.php;</div><div>        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;</div><div>        include        /etc/nginx/fastcgi_params;</div><div>    }</div><div>    location ~ \.pl|cgi$ {</div><div>        root           /var/www/html;</div><div>        fastcgi_pass   <a href="http://127.0.0.1:8999">127.0.0.1:8999</a>;</div><div>        fastcgi_index  index.cgi;</div><div>        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;</div><div>        include        /etc/nginx/fastcgi_params;</div><div>    }</div><div><br></div><div>    # deny access to .htaccess files, if Apache's document root</div><div>    # concurs with nginx's one</div><div>    #</div><div>    #location ~ /\.ht {</div><div>    #    deny  all;</div><div>    #}</div><div>}</div><div><br></div><div>After that, I restarted nginx. Looks like PHP (/~user/index.php) finally works!</div><div>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.</div><div><br></div><div>2015-12-01 1:47 GMT+09:00 Aleksandar Lazic <<a href="mailto:al-nginx@none.at">al-nginx@none.at</a>>:</div><div>> Hi.</div><div>></div><div>> Am 29-11-2015 12:02, schrieb Smart Goldman:</div><div>>></div><div>>> Hi, thank you for great help, Aleksandar Lazic.</div><div>>> I tried it.</div><div>></div><div>></div><div>> How looks now your config?</div><div><br></div><div>I remade as above config.</div><div><br></div><div>>> PHP script shows me "File not found." and outputs the following log:</div><div>>> 2015/11/29 05:50:15 [error] 5048#0: *6 FastCGI sent in stderr: "Primary</div><div>>> script unknown" while reading response header from upstream, client:</div><div>>> 119.105.136.26, server: localhost, request: "GET /~user/index.php</div><div>>> HTTP/1.1", upstream: "fastcgi://<a href="http://127.0.0.1:9000">127.0.0.1:9000</a> [2]", host:</div><div>>> "<a href="http://host.domain.com">host.domain.com</a> [4]"</div><div>>></div><div>>> - I do not know how to fix it...</div><div>>></div><div>>> CGI script shows me "Error: No such CGI app -</div><div>>> /home//public_html/~user/index.cgi may not exist or is not executable by</div><div>>> this process." and outputs nothing to error.log.</div><div>>></div><div>>> - /home//public_html/~user/... I think this path is wrong and I tried to</div><div>>> fix this path but I could not. /home/user/public_html/ should be correct</div><div>>> path..</div><div>></div><div>></div><div>> Please run the debug log to see more.</div><div>></div><div>> <a href="http://nginx.org/en/docs/debugging_log.html">http://nginx.org/en/docs/debugging_log.html</a></div><div>></div><div>> Due to the fact that I don't know if you use the centos packes or the nginx</div><div>> package I suggest to install the following packages</div><div>></div><div>> <a href="http://nginx.org/en/linux_packages.html#mainline">http://nginx.org/en/linux_packages.html#mainline</a></div><div>></div><div>> and the nginx-debug and run the debug instance with the suggested settings</div><div>> in</div><div>></div><div>> <a href="http://nginx.org/en/docs/debugging_log.html">http://nginx.org/en/docs/debugging_log.html</a></div><div><br></div><div>I installed nginx with rpm -Uvh <a href="http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm">http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm</a> and yum -y install nginx.</div><div>Do I need to reinstall nginx for the debug?</div><div><br></div><div><br></div></div></div>