【问题标题】:Nginx + Php-fpm fastcgi upstream timed outNginx + Php-fpm fastcgi 上游超时
【发布时间】:2020-04-29 23:28:31
【问题描述】:

我遇到了长时间运行的 PHP 脚本的问题:

<?php
sleep(70); # extend 60s
phpinfo();

每次 60 秒后都会终止,并从 Nginx 响应 504 Gateway Time-out

当我检查 Nginx 错误时,我可以看到请求超时:

... [error] 1312#1312: *2023 upstream timed out (110: Connection timed out) while reading response header from upstream, ... , upstream: "fastcgi://unix:/run/php/php7.0-fpm.sock", ...

我查看了相关问题并尝试增加超时,创建一个包含以下内容的 /etc/nginx/conf.d/timeout.conf 文件:

proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
fastcgi_read_timeout 600;
fastcgi_send_timeout 600;
fastcgi_connect_timeout 600;

我还阅读了 fastcgicore 模块的 Nginx 文档,搜索默认设置为 60 秒的任何配置。

我排除了 client_* 超时,因为它们返回 HTTP 408 而不是 HTTP 504 响应。

这是我的 FastCGI 的 Nginx 服务器配置部分:

location ~ \.php$ {
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    include fastcgi_params;
}

从我目前阅读的内容来看,这似乎不是 PHP 的问题,而 Nginx 应该归咎于超时。尽管如此,我也尝试修改 PHP 中的限制:

我的价值观来自phpinfo()

default_socket_timeout=600
max_execution_time=300
max_input_time=-1
memory_limit=512M

php-fpm 池配置还启用了以下功能:

catch_workers_output = yes
request_terminate_timeout = 600

php-fpm 日志中没有任何内容。

我也是用亚马逊的Load Balancer路由到服务器,不过超时配置也是从the default 60 seconds增加的。

我不知道还能去哪里看,在所有更改期间我都重新启动了 php-fpm 和 nginx。

谢谢

【问题讨论】:

标签: php nginx timeout fastcgi fpm


【解决方案1】:

正如在这些情况下发生的那样,我实际上编辑了一个错误的配置文件,该文件没有被 Nginx 加载。

将以下内容添加到正确的文件中就可以了:

fastcgi_read_timeout 600;
fastcgi_send_timeout 600;
fastcgi_connect_timeout 600;

【讨论】:

  • 您最终将这些更改放在哪个文件中?
  • 我相信是 /etc/nginx/sites-enabled/your-site 包含配置。只要确保后面定义的包含没有覆盖。
猜你喜欢
  • 2011-08-01
  • 2017-01-19
  • 2011-03-12
  • 2019-01-20
  • 1970-01-01
  • 2017-12-28
  • 2021-05-27
  • 2016-11-28
  • 2013-06-13
相关资源
最近更新 更多