繁体   English   中英

Apache:如何在Apache / mod_proxy中设置并发转发请求数的上限?

[英]Apache: how to setup in Apache/mod_proxy an upper bound on the number of concurrent forwarded requests?

我有一个相当标准的设置,其中前端Apache服务器通过mod_proxy / AJP将请求转发到Tomcat。 如何设置Apache / mod_proxy,使其最多仅转发N个(例如N = 4)并发请求到Tomcat? 进入Apache的其他并发请求不应被拒绝,而应该排队等待稍后发送到Tomcat。

PS 1:请注意,您可以使用maxThreads属性在Tomcat级别执行此操作,但是我更喜欢在Apache级别进行处理。

PS 2:我看到Apache具有MaxClients配置,这似乎可以满足我的需求。 但是我不清楚如何将每台服务器的MaxClient传递给mod_proxy,而不是每个Apache的MaxClient。 即,如果Apache将请求转发到4个Tomcat计算机的集群,我希望Apache将转发给任何给定Tomcat的并发请求数限制为N(例如,N = 4)。

通过向ProxyPass指令添加参数,解决方案是mod_proxy。 您想要设置的可能是max 但是,这将立即引发错误,并且在您达到最大值时不会将请求排队。

如果您确实要排队,则还必须使用mod_proxy_balancer。 例如,最多允许4个连接:

ProxyPass / balancer://appservers/ stickysession=JSESSIONID|jsessionid nofailover=On
<Proxy balancer://appservers>
    BalancerMember ajp://192.168.0.100:8009 max=4
    BalancerMember ajp://192.168.0.101:8009 max=4
    BalancerMember ajp://192.168.0.102:8009 max=4
    BalancerMember ajp://192.168.0.103:8009 max=4
</Proxy> 

不幸的是,在Apache中, max的值是每个进程的。 因此,仅当Apache有一个进程并使用线程而不是进程来处理多个连接时,才可以有效地限制与后端服务器的连接数,这取决于Apache使用的MPM

  • 在Windows上 ,您应该一切都很好,并且很可能不必担心这一点,因为Winnt MPM使用一个进程,该进程进而创建线程来处理请求。
  • 在UNIX上 ,如果您使用的是操作系统随附的Apache,那么很可能您有预分支MPM Apache,它会为每个请求创建一个进程,并且max参数无法使用:

    1. 要检查您拥有的MPM,请运行apachectl -l
    2. 在列表中,如果看到worker.cevent.c ,那么您几乎可以做到:现在只需要确保Apache仅创建一个进程即可。 为此,请将ThreadsPerChildMaxClients设置为相同的值,这将是Apache能够处理的并发连接总数。 ServerLimit设置为1。
    3. 在列表中,如果看到prefork.c ,则首先需要用工作程序或事件MPM Apache替换Apache。 您可以自己重新编译Apache(MPM不是运行时配置参数),也可以为平台获取现有的软件包。 然后,转到第二步。

暂无
暂无

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

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