Apache中反向代理的无限超时

时间:2013-06-06 12:37:39

标签: apache tornado reverse-proxy long-polling

我在apache后面运行龙卷风。我已经创建了代理服务器。

ProxyRequests On
ProxyPass /chat/ http://localhost:8888/chat/

这段代码效果很好,将我的所有请求传递给龙卷风并将响应返回给客户端。

现在,我正在使用龙卷风进行长时间轮询。一些在短时间内完成的请求说不到1分钟,这个反向代理工作正常。但是某些长轮询请求会产生502代理错误。此代理错误的原因是Apache可以持有长轮询请求仅一分钟(默认情况下)。它关闭请求,因此收到代理错误。

现在,我将指令修改为

ProxyRequests On
ProxyPass /chat/ http://localhost:8888/chat/ timeout=12000

即我将默认超时更改为12000秒。

目前这对我来说很好。这不是问题的最佳解决方案。理想情况下,长轮询请求可以超过指定的任何超时。所以我的问题是

  1. 如何使超时无限?即Apache的请求永远不会被关闭。
  2. 还请评论:通过Apache作为代理服务器,龙卷风的性能是否会降低?

1 个答案:

答案 0 :(得分:1)

我遇到了与Nginx类似的问题,并以与您相同的方式解决了问题。但是我将超时时间更改为1天,因为在我的情况下它已经足够大了。

我认为你无法取消这一点。这背后的基本原理是Apache(或任何代理服务器)必须保持其性能,如果它必须保持陈旧或不活动的连接,它显然不能。您宁愿让代理服务器代理比非活动连接更活跃的连接。

因此,无法关闭Apache中的ProxyTimeout,甚至无法关闭Nginx(使用proxy_read_timeout配置)。因此,如果您的代理服务器在超时内没有发送任何响应,那么您的应用程序服务器响应时间太长或者您的应用程序服务器出现问题,或者客户端没有请求任何响应。在第一种情况下,您可以进行安全估算以设置适当的超时。在第二种情况下,您需要修复应用程序服务器。在第三种情况下,您必须优雅地处理客户端上的情况并在需要时重新连接。

提出第二个问题,除了Apache和Tornado服务器之间的延迟之外,不应该有任何区别。您可以将Tornado服务器直接暴露给全世界,但这会带来一些挑战: 1.更多操作工作 - 确保Tornado进程始终正常运行。 2.代理和负载平衡将变得更加困难。 3.由于您编写了该代码而不是数千名专家贡献者,因此安全性更差。所以你不应该考虑以root身份运行这个服务器。但是你仍然可以安全地对Apache或Nginx做同样的事情。

当然上述问题是可以解决的,但为什么要解决已经解决的问题。 :)