Apache上的Django-防止504网关超时

Apache上的Django-防止504网关超时,django,apache,http,httprequest,mod-wsgi,Django,Apache,Http,Httprequest,Mod Wsgi,我有一个Django服务器通过mod_wsgi在Apache上运行。我有一个巨大的后台任务,通过API调用调用,在后台搜索电子邮件(通常需要几个小时),这是在后台完成的 为了便于调试(异常和其他一切都发生在后台),我创建了一个API调用来运行任务阻塞。因此,浏览器实际上会在这些小时内阻塞并接收结果 在localhost中,这很好。然而,在真实的Apache环境中,大约30分钟后,我得到一个504网关超时错误 如何更改设置,以便Apache允许HTTP请求在不返回504网关超时的情况下阻塞几个小时

我有一个Django服务器通过mod_wsgi在Apache上运行。我有一个巨大的后台任务,通过API调用调用,在后台搜索电子邮件(通常需要几个小时),这是在后台完成的

为了便于调试(异常和其他一切都发生在后台),我创建了一个API调用来运行任务阻塞。因此,浏览器实际上会在这些小时内阻塞并接收结果

在localhost中,这很好。然而,在真实的Apache环境中,大约30分钟后,我得到一个504网关超时错误

如何更改设置,以便Apache允许HTTP请求在不返回504网关超时的情况下阻塞几个小时(仅在此调试阶段)


我假设这可以在Apache配置中更改。

您不应该在Apache进程中执行长时间运行的任务,甚至不应该等待它们。使用后台任务队列系统(如芹菜)来运行它们。让任何web请求在排队后立即返回,并根据需要实施某种轮询机制,以查看作业是否完成以及是否可以获得结果


另外,您确定504不是来自某个前端代理(显式或透明)或负载平衡器吗?Apache中没有默认的30分钟超时。

您不应该在Apache进程中执行长时间运行的任务,甚至不应该等待它们。使用后台任务队列系统(如芹菜)来运行它们。让任何web请求在排队后立即返回,并根据需要实施某种轮询机制,以查看作业是否完成以及是否可以获得结果


另外,您确定504不是来自某个前端代理(显式或透明)或负载平衡器吗?Apache中没有默认的30分钟超时。

Graham,谢谢您的输入。使用芹菜作为BG处理是我已经在做的事情。与BG相比,主动运行任务仅用于调试目的。在BG中运行时,我可以保存异常描述,但主动运行会显示黄色的Django屏幕和整个堆栈描述。关于代理或负载平衡器,我不知道。我的应用程序托管在一个webpartial托管帐户上。这正是我需要帮助弄清楚的那种细节。在Web派系论坛上询问他们在Apache前面的前端nginx代理上有什么样的超时值。它们很可能有一个非常高的值,比如30分钟,尽管这似乎是一个过大的值,即使与nginx一起使用。格雷厄姆,谢谢你的输入。使用芹菜作为BG处理是我已经在做的事情。与BG相比,主动运行任务仅用于调试目的。在BG中运行时,我可以保存异常描述,但主动运行会显示黄色的Django屏幕和整个堆栈描述。关于代理或负载平衡器,我不知道。我的应用程序托管在一个webpartial托管帐户上。这正是我需要帮助弄清楚的那种细节。在Web派系论坛上询问他们在Apache前面的前端nginx代理上有什么样的超时值。它们很可能有一个非常高的值,比如30分钟,尽管这似乎是一个过大的值,甚至与nginx一起使用。