我们当前的设置有 2 个负载均衡的 Web 服务器,它们将它们的应用程序请求指向 2 个 Web 服务器的负载均衡器
LB1
/ \
Web1 Web2
\ /
LB2
/ \
App1 App2
我们现在使用的第 3 方应用程序建议我们从应用程序部分的硬件 LB 切换到软件。
(注意:来自 Apache 的任何信息都将被削减一点,以删除 IP、目录等。这只是妄想症)
我添加了一个负载平衡配置,非常精简,看起来像这样
<Proxy balancer://mycluster>
BalancerMember ajp://FIRSTIP:8009 route=node1
BalancerMember ajp://SECONDIP:8009 route=node2
ProxySet stickysession=JSESSIONID
</Proxy>
如您所见,我们正在平衡 ajp 请求。在此之后,网站的各个部分都有大量的 ProxyPass 规则。
我有这个由主 httpd.conf 加载
在那个 httpd.conf 中,我按此顺序加载了以下模块
mod_headers.so
mod_proxy.so
mod_proxy_http.so
mod_proxy_balancer.so
mod_proxy_connect.so
mod_proxy_scgi.so
mod_deflate.so
mod_proxy._ajp.so
问题是,当我把它全部到位并尝试重新启动 httpd 时,它会抛出这个:
httpd:httpd.conf 第 62 行的语法错误:无法将模块/mod_proxy_ajp.so 加载到服务器中:模块/mod_proxy_ajp.so:未定义符号:ajp_send_header
当然,现在所有服务器请求都抛出 500 并且在 error.log 中有一条错误消息:
没有协议处理程序对 URL / 有效。如果您使用的是 DSO 版本的 mod_proxy,请确保代理子模块包含在使用 LoadModule 的配置中。
我不明白为什么会这样。根据研究,只有在 mod_proxy 之前调用 mod_proxy_ajp 时才会引发错误。因为这是最后一件事,所以一切都应该事先加载。