NGINX-FastCGI 在 stderr 中发送:“主脚本未知”,同时从上游读取响应头
当我尝试将 WordPress 设置为子目录时收到此错误消息。
文件未找到。
当查看 URL
example.com/blog
2020/05/05 20:55:56 [error] 906#906: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: xxx.xxx.xxx.xxx, server: example.com, request: "GET /blog/ HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php7.2-fpm.sock:", host: "example.com"
example.conf
server {
server_name example.com www.example.com;
root /var/www/example/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.html index.htm index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location /blog {
alias /var/www/blog;
index index.html index.htm index.php;
try_files $uri $uri/ /blog/index.php?$args;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
请尝试此配置
server {
listen 80;
server_name example.vm www.example.vm;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.html index.htm index.php;
charset utf-8;
location / {
root /var/www/laravel/public;
try_files $uri $uri/ /index.php?$query_string;
index index.html index.htm index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location /blog {
root /var/www/;
try_files $uri $uri/ /index.php?$args;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}
location ~ /\.(?!well-known).* {
deny all;
}
}
最终更新的答案已经过测试并且有效。这里的问题是别名/根目录的位置路径设置。也许您将来可以参考此以获取更多信息。 在子域上配置具有不同根文件夹的多个位置的 nginx
此:
在针对此错误的许多其他“解决方案”中,有人建议它与 SCRIPT_FILENAME 设置有关。我观察到(最终)该参数是在文件 /etc/nginx/fastcgi.conf 中设置的,但是在我的配置文件 /etc/nginx/sites-available/x10.local.conf 中,它有此指令:include fastcgi_params; 现在 /etc/nginx/ 目录中同时存在 fastcgi_params 和 fastcgi_param 文件。它们看起来完全相同,只是 fastcgi_params 文件不包含 SCRIPT_FILENAME 参数。我将这行添加到 fastcgi_params,重新启动 php-fpm 和 nginx,发现它终于起作用了。
在针对此错误的许多其他“解决方案”中,有人建议它与 SCRIPT_FILENAME 设置有关。我(最终)观察到该参数是在文件 /etc/nginx/fastcgi.conf 中设置的,但是在我的配置文件 /etc/nginx/sites-available/x10.local.conf 中,它有此指令: include fastcgi_params; 现在 /etc/nginx/ 目录中同时存在 fastcgi_params 和 fastcgi_param 文件。它们看起来完全相同,只是 fastcgi_params 文件不包含 SCRIPT_FILENAME 参数。我将这行添加到 fastcgi_params,重新启动 php-fpm 和 nginx,发现它终于起作用了。