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

当我的PHP脚本运行时间比平时长时,我得到了来自nginx的504超时消息。 set_time_limit(0)似乎并不妨碍! 在nginx上运行php5-fpm时不行吗? 如果是这样,设置时限的正确方法是什么?

错误:

 504 Gateway Time-out nginx/1.2.7 

有几种方法可以设置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秒的请求超时。

尝试这个链接 ,它有一个更好的解决scheme,如何解决这个问题。 所以步骤是:

  1. 打开位于/etc/nginx目录下的nginx.conf文件。
  2. http {下面添加下面这段代码http { section:

     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 

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

你不能使用PHP来防止由nginx发出的超时。

要configurationnginx以允许更多时间,请参阅proxy_read_timeout指令 。

正确的答案是增加Nginxconfiguration中的fastcgi_read_timeout
就那么简单!

既然你使用的是php-fpm,你应该利用fastcgi_finish_request()来处理你所需要的更长的请求。

在使用php-fpm或类似的进程pipe理器时,使用set_time_limit(0)是无用的。

底线是在使用php-fpm时不要使用set_time_limit ,为了增加执行的超时时间,请查看本教程 。

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

 proxy_read_timeout 300; 

基本上,nginx的proxy_read_timeout指令改变了代理超时, FcgidIOTimeout适用于安静时间过长的脚本,而FcgidBusyTimeout适用于执行时间过长的脚本。

另外,如果您正在使用FastCGI应用程序,请增加以下选项:

 FcgidBusyTimeout 300 FcgidIOTimeout 250 

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

的Plesk

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

对于FastCGI,请在 HTTP附加指令 下的“ Web服务器设置”中进行检查。

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

我用config APACHE解决了这个问题! 所有的方法(在这个主题)是不正确的我…然后我尝试chanche的Apacheconfiguration:

Timeout 3600

然后我的脚本工作!