Apache ProxyPass 负载平衡所有 URL

Posted

技术标签:

【中文标题】Apache ProxyPass 负载平衡所有 URL【英文标题】:Apache ProxyPass Load Balance ALL URL's 【发布时间】:2017-10-09 16:09:07 【问题描述】:

使用 Apache HTTP Server,我如何对所有 URL 进行负载平衡,而不仅仅是根目录“/”或根目录下的一些子目录(如“/css”),而是绝对平衡后端的所有内容?

我的配置只会路由文字根 URL“/”,但不包括其他 URL,我需要使用正则表达式吗?

相关配置:

<Proxy balancer://mycluster>
    BalancerMember https://server1:8443
    BalancerMember https://server2:8443
    ProxySet lbmethod=byrequests
</Proxy>

<VirtualHost _default_:443>
    SSLProxyEngine on
    ProxyPass "/" "balancer://mycluster"
    ProxyPassReverse "/" "balancer://mycluster"
</VirtualHost>

Apache access_log(通知 /css 收到 500 响应):

172.18.0.1 - - [10/May/2017:20:22:55 +0000] "GET / HTTP/1.1" 200 196
172.18.0.1 - - [10/May/2017:20:22:58 +0000] "GET /css HTTP/1.1" 500 528

Apache 错误日志:

[Wed May 10 20:22:58.607433 2017] [proxy:warn] [pid 9:tid 140682836559616] [client 172.18.0.1:35304] AH01144: No protocol handler was valid for the URL /css. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.

【问题讨论】:

【参考方案1】:

ProxyPass / .... 足以代理所有内容,但请确保匹配斜杠,指定“balancer://mycluster”是不正确的,并且您需要来回匹配斜杠,所以如果您的来源以斜杠结尾目标也以斜线结尾,而且在这种情况下 balancer://mycluster 实际上是 balancer://mycluster/

ProxyPass / balancer://mycluster/

【讨论】:

奇怪,我以前也有过这种情况,但没有用。现在可以了!谢谢 是否还需要在 标签本身中指定尾部斜杠? 我刚刚发布了一个类似的问题,虽然我需要源是子目录,而不是根目录。 @kojow7 更改指定的uri,没有问题。

以上是关于Apache ProxyPass 负载平衡所有 URL的主要内容,如果未能解决你的问题,请参考以下文章

使用多个 ProxyPass 配置 Apache

Apache负载均衡

[具有NGINX的Apache服务器的400错误请求负载平衡器

apache ProxyPass:如何保留原始IP地址

在 SSL 卸载程序和 Apache 之后的 Glassfish HTTPS 重定向

如何设置 Apache ProxyPass 以保留 Express 路由