使用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,如何解决这个问题。 所以步骤是:
- 打开位于
/etc/nginx
目录下的nginx.conf
文件。 -
在
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;
注意:如果它已经存在,请根据更改值。
-
重新加载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
然后我的脚本工作!