Nginx和php-fpm无法在嵌套位置正常使用

问题描述 投票:0回答:1

我正在尝试使用嵌套位置设置postfixadmin nginx配置文件,并遇到将正确的[[SCRIPT_FILENAME传递到php-fpm后端的问题。

应该作为postfixadmin脚本传递的URL以/ postfixadmin URL开头。提供/ postfixadmin文件的部分配置文件如下所示

location ~ ^\/postfixadmin.*(\.php|\.css|\.png|\.gif) { location ~ (.*\.php)$ { alias /var/www/postfixadmin/public/; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param SCRIPT_FILENAME $document_root$1; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param QUERY_STRING $query_string; fastcgi_pass 127.0.0.1:9000; proxy_read_timeout 500; } }

和这个位置的问题

location ~ (.*\.php)$ {

我想做的是提供与/ postfixadmin相关的所有扩展名,并将扩展名“ .php”作为php脚本,并补足脚本名称作为$ 1变量。但是实际上,当我尝试访问URL /postfixadmin/index.php时,我得到以下标头

HTTP/1.1 404 Not Found Server: nginx/1.16.1 Date: Sun, 19 Jan 2020 10:56:13 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive X-Powered-By: PHP/7.4.1

因此,您可以看到nginx正确选择了位置

location ~ ^\/postfixadmin.*(\.php|\.css|\.png|\.gif) {

然后Nginx在URL的末尾看到.php,并尝试将其发送到php-fpm后端。但是php-fpm会提供404状态代码。发生这种情况是由于

SCRIPT_FILENAME

为空。也许我错了,但我认为这个位置有这个问题

location ~ (.*\.php)$ {

因为当我使它看起来像这样时,一切正常,我可以将$ 1变量(作为脚本名称)传递给php-fpm后端。

location ~ .*\/(.*\.php)$ {

但是在位置之前指定。* /是没有意义的(因为我只想使用脚本名称指定扩展名,而我只是试图了解如何正确执行此操作。

谢谢

php linux nginx web
1个回答
0
投票
好我找出问题的原因。问题出在我的虚拟正则表达式中。
© www.soinside.com 2019 - 2024. All rights reserved.