繁体   English   中英

Apache中反向代理的无限超时

[英]infinite timeout for reverse proxy in 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作为代理服务器,龙卷风的性能是否会降低?

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

我认为您无法消除这一点。 这背后的理由是Apache(或与此有关的任何代理服务器)必须保持其性能,如果必须保持陈旧或不活动的连接,则显然不能保持其性能。 您宁愿让代理服务器代理比非活动连接更多的活动连接。

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

谈到第二个问题,除了Apache和Tornado服务器之间的延迟之外,应该没有其他区别。 您可以很好地将Tornado服务器直接暴露给全世界,但这会带来一些挑战:1.更多的操作工作-确保Tornado进程始终处于运行状态。 2.代理和负载平衡将变得更加困难。 3.由于您编写的是代码而不是成千上万的专业贡献者,因此安全性更差。 因此,您不应该考虑将每个服务器都以root用户身份运行。 但是您仍然可以安全地对Apache或Nginx进行相同的操作。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM