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_files
与 alias
的使用有点不可预测。
我的首选解决方案是不可见地重写 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$
块),如果有的话。
我在 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_files
与 alias
的使用有点不可预测。
我的首选解决方案是不可见地重写 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$
块),如果有的话。