我正在尝试使用嵌套位置设置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)$ {
但是在位置之前指定。* /是没有意义的(因为我只想使用脚本名称指定扩展名,而我只是试图了解如何正确执行此操作。谢谢