Directadmin + Nginx + php fpm + 位置:找不到文件

Directadmin + Nginx + php fpm + location: File not found

我在 Direct Admin 中有一个带有自定义位置的 nginx conf:

代码:

location /reset-password {
     alias /home/**/domains/**.**/public_html/api/frontend-scripts/resetPassword;
     include /usr/local/directadmin/data/users/**/nginx_php.conf;
}

这不起作用; nginx 在浏览器中为所有 PHP 相关文件显示 'File not found.'。普通 HTML 工作正常。

我尝试了其他几种解决方案,即:

代码:

location /reset-password {
    alias /home/**/domains/**.**/public_html/api/frontend-scripts/resetPassword;
    # use fastcgi for all php files
    location ~ \.php$
    {
       try_files $uri index.php;
       fastcgi_split_path_info ^(.+\.php)(/.+)$;
       include /etc/nginx/fastcgi_params;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       include /etc/nginx/nginx_limits.conf;
       if (-f $request_filename)
       {
           fastcgi_pass unix:/usr/local/php56/sockets/**.sock;
       }
    }
 }

他们都在浏览器中给出 'File not found.'。

所以它可能与 phpfpm 有关,但我没有选择。我做错了什么?

alias 与 PHP 一起使用总是有问题,因为 $document_root$fastcgi_script_name 语句不再有效。

您可以使用:

fastcgi_param SCRIPT_FILENAME $request_filename;

但是 open bug in nginx 使得 try_filesalias 的使用有点不可预测。

我的首选解决方案是不可见地重写 URI,以便可以使用 root directive

location ^~ /reset-password {
    rewrite ^/reset-password(.*)$ /resetPassword last;
}
location ^~ /resetPassword {
    root /home/**/domains/**.**/public_html/api/frontend-scripts;
    ...
}

另请注意,^~ 修饰符会导致 these prefix location blocks 优先于同一级别的其他正则表达式位置块(例如,另一个 location ~ \.php$ 块),如果有的话。