从Apache到Tomcat:mod_jk与mod_proxy的比较

113

使用mod_jkmod_proxy作为Apache与Tomcat实例连接的前端,有哪些优缺点?

我已经在生产环境中使用mod_jk多年了,但我听说这是“旧方法”来连接Tomcat。我应该考虑更改吗?会有任何好处吗?


1
我们在使用所有的mod_proxy_*变体时遇到了更多的问题,而在生产环境中成功地使用了mod_jk,包括Tomcat(5.5、6、7)和JBoss/WildFly。 - mirabilos
3个回答

90

这些模块的优缺点比较可以在http://blog.jboss.org/上找到。

mod_proxy

* Pros:
      o No need for a separate module compilation and maintenance. mod_proxy,
        mod_proxy_http, mod_proxy_ajp and mod_proxy_balancer comes as part of 
        standard Apache 2.2+ distribution
      o Ability to use http https or AJP protocols, even within the same 
        balancer.
* Cons:
      o mod_proxy_ajp does not support large 8K+ packet sizes.
      o Basic load balancer
      o Does not support Domain model clustering

mod_jk

* Pros:
      o Advanced load balancer
      o Advanced node failure detection
      o Support for large AJP packet sizes
* Cons:
      o Need to build and maintain a separate module

2
如果你正在使用Apache 2.0呢? - blak3r
11
我发现这篇博客文章http://www.tomcatexpert.com/blog/2010/06/16/deciding-between-modjk-modproxyhttp-and-modproxyajp很有帮助。 - CodeReaper
1
@yura - 这可能取决于您的操作系统版本。Centos 7.x似乎没有可用的模块,并且在apache 2.4中默认情况下也不可用:http://httpd.apache.org/docs/2.4/mod/ - runamok
1
具体请参见 https://wiki.apache.org/tomcat/FAQ/Connectors#Q7,这是@daniel-serodio提到的... 在哪里可以下载连接器的二进制分发版? 你不能:你需要下载源代码并为你的平台编译它。 - runamok
1
这个答案可能已经过时了。mod_proxy_ajp支持使用ProxyIOBufferSize来支持更大的数据包大小,而且在过去的十年中,mod_proxy的功能也有了很大的改进。 - Christopher Schultz
显示剩余3条评论

29
如果您希望留在Apache领域,您也可以尝试使用新的mod_proxy_ajp,它使用AJP协议与Tomcat通信,而不是旧的HTTP协议,但利用mod_proxy来完成工作。

谢谢。但是你知道proxy_ajp相比jk会提供更多的功能吗? - cherouvim
2
是的,所有控件和(相对)易于配置的mod_proxy,具有AJP协议的速度优势(而不是使用HTTP)。 - Vinko Vrsalovic
2
AJP使用二进制格式,理论上应该提供更好的性能。不过我从未对AJP与HTTP代理进行过性能测试。 - Taylor Leese

4

AJP与HTTP的区别

使用mod_jk时,使用的是AJP协议。而使用mod_proxy时则会使用HTTPHTTPS协议。这就是两者之间的本质区别。

Apache JServ Protocol(AJP)

Apache JServ Protocol(AJP)是一种二进制协议,可以将从Web服务器接收的请求代理到Web服务器后面的应用服务器。 AJP是高度可信的协议,不应向不受信任的客户端公开,否则可能会被用于获取敏感信息或在应用服务器上执行代码。

优点

  • 易于设置,因为不需要正确转发HTTP头文件。
  • 它的资源利用率较低,因为TCP数据包以二进制格式转发,而不是进行昂贵的HTTP交换。

缺点

  • 传输的数据未加密。只应在受信任的网络中使用。

超文本传输协议(HTTP)

HTTP作为客户机-服务器计算模型中的请求-响应协议。例如,Web浏览器可能是客户端,而运行在托管网站的计算机上的应用程序可能是服务器。客户端向服务器提交HTTP请求消息。服务器(提供诸如HTML文件和其他内容的资源,或代表客户端执行其他功能)向客户端返回响应消息。响应包含有关请求完成状态的信息,并且还可以在其消息正文中包含请求的内容。

优点

  • 可以使用SSL / TLS进行加密,适用于跨不受信任的网络的流量。
  • 它很灵活,因为允许在转发之前修改请求,例如设置自定义标头。

缺点

  • 由于需要确保正确转发HTTP头部,因此存在更多开销。
  • 资源利用率更高,因为请求在转发之前要完全解析。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接