mod_proxy vs mod_proxy_ajp vs mod_jk


9

我们正在准备从以下环境迁移:

Apache 2.0.2 --AJP-> JBoss4.2.2

Apache 2.2.3-???-> JBoss 5.1.0

您如何将两者结合在一起?

选项有:

  1. 经典AJP(意味着为Apache构建mod_jk)
  2. mod_proxy(将HTTP请求转发到JBoss)
  3. mod_proxy_ajp

选项2是当前最受欢迎的解决方案,因为它似乎意味着处理量减少,因为不再需要转换AJP的JBoss响应,而CPU时间是我们需要密切关注基础架构的时间。选项2和3也随附Red Hat支持的Apache构建。

目前,我看不到我们选择选项1,因为我们通过选项3获得了“免费” AJP。

因此,选项2和3的优缺点是什么?对CPU负载的担心确实是我们需要担心的吗?我们在处理二进制数据(AJP流量)中失去了什么,我们是否会在减少带宽和IO的情况下恢复正常?

我们的基础架构将是Apache ,在一台RHEL 5机器上(最多在私有云中进行虚拟化)将最多 9个经过严格调优的JBosses(通常通常是其一半)。

在此先感谢您提供任何指导意见/建议。

丰富

Answers:


8

2 mod_proxy_http,除非您需要来自客户端的Host标头。

我不建议使用经典的mod_jk,因为它的功能已被mod_proxy_ajp取代,并且正如您自己说的那样,它需要自己构建和维护该模块。

我认为mod_proxy_http是一个非常干净的解决方案,它将ajp从图片中删除。但是,您应该注意从ajp到http的一些注意事项。如果您需要访问与Apache收到的服务器标头完全相同的服务器标头(包括Host标头),则应使用ajp。JBoss将看到来自Apache而不是原始客户端的新http请求。如果只需要客户端的远程IP,您仍然可以使用apache可以在新请求上设置的特殊标头来获得它。但是,如果要从应用程序层进行虚拟托管,则最好使用ajp。

就性能而言,无论是ajp还是http,都需要JBoss进行某些处理以及一些本地套接字TCP通信。您必须同时尝试两者,以查看哪种效率更高,但是我认为总体而言,这只占服务器总负载的很小一部分。Http是一个更复杂的协议,而ajp是专门为在Web和应用程序层之间有效地设计的,因此从理论上讲ajp可能更好。就是说,我发现在Tomcat应用程序服务器系列之外通常更好地支持http。

我使用mod_proxy_ajp和mod_proxy_http,但我没有任何问题。


Host如果您使用该标头,则该标头将正确通过ProxyPreserveHost On
-Derf 2011年

使用Apache mod_proxy时,请查看httpd.apache.org/docs/2.4/mod/mod_proxy.html#x-headers。如果配置了RemoteIpValve为你的Tomcat的Servlet的一部分,你的应用程序代码可以获取最多的信息透明 tomcat.apache.org/tomcat-8.0-doc/config/...
斯科特午阳
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.