Travis
Travis

Reputation: 1143

NGINX/PHP downloading instead of executing

I have an NGINX server with fastcgi/PHP running on it. I need to add userdirs to it, but I can't get PHP to execute the files - it just asks me if I want to download it. It does work without the userdir (e.g. it works on physibots.info/hugs.php, but not physibots.info/~kisses/hugs.php).

Config:

server {
    listen      80;
    server_name physibots.info;
    access_log  /home/virtual/physibots.info/logs/access.log;

    root /home/virtual/physibots.info/public_html;

    location ~ ^/~(.+?)(/.*)?\.php$ {
        fastcgi_param SCRIPT_FILENAME /home/$1/public_html$fastcgi_script_name;
        fastcgi_pass unix:/tmp/php.socket;
    }

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

    location ~ \.php$ {
        try_files $uri /error.html/$uri?null;
        fastcgi_pass unix:/tmp/php.socket;
    }
}

Upvotes: 13

Views: 14191

Answers (3)

Travis
Travis

Reputation: 1143

It turns out that it was linking to /home/foo/public_html/~foo. So, a circular symlink from /home/foo/public_html/~foo back to /home/foo/public_html works like a charm. Thanks for all your help!

Upvotes: 0

Marco
Marco

Reputation: 4395

Try adding this line to the php location blocks:

fastcgi_param  REDIRECT_STATUS    200;

Btw - did you check that the php.socket actually exists?

Upvotes: 0

CodeMonkeyG
CodeMonkeyG

Reputation: 185

I've had a similar problem before on another server. My issue was that the scripts containerd <?. Taking all of that and placing php after it (like this <?php ) anywhere it appears in the script executed the files instead of downloading them.

Hope that helps.

Upvotes: 1

Related Questions