[英]Nginx php-fpm 504 gateway error
经过数小时的搜索和调试,我放弃了!
关于长期运行的PHP流程,有成千上万的问题和文章,但没有一个解决了我的问题。
我有一个包含以下代码的PHP脚本:
$cur = 0;
// Second, loop for $timeout seconds checking if process is running
while( $cur < 31 ) {
sleep(1);
$cur += 1;
echo "\n ---- $cur ------ \n";
}
它仅打算运行31秒。
我在Debian服务器中将Nginx,PHP配置为fastcgi。
我设置max_execution_time = 600
在
/etc/php5/fpm/php.ini
我什至把它放在
/etc/php5/cli/php.ini
也设置
request_terminate_timeout = 600
在/etc/php5/fpm/pool.d/www.conf中
我还在nginx.conf http部分进行了这些更改
client_header_timeout 600;
client_body_timeout 600;
send_timeout 600;
fastcgi_read_timeout 600;
fastcgi_send_timeout 600;
client_max_body_size 600;
fastcgi_buffers 8 128k;
fastcgi_buffer_size 128k;
并将指令放入服务器部分。 和这些指令在Nginx配置的location部分中
send_timeout 600;
fastcgi_read_timeout 600;
fastcgi_send_timeout 600;
client_max_body_size 600;
fastcgi_buffers 8 128k;
fastcgi_buffer_size 128k;
但是我仍然在浏览器中遇到网关超时错误! (是的!我重启了php-fpm和nginx数千次了)
你们有什么主意吗?
请不要把我的回答当作侮辱,但是,您确定您的Web服务器已打开并且您是否尝试访问该网站的另一个页面?
看到这个答案后 ,我倾向于相信情况如下:nginx尝试填充其FastCGI缓冲区(默认情况下已启用),而脚本花费的时间太长,无法返回第一个字节,从而导致超时。 只要我是正确的,您需要做两件事来解决此问题:
fastcgi_buffering
切换为off
更改您的脚本,以便在每次迭代后调用flush()
和ob_flush()
:
while( $cur < 31 ) { ++$cur; echo "\\n ---- $cur ------ \\n"; flush(); ob_flush(); sleep(1); }
hth
我认为您需要在Nginx配置文件中包含proxy_read_timeout
指令 。 我自己的配置文件如下所示:
server {
proxy_read_timeout 300s;
...
}
您会注意到,这在我的服务器块中,但是该指令在http和location块中也有效。
*编辑以添加这是因为Nginx 代理请求了PHP-FPM服务器; 您尝试使用的指令仅对Nginx本身正在提供但未被代理的内容有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.