-->

使用PHP的set_time_limit防止nginx的504网关超时()(Prevent ngin

2019-08-23 01:47发布

我从nginx的,当我的PHP脚本运行时间比平时长得到504超时消息。 set_time_limit(0)似乎并没有阻止! 它是否在运行nginx的PHP5-FPM时无法正常工作? 如果是这样,什么设置时间限制的正确方法?

错误:

504 Gateway Time-out
nginx/1.2.7

Answer 1:

有几种方法,使您可以设置PHP-FPM超时。 在/etc/php5/fpm/pool.d/www.conf我加入这一行:

request_terminate_timeout = 180

此外, /etc/nginx/sites-available/default添加以下行有问题的服务器的位置块:

fastcgi_read_timeout 180;

整个定位块看起来是这样的:

location ~ \.php$ {
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_read_timeout 180;
    include fastcgi_params;
} 

现在,只需重新启动的php-fpm的和nginx的和应该有少取于180秒的请求没有更多的超时。



Answer 2:

试试这个链接 ,但对如何解决这一问题更好的解决方案。 因此,步骤如下:

  1. 打开nginx.conf位于文件/etc/nginx目录。
  2. 根据下文的一段代码添加这个http {节:

     client_header_timeout 3000; client_body_timeout 3000; fastcgi_read_timeout 3000; client_max_body_size 32m; fastcgi_buffers 8 128k; fastcgi_buffer_size 128k; 

    注意:如果它已经存在,改变根据的值。

  3. 刷新的Nginx和PHP5-FPM。

     $ service nginx reload $ service php5-fpm reload 

    如果错误仍然存​​在,考虑增加值。



Answer 3:

您不能使用PHP,以防止nginx的发出超时。

要配置nginx的,以允许更多的时间看proxy_read_timeout指令 。



Answer 4:

正确答案是在Nginx的配置增加fastcgi_read_timeout。
就那么简单!



Answer 5:

 sudo nano /etc/nginx/nginx.conf

添加这些变量nginx.conf文件:

http {  
  # .....
  proxy_connect_timeout       600;
  proxy_send_timeout          600;
  proxy_read_timeout          600;
  send_timeout                600;
}

然后重新启动:

service nginx reload


Answer 6:

您需要添加额外的nginx的指令(用于ngx_http_proxy_module中) nginx.conf ,如:

proxy_read_timeout 300;

基本上nginx的proxy_read_timeout指令改变代理超时,该FcgidIOTimeout是该安静太长脚本和FcgidBusyTimeout对于那些需要很长时间才能执行脚本。

此外,如果你正在使用FastCGI应用程序,增加这些选项,以及:

FcgidBusyTimeout 300
FcgidIOTimeout 250

然后重新加载nginx的和PHP5-FPM。

的Plesk

在Plesk中,您可以在其他nginx的指令Web服务器设置添加它。

对于下HTTP的其他指令Web服务器设置的FastCGI检查。

请参阅: 如何解决在Plesk中FastCGI的超时问题?



Answer 7:

由于您使用的PHP-FPM你应该利用fastcgi_finish_request()为您知道可能需要较长时间处理请求。



Answer 8:

使用set_time_limit(0)使用PHP-fpm的或类似的进程管理器时是无用的。

底线是不使用set_time_limit当使用php-fpm ,以提高您的执行超时,请检查本教程 。



Answer 9:

有三种可能发生在这种情况下超时。 可以看出,每个答案只集中在一个这样的可能性方面。 所以,我认为把它写下来,有人来这里玩在未来不需要抽查每个答案并获得成功,不知道这工作。

  1. 超时从请求者请求 - 需要设置超时头(参照请求库头标配置)
  2. nginx的同时使请求 (转发到代理服务器之前),例如超时:巨大的文件被上传
  3. 转发到代理的服务器超时 ,服务器没有及时回信nginx的。 例如:耗时脚本在服务器上运行

因此,对于每个问题修补程序如下。

  1. 设定的超时头例如:在AJAX

 $.ajax({ url: "test.html", error: function(){ // will fire when timeout is reached }, success: function(){ //do something }, timeout: 3000 // sets timeout to 3 seconds }); 

  1. nginx的客户端超时

     http{ #in seconds fastcgi_read_timeout 600; client_header_timeout 600; client_body_timeout 600; } 
  2. nginx的代理的服务器超时

     http{ #Time to wait for the replying server proxy_read_timeout 600s; } 

因此,使用一个你需要的。 也许在某些情况下,你需要所有这些配置。 我需要。



Answer 10:

我解决这个烦恼与配置APACHE! 所有的方法(本主题)是不正确的我...然后我尝试chanche Apache的配置:

Timeout 3600

然后我的脚本工作!



文章来源: Prevent nginx 504 Gateway timeout using PHP set_time_limit()