解决方案是通过在代理中添加参数来实现的
ProxyPass
指令。你想设置的可能是
. 但是,这会立即抛出一个错误,当您点击
.
如果你真的想排队,你必须同时使用mod\u proxy\u 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只有一个进程并且使用线程而不是进程来处理多个连接时,才能有效地限制到后端服务器的连接数,这取决于什么
MPM
正在由Apache使用:
-
,你应该都很好,而且很可能不必担心这个,因为
winnt MPM
使用一个进程,该进程反过来创建线程来处理请求。
-
在UNIX上
,如果您使用的是操作系统附带的Apache,不幸的是,您很有可能
prefork MPM
Apache,它为每个请求创建一个进程,max参数无法使用:
-
要检查您的MPM,请运行
apachectl -l
.
-
worker.c
或
event.c
,那么您就差不多很好了:您现在只需要确保Apache只创建一个进程。为此,设置
ThreadsPerChild
MaxClients
相同的值,即Apache能够处理的并发连接总数。同时设置
ServerLimit
到1。
-
在列表中,如果你看到
prefork.c