Apache proxypass max 配置选项和 maxclients 交互

Apache proxypass max 配置选项和 maxclients 交互

我在使用 apache 代理本地 tomcat 实例时遇到了一些问题。

我已经将问题追溯到 maxclients 和 proxypass 指令交互的方式。

在测试环境中,我设置了 apache 最多有 3 个客户端,并且将 proxypass 与 ajp 连接器的最大连接数设置为 2 个。

maxclients 3
proxypass /player ajp://localhost:8009/player max=2

为了说明这个问题,我已经对 8009 进行了防火墙保护,因此请求将不得不超时如果我向 /player 发出 3 个请求,向非代理文件发出 1 个请求(总共 4 个),我期望发生的情况是这样的:

  1. 第一个请求已接收并代理
  2. 已接收并代理第二个请求
  3. 收到第三个请求,并且由于 proxypass max 已达到,请求已排队
  4. 第四次请求已收到并正常处理
  5. 第一个请求超时
  6. 从队列中取出第三个请求并进行代理

然而实际发生的情况是这样的:

  1. 第一个请求已接收并代理
  2. 已接收并代理第二个请求
  3. 收到第三个请求并等待代理连接释放
  4. 已收到第 4 个请求,并且已达到最大客户端数量,因此已将其排入队列
  5. 第一个请求超时
  6. 已处理第 3 个请求
  7. 已处理第 4 次请求

有谁知道当达到最大代理连接数时如何强制 apache 工作程序重新排队请求,以便它可以转到非代理请求?

谢谢

皮特

答案1

据记载,您可以设置各种附加参数来控制 mod_proxy 的行为。

对你最有用的是:

获取(无默认值)
如果设置,则这将是等待连接池中可用连接的最大时间,以毫秒为单位。
如果池中没有可用连接,则 Apache 将向客户端返回 SERVER_BUSY 状态。

将其设置为 0,以便当池用完时,它会立即向客户端返回 503 状态。

相关内容