NGINX - 在标准错误中发送的 FastCGI:“主要脚本未知”,同时从上游读取响应标头

Posted

技术标签:

【中文标题】NGINX - 在标准错误中发送的 FastCGI:“主要脚本未知”,同时从上游读取响应标头【英文标题】:NGINX - FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream 【发布时间】:2020-08-20 16:50:59 【问题描述】:

我在尝试将 WordPress 设置为子目录时收到此错误消息。 File not found. 查看网址时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;
    

【问题讨论】:

【参考方案1】:

请尝试此配置

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;
    

最终更新的答案经过测试并且有效。这里的问题是别名/根目录的位置路径设置。也许您将来可以参考此以获取更多信息。 Configure nginx with multiple locations with different root folders on subdomain

【讨论】:

还是一样。是因为权限问题吗? 你试过重启 nginx & php-fpm 吗?

以上是关于NGINX - 在标准错误中发送的 FastCGI:“主要脚本未知”,同时从上游读取响应标头的主要内容,如果未能解决你的问题,请参考以下文章

Nginx 错误 FastCGI 在 stderr 中发送:“访问脚本 [文件夹] 已被拒绝(请参阅 security.limit_extensions)”

如何在 Nginx 上使用 FastCGI 防止网关超时

FastCgi与PHP-fpm之间的关系

nginx FastCGI错误Primary script unknown解决办法

PHP-FPM与FastCGI,CGI有什么关系?

nginx FastCGI错误Primary script unknown解决办法