2013-11-27 90 views
1

我在nginx + apache下运行此脚本。它将大型数据包(拆分成部分)发送到远程服务器,循环调用cURL执行。奇怪的是,超时后,我收到504错误到浏览器(队长),但脚本继续运行!“504网关超时”后脚本继续执行

我测试过它 - 脚本发送所有我需要它发送的数据,所以从技术上说,这不是问题。但我认为,像这样的任何不寻常的东西可能会在未来造成影响。

我希望有更多有经验的开发人员可以分享这个问题的任何知识。

回答

1

如果达到最大执行时间(在Apache中默认为30秒),服务器将发送504。但是脚本仍然在后台运行 - 它只是停止向客户端发送数据。如果您预计脚本运行的时间超过了最大执行时间,并希望查看它返回的数据,则应考虑在服务器上增加最大执行时间设置或在其他位置运行脚本,并通过套接字连接报告给浏览器或间隔轮询。

另一方面,为什么你使用nginx和apache?或者你的意思是它在两者上都做同样的事情?

+0

感谢您的回答。这可能很明显,我甚至可以自己找到答案。关于你的问题,嗯,Nginx可以作为Apache的前端代理 - 这种服务器的优点就在于它的优点。 – Nevertheless

+0

apache做了什么,你不能让nginx自己做? – jraede

+0

我明白你的观点 - 但出于理性而非技术性的考虑,我不能抛弃apache。我不是那个敲门的人。 – Nevertheless

0

我遇到了同样的问题。我想在这里说几件事。

从nginx服务器发送504错误。您可以通过增加nginx服务器中的超时设置(/etc/nginx/proxy.inc)来防止此错误。这里是我的服务器上的配置

proxy_send_timeout 600; // 10分钟 proxy_read_timeout 600; // 10分钟

因此,如果您的脚本需要超过10分钟,那么您将看到504错误出现。

最大执行时间默认为30秒。我相信你已经增加了它,这样脚本可以在504错误后继续执行。如果将最大执行时间设置为一个等于nginx超时值的值(如上所示为10分钟),那么该怎么办?