繁体   English   中英

Directadmin + Nginx + php fpm + location:找不到文件

[英]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相关文件。 纯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;
       }
    }
 }

他们所有人都给了'找不到档案'。 在浏览器中。

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

由于$document_root$fastcgi_script_name语句不再有效,因此在PHP中使用alias总是有问题的。

你可以使用:

fastcgi_param SCRIPT_FILENAME $request_filename;

但是nginx一个开放的bug使得try_filesalias使用有点不可预测。

我首选的解决方案是无形地重写URI,以便可以使用root指令

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

另请注意, ^~修饰符会使这些前缀位置块优先于同一级别的其他正则表达式位置块(例如,另一个location ~ \\.php$ block)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM