Nginx + Php-fpm fastcgi 上游超时
Nginx + Php-fpm fastcgi upstream timed out
我在使用长 运行 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;
我还通读了两个 fastcgi and core 模块的 Nginx 文档,搜索了所有默认设置为 60 秒的配置。
我排除了 client_*
超时,因为它们 return 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 日志中没有任何内容。
我也是用Amazon的Load Balancer路由到服务器,但是超时配置也从the default 60 seconds增加了。
我不知道还有什么地方可以看,在我重新启动 php-fpm 和 nginx 的所有更改期间。
谢谢
在这些情况下,我实际上是在编辑一个错误的配置文件,它没有被 Nginx 加载。
将以下内容添加到正确的文件中就可以了:
fastcgi_read_timeout 600;
fastcgi_send_timeout 600;
fastcgi_connect_timeout 600;
我在使用长 运行 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;
我还通读了两个 fastcgi and core 模块的 Nginx 文档,搜索了所有默认设置为 60 秒的配置。
我排除了 client_*
超时,因为它们 return 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 日志中没有任何内容。
我也是用Amazon的Load Balancer路由到服务器,但是超时配置也从the default 60 seconds增加了。
我不知道还有什么地方可以看,在我重新启动 php-fpm 和 nginx 的所有更改期间。
谢谢
在这些情况下,我实际上是在编辑一个错误的配置文件,它没有被 Nginx 加载。
将以下内容添加到正确的文件中就可以了:
fastcgi_read_timeout 600;
fastcgi_send_timeout 600;
fastcgi_connect_timeout 600;