Nginx 下载源代码,而不是通过 Docker 使用 PHP-FPM 运行

Nginx 下载源代码,而不是通过 Docker 使用 PHP-FPM 运行

我正在使用 Docker alpine-nginx 创建 PHP 后端应用程序,我需要重定向以/api运行www/index.php文件开头的所有请求,因为它是基于 MVC 框架构建的。

Proxy_pass 与 NextJS(React、Node)配合使用,非常适合网站的其余部分

但是 Nginx 下载了我的源代码,而不是将其传递给 FPM。关于该主题的其他问题都无法帮助我,也无法将位置块移到另一个位置之外。

你看到了什么吗?如果我删除嵌套位置,它会运行 PHP-FPM,但会出现错误Primary script unknown" while reading response header from upstream,试图了解问题出在哪里...


编辑:完整会议在这里

upstream next_app {
  # NextJS running app port
  server nextapp:3000;
}

upstream php_fpm {
  # PHP FPM server URI and port
  server phpapp:9000;
}

server {
  listen 80 default_server;

  server_name _;

  server_tokens off;

  error_log /var/log/nginx/error.log;
  access_log /var/log/nginx/access.log;

  location /api {
      root /var/www;
      try_files /www/index.php =404;

      include fastcgi_params;
      fastcgi_pass php_fpm;
  }

  # proxy pass for NodeJS app
  proxy_http_version 1.1;

  proxy_set_header Host                $http_host;
  proxy_set_header X-Real-IP           $remote_addr;
  proxy_set_header X-Forwarded-For     $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Proto   $scheme;
  proxy_set_header Host                $host;
  proxy_cache_bypass $http_upgrade;

  location / {
    proxy_pass http://next_app;
  }
}

现在它正在影响 PHP-FPM,但告诉我File not foundFPM 没有记录任何内容。Nginx 告诉我FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream

答案1

移除嵌套的location

尝试:

location /api {
    root /var/www;
    try_files /www/index.php =404;

    include fastcgi_params;
    fastcgi_pass php_fpm;
}

答案2

好的,感谢第一个回答,我对此进行了一些实验。查看了Nginx FASTCGI 注意,第四条建议设置SCRIPT_FILENAME为高山,似乎不包括

现在它可以工作了,通过这段代码;

location /api {
  root /var/www;
  try_files /www/index.php =404;

  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

  fastcgi_pass php_fpm;
}

相关内容