PHP and CGI on UserDir

Francis Daly francis at
Sun Nov 29 11:10:19 UTC 2015

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. 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,

Francis Daly        francis at

More information about the nginx mailing list