【问题标题】:NginX and Php-Fpm on dockerdocker 上的 NginX 和 Php-Fpm
【发布时间】:2018-12-16 15:54:02
【问题描述】:

我有一个官方 docker NginX 容器 (NginX:latest) 连接到基于官方 Php-Fpm (php:7.2-fpm) 的容器,使用绑定挂载进行配置和源代码(用于测试目的)。他们通过 FastCGI 进行通信。我正在为 Windows 2.0.0 运行 Docker Edge。 (引擎 18.09)。

php 应用程序提供 html 页面,每个页面上都有一些 XHR 请求以从同一应用程序获取 JSON 数据。

除了第二个 XHR 请求产生错误外,一切正常。页面本身加载,然后在文档就绪事件中处理两个 XHR 请求,但只有一个(通常是第一个)成功完成,第二个导致 404 错误。

响应包含 No input file specified. 错误并且 docker 控制台显示这些错误:

php-fpm: WARNING: [pool www] child 8 said into stderr: "ERROR: Unable to open primary script: /var/www/html/web/app.php (No such file or directory)"

Nginx: *235 FastCGI sent in stderr: "Unable to open primary script: /var/www/html/web/app.php (No such file or directory)" while reading response header from upstream, client: 192.168.16.2, server: my-server.com, request: "GET /cli/cli_har_rc.php?EVENT=GET&THREAD=2 HTTP/1.0", upstream: "fastcgi://192.168.16.3:9000", host: "my-server.com", referrer: "https://my-server.com/cli/cli_har.php"

这很奇怪,因为该文件存在,并且当我在单独的浏览器选项卡中使用相同的请求时,它运行良好。有时也会发生请求的顺序被浏览器交换,无论是哪个,只有第一个成功。 似乎请求并发起了作用。

NginX 站点配置文件:

server {
    set $request_url $request_uri;

    listen 80;
    server_name my-server.com;
    root /var/www/html/web;

    location / {
        try_files $uri /app.php?$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass fpm_cw:9000;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root/app.php;
        fastcgi_param SCRIPT_NAME /app.php;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param REQUEST_URI $request_url;
    }
}

当我对 XHR 请求调用 (1-2s) 设置一些时间距离时,它会按预期工作。 Windows 处理中 docker 中的一些处理延迟似乎是个问题。我还没有在 Linux 机器上检查它。

【问题讨论】:

  • 尝试关闭 nginx conf 上的缓存。
  • 尝试使用 proxy_cache_bypass 指令,仍然是同样的错误。请求标头中也禁用了缓存。

标签: php docker nginx


【解决方案1】:

您还可以通过在池配置文件中将 pm 指令设置为 static 并将 pm.maxchildren 设置为 1 来告诉 PHP-FPM 仅使用一个进程,从而防止对文件的任何并发访问。

https://github.com/docker/for-win/issues/2005#issuecomment-391822753

【讨论】:

    【解决方案2】:

    问题是由 Windows 上的 Docker 绑定挂载组合引起的。我没有走得更远,但似乎问题在具有生产容器的生产机器上解决了,其中没有绑定安装但整个项目在构建时复制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-26
      • 2021-04-02
      • 1970-01-01
      • 2021-04-08
      • 1970-01-01
      • 2021-10-17
      相关资源
      最近更新 更多