开发者问题收集

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

2021-08-03
1808

我使用 nginx docker 作为代理服务器,并且还有其他容器在运行: nuxt.jsphp-fpm

这是我的 fpmconf 文件:

server {
  server_name fpm.me.com;
  root /var/www/fpm/html;

  location / {
    # try to serve file directly, fallback to index.php
    try_files $uri /index.php$is_args$args;
  }

  #location ~ ^/index\.php(/|$) {
  # https://stackoverflow.com/questions/68350978/nginx-serving-only-but-not-any-other-files
  location ~ \.php(/|$) {
    fastcgi_pass fpm:9000;
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
    fastcgi_param DOCUMENT_ROOT $realpath_root;
    #internal;
  }

  location ~ \.php$ {
    return 404;
  }
  access_log off;
  error_log /dev/stderr;
}

但是当我输入 fpm.me.com 时,我在 nginxlog 文件中收到此错误:

2021/08/03 09:31:18 [error] 31#31: *13 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: MY_IP, server: fpm.me.com, request: "GET / HTTP/1.1", upstream: "fastcgi://172.20.0.8:9000", host: "fpm.me.com"

我在 StackOverFlow、ServerFault 和其他网站上看到了其他答案,但似乎对我没有帮助。

2个回答

这看起来无效:

fastcgi_pass fpm:9000

您有 2 个选项:

  • 使用 unix 套接字:

    fastcgi_pass unix:/run/php/php7.4-fpm.sock;

  • 使用 TCP 端口

    fastcgi_pass 127.0.0.1:9000;

选项 1 稍快一些,并且如果您收到许多并发连接,则不存在端口耗尽的风险。

the_nuts
2021-08-03

问题在于我为 nginxfpm 安装的 volumes 不一样。

这是我的 compose 文件:

services:
  nginx:
    image: nginx
    volumes:
      - './fpm/:/var/www/fpm/'
  fpm:
    image: custom
    volumes:
      - './fpm/:/var/www/'

虽然它应该是这样的:

services:
  nginx:
    image: nginx
    volumes:
      - './fpm/:/var/www/fpm/'
  fpm:
    image: custom
    volumes:
      - './fpm/:/var/www/fpm/'
Saeed
2021-08-03