3

I tried multiple combinations but I must be missing something. Closer I got is with the following config file, I get static content in /var/www/html and /home/user/www, but php only works in the server root, I get 404 on userdir.

server {
        listen 443 ssl default_server;
        listen [::]:443 ssl default_server;
        include snippets/self-signed.conf;
        include snippets/ssl-params.conf;

        root /var/www/html;

        index index.html index.htm index.php;

        server_name 172.24.50.59;

        location / {
                try_files $uri $uri/ =404;
                autoindex on;
        }

        location ~ ^/~(.+?)(/.+\.php)$ {
                alias /home/$1/www$2;

                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;

        }

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

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        }
        location ~ /\. {
                deny all;
        }       
}

server {
        listen 80;
        listen [::]:80;

        server_name 172.24.50.59;

        return 301 https://$server_name$request_uri;
}

Any help appreciated.

EDIT: I looked into it, but still can't get it to work. fastcgi-php.conf says:

fastcgi_split_path_info ^(.+\.php)(/.+)$;
try_files $fastcgi_script_name =404;
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;
fastcgi_index index.php;
include fastcgi.conf;

And in fastcgi.conf whether I set SCRIPT_FILENAME to $document_root$fastcgi_script_name or $request_filename I still get 404 with php files in /home/user/www.

/etc/nginx/fastcgi.conf:

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;
2
  • It probably depends on what you have in snippets/fastcgi-php.conf. The important parameter is SCRIPT_FILENAME which needs to be set to $request_filename to work with alias as well as root. Mar 10, 2019 at 18:27
  • Thanks for the tip, but it doesn't seem to do the trick @RichardSmith
    – user512558
    Mar 10, 2019 at 19:26

1 Answer 1

0

When using alias, the value of $document_root$fastcgi_script_name does not point to the requested file. You can use $request_filename which will work for both the root and alias cases.

Also, the try_files statement, using $fastcgi_script_name will always fail and force a 404 response.

Replace the try_files $fastcgi_script_name =404 and fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name statements with:

if (!-f $request_filename) { return 404; }
fastcgi_param SCRIPT_FILENAME $request_filename;

The above works for both the root and alias case.

1
  • Alas I'm still getting 404 on php files in userdir. I added the fastcgi.confcontent to the post, don't know if another parameters could be affecting this.
    – user512558
    Mar 10, 2019 at 21:34

You must log in to answer this question.