我在使用 apache 代理本地 tomcat 实例时遇到了一些问题。
我已经将问题追溯到 maxclients 和 proxypass 指令交互的方式。
在测试环境中,我设置了 apache 最多有 3 个客户端,并且将 proxypass 与 ajp 连接器的最大连接数设置为 2 个。
maxclients 3
proxypass /player ajp://localhost:8009/player max=2
为了说明这个问题,我已经对 8009 进行了防火墙保护,因此请求将不得不超时如果我向 /player 发出 3 个请求,向非代理文件发出 1 个请求(总共 4 个),我期望发生的情况是这样的:
- 第一个请求已接收并代理
- 已接收并代理第二个请求
- 收到第三个请求,并且由于 proxypass max 已达到,请求已排队
- 第四次请求已收到并正常处理
- 第一个请求超时
- 从队列中取出第三个请求并进行代理
然而实际发生的情况是这样的:
- 第一个请求已接收并代理
- 已接收并代理第二个请求
- 收到第三个请求并等待代理连接释放
- 已收到第 4 个请求,并且已达到最大客户端数量,因此已将其排入队列
- 第一个请求超时
- 已处理第 3 个请求
- 已处理第 4 次请求
有谁知道当达到最大代理连接数时如何强制 apache 工作程序重新排队请求,以便它可以转到非代理请求?
谢谢
皮特
答案1
据记载,您可以设置各种附加参数来控制 mod_proxy 的行为。
对你最有用的是:
获取(无默认值)
如果设置,则这将是等待连接池中可用连接的最大时间,以毫秒为单位。
如果池中没有可用连接,则 Apache 将向客户端返回 SERVER_BUSY 状态。
将其设置为 0,以便当池用完时,它会立即向客户端返回 503 状态。