mod_jk 或 mod_proxy

bra*_*rad 6 debian tomcat mod-proxy mod-jk apache-2.2

我尝试使用谷歌搜索,我发现比较这两者的唯一文章是从 2005 年到 2002 年。我刚刚设置了我的第一个 Tomcat 实例来为我正在做的项目运行 Jira。我想通过端口 80 和 apache 代理它。据我所知,我可以使用 mod_proxy 轻松转发流量。使用 mod_jk 有什么区别?这两个模组之间是否有任何性能/安全差异?任何人都有通过 apache 设置转发的任何提示/经验?我正在运行 debian Lenny。

Dav*_*ley 8

这两种方法都将请求从 apache 转发到 tomcat。mod_proxy 使用我们都知道的一个爱的 HTTP。mod_jk 使用二进制协议 AJP。mod_jk 的主要优点是:

  • AJP 是一种二进制协议,因此与 HTTP 相比,两端处理速度略快,并且使用的开销略少,但这是最小的。
  • AJP 包括原始主机名、远程主机和 SSL 连接等信息。这意味着 ServletRequest.isSecure() 按预期工作,并且您知道谁在连接到您并允许您在代码中执行某种虚拟主机。

一个轻微的缺点是 AJP 基于固定大小的块,并且可能会因长标头而中断,尤其是具有长参数列表的请求 URL,但您应该很少处于具有 8K 的 URL 参数的位置。(这表明你做错了。:))

由于 mod_proxy_ajp 的存在,位置稍微复杂一些。在它们之间,mod_jk 是两者中更成熟的,但 mod_proxy_ajp 与其他 mod_proxy 模块在相同的框架中工作。我还没有使用 mod_proxy_ajp,但将来会考虑这样做,因为 mod_jk 涉及 Apache 之外的配置。

如果有选择,我更喜欢基于 AJP 的连接器,主要是因为我的第二个优势,而不是性能方面。当然,如果 Atlassian 不支持 mod_proxy_http 以外的任何东西,那确实有点束缚你的手,但是 mod_jk 确实可以与 JIRA 一起使用。


Dav*_*ney 2

JIRA 不正式支持将 tomcat 置于 apache 后面,除非您使用mod_proxy_http. 推荐的配置是这样的

/etc/httpd/vhosts.d/jira.company.com.conf

...
ProxyPreserveHost On
<Location />
   ProxyPass http://localhost:8080/
</Location>
...
Run Code Online (Sandbox Code Playgroud)

/opt/j2ee/domains/company.com/jira/tomcat/conf/server.xml

...
<Connector address="localhost" port="8080" URIEncoding="UTF-8"
   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
   enableLookups="false" redirectPort="8443" acceptCount="100"
   debug="0" connectionTimeout="20000"
   proxyName="jira.company.com" proxyPort="80"
   disableUploadTimeout="true" /> 
...
Run Code Online (Sandbox Code Playgroud)

这应该能让你继续下去http,如果你想要一个例子,请告诉我https

免责声明:我目前是 Atlassian 员工,尽管我不在 JIRA 团队工作