繁体   English   中英

Nginx php-fpm 504网关错误

[英]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缓冲区(默认情况下已启用),而脚本花费的时间太长,无法返回第一个字节,从而导致超时。 只要我是正确的,您需要做两件事来解决此问题:

  1. fastcgi_buffering切换为off
  2. 更改您的脚本,以便在每次迭代后调用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM