Answers:
您可以通过多种方式设置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秒就不会再有超时了。
fastcgi_read_timeout
在该location
块中设置了什么,它在60秒后仍会超时。
location
处理php脚本而不是docroot 的块中进行设置。
试试这个链接,它有一个更好的解决方案。因此,步骤如下:
nginx.conf
文件/etc/nginx
。在以下部分的代码下面添加此代码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;
注意:如果已经存在,请根据更改值。
重新加载Nginx和php5-fpm。
$ service nginx reload
$ service php5-fpm reload
如果错误仍然存在,请考虑增加值。
/etc/nginx/sites-available/mysite.com
。
您不能使用PHP阻止nginx发出的超时。
要配置nginx允许更多时间,请参阅proxy_read_timeout
指令。
在这种情况下可能会发生三种超时。可以看出,每个答案仅集中在这些可能性的一个方面。因此,我想把它写下来,这样以后再来这里的人就不必随意检查每个答案并获得成功,而无需知道哪个有效。
因此,解决每个问题的方法如下。
$.ajax({
url: "test.html",
error: function(){
// will fire when timeout is reached
},
success: function(){
//do something
},
timeout: 3000 // sets timeout to 3 seconds
});
nginx客户端超时
http{
#in seconds
fastcgi_read_timeout 600;
client_header_timeout 600;
client_body_timeout 600;
}
Nginx代理服务器超时
http{
#Time to wait for the replying server
proxy_read_timeout 600s;
}
因此,请使用您需要的那个。也许在某些情况下,您需要所有这些配置。我需要。
您需要在中添加额外的nginx指令(用于ngx_http_proxy_module
)nginx.conf
,例如:
proxy_read_timeout 300;
基本上,nginx proxy_read_timeout
指令会更改代理超时,“ FcgidIOTimeout
is”用于安静时间过长的脚本,以及FcgidBusyTimeout
的脚本,而执行时间太长的脚本。
另外,如果您使用的是FastCGI应用程序,请同时增加以下选项:
FcgidBusyTimeout 300
FcgidIOTimeout 250
然后重新加载nginx和PHP5-FPM。
在Plesk中,可以将其添加到“ Web服务器设置”中的 “ 其他nginx指令”下。
对于FastCGI,请在“ HTTP的附加指令”下的“ Web服务器设置”中检查。
FcgidBusyTimeout
变量只为Apache的存在?
set_time_limit(0)
当使用php-fpm或类似的进程管理器时,使用是没有用的。
使用set_time_limit
时不要使用底线php-fpm
,要增加执行超时,请查看本教程。