开发者问题收集

NGINX-FastCGI 在 stderr 中发送:“主脚本未知”,同时从上游读取响应头

2020-05-05
4039

当我尝试将 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;
    }
}
3个回答

请尝试此配置

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

Malik Perang
2020-05-06

此:

在针对此错误的许多其他“解决方案”中,有人建议它与 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,发现它终于起作用了。

tradenet
2023-01-01

在针对此错误的许多其他“解决方案”中,有人建议它与 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,发现它终于起作用了。

user1424074
2022-09-18