Nginx + Php-fpm fastcgi 上游超时

Jan*_*ter 9 php timeout fastcgi nginx fpm

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

<?php
sleep(70); # extend 60s
phpinfo();
Run Code Online (Sandbox Code Playgroud)

每次504 Gateway Time-outNginx 响应 60 秒后都会终止。

当我检查 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", ...
Run Code Online (Sandbox Code Playgroud)

/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;
Run Code Online (Sandbox Code Playgroud)

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

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

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

location ~ \.php$ {
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    include fastcgi_params;
}
Run Code Online (Sandbox Code Playgroud)

从我到目前为止读到的内容来看,这似乎不是 PHP 的问题,而是 Nginx 造成了超时。尽管如此,我也尝试修改 PHP 中的限制:

我的价值观来自phpinfo()

default_socket_timeout=600
max_execution_time=300
max_input_time=-1
memory_limit=512M
Run Code Online (Sandbox Code Playgroud)

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

catch_workers_output = yes
request_terminate_timeout = 600
Run Code Online (Sandbox Code Playgroud)

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

我还使用亚马逊的负载均衡器路由到服务器,但超时配置也从默认的 60 秒增加。

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

谢谢

Jan*_*ter 25

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

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

fastcgi_read_timeout 600;
fastcgi_send_timeout 600;
fastcgi_connect_timeout 600;
Run Code Online (Sandbox Code Playgroud)

  • 我相信它是包含配置的“/etc/nginx/sites-enabled/your-site”。只需确保稍后定义的包含内容没有被覆盖即可。 (3认同)