nginx 超时时间设置会把php任务停止吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx 超时时间设置会把php任务停止吗相关的知识,希望对你有一定的参考价值。

参考技术A 工具原料:电脑+php nginx
nginx 超时时间是指程序运行超过这个时间就会停止运行
解决办法:将文件操作防御后台脚本处理去执行,过几分钟再进行下载并且删除暂存的文件即可.
伪代码的实现:
$file = TEMP_DIR.'/'.$filename;
$cmd = 'php '.ROOT_PATH.'/cron/xxx.php';
if (!file_exists($file))
//判断是否已经在后台执行
$count = exec('/bin/ps xaww | grep -v grep | grep "'. $cmd . '" |wc -l');
if (intval($count) == 0)
//先检查有无数据
...
if (xxx)
//退出操作

//异步执行
exec("$cmd arguments> /dev/null &");

echo '请10分钟后再刷新此页面';
exit;
else
//输出文件
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.$filename);
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
unlink($file);
exit;

//ps:脚本中可以用$argv接收参数
还有一种相对效率更高的形式是:通过swoole任务去执行,也可以减少脚本数量,提高代码维护成本
参考技术B nginx 超时时间是指程序运行超过这个时间就会停止运行

php环境下nginx超时问题解决

1.问题分析
nginx访问出现504 Gateway Time-out,一般是由于程序执行时间过长导致响应超时,例如程序执行需要90秒,而nginx最大响应等待时间为30秒,这样就会出现超时。
通常有以下几种情况导致:
(1).程序在处理大量数据,导致等待超时。
(2).程序中调用外部请求,而外部请求响应超时。
(3).连接数据库失败而没有停止,死循环重新连。
出现这种情况,我们可以先优化程序,缩短执行时间。另一方面,可以调大nginx超时限制的参数,使程序可以正常执行。
对于访问超时的设定,nginx与php都有相关的设置,可以逐一进行修改。
2.解决方法
nginx配置
nginx.conf中,设置以下几个参数,增加超时时间
fastcgi_connect_timeout
fastcgi连接超时时间,默认60秒
fastcgi_send_timeout
nginx 进程向 fastcgi 进程发送请求过程的超时时间,默认值60秒
fastcgi_read_timeout
fastcgi 进程向 nginx 进程发送输出过程的超时时间,默认值60秒

php配置
php.ini
max_execution_time
php脚本最大执行时间
php-fpm
request_terminate_timeout
设置单个请求的超时时间
php程序中可加入set_time_limit(seconds)设置最长执行时间
例如 set_time_limit(0) 表示不超时。

以上是关于nginx 超时时间设置会把php任务停止吗的主要内容,如果未能解决你的问题,请参考以下文章

php为啥会自动停止执行

php环境下nginx超时问题解决

使用Future停止超时任务

win nginx + php bat启动/停止脚本

PyQt4.QtWebKit:加载停止时 QWebPage QWebView 设置超时

客户端发送请求, java后端有耗时任务,web服务器如nginx返回服务端超时信息,会中断后端请求处理吗