我有以下关于 PHP 和 Apache 的未解决的问题。我有一个长时间运行的脚本,在运行 30 秒后总是返回 504 网关超时。但是,如果我检查/server-process
,我可以看到请求仍在进行中。在被建议之前,我并不指望它是一个 cron 作业,因为这个漫长的过程应该在一分钟内完成,并且对于当前情况,我需要它在浏览器中运行。以下是我为服务器设置的内容:
/etc/apache2/apache2.conf
- Timeout 600
/etc/php/7.0/apache2/php.ini
- max_execution_time = 300
- max_input_time = 300
这是我的服务器信息:
root@izzystorage-core:~# lsb_release -r
Release: 16.04
root@izzystorage-core:~# apache2 -v
Server version: Apache/2.4.18 (Ubuntu)
Server built: 2017-09-18T15:09:02
root@izzystorage-core:~# php -v
PHP 7.0.22-0ubuntu0.16.04.1 (cli) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.0.22-0ubuntu0.16.04.1, Copyright (c) 1999-2017, by Zend Technologies
你们知道我的服务器出了什么问题吗?
编辑
- 我没有
mod_proxy
- 这只是一台服务器,中间没有负载均衡器
答案1
我在 PHP 脚本中运行一个 Mysql 查询,该查询扫描大量数据并在 2 分钟内做出响应。我总是在 30 秒后收到 504 网关超时。在尝试了所有常用建议后,我最终明白问题出在我用于访问 PHP 脚本的 Open Shift 路由上。Open Shift 默认路由超时为 30 秒。我将路由注释更改为 5 分钟,成功了!详情请参见此处: https://stackoverflow.com/questions/47812807/openshift-service-proxy-timeout
答案2
经过几个小时调整Timeout
、max_execution_time
和max_input_time
参数和多个service apache2 restart
无结果后,我恢复了原始参数(600、300、300)并使用重新启动了整个服务器shutdown -r now
。服务器重新上线后,所有问题突然解决。