0

我们当前的设置有 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 时才会引发错误。因为这是最后一件事,所以一切都应该事先加载。

4

1 回答 1

0

我刚刚通过运行以下命令修复了它

cd /media/httpd-2.4.16/modules/proxy
/usr/apache24/bin/apxs  -c -i -a mod_proxy.c proxy_util.c
/usr/apache24/bin/apxs  -c -i -a mod_proxy_ajp.c ajp*.c
/usr/apache24/bin/apxs  -c -i -a mod_proxy_balancer.c mod_proxy_connect.c mod_proxy_http.c

希望这对其他人有用。

于 2015-08-29T12:25:56.917 回答