mod_jk 或 mod_proxy

mod_jk 或 mod_proxy

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

答案1

JIRA 不正式支持将 tomcat 放在 apache 后面,除非你使用mod_proxy_http。推荐的配置如下

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

...
ProxyPreserveHost On
<Location />
   ProxyPass http://localhost:8080/
</Location>
...

/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" /> 
...

这应该让你继续前进http,让我知道如果你想要一个例子https

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

答案2

这两种方法都将请求从 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 配合使用。

答案3

是的,有些区别。但是,选择使用哪个取决于您的应用程序。

举个例子,mod_proxy将充当正常的反向代理,仅转发常规标头,而mod_jk可以充当一个特殊的连接器,它不仅转发常规标头,还转发某些其他环境变量。可以打个比方陸財快进快退連接器。

为了使用 JSP,您应该使用mod_jk正是为此而设计的。仅使用mod_proxy仅转发到常规 Web 服务器时(可能会启动其他陣容连接器)。

[front apache]---proxy---[back apache]---ajp---[tomcat]
       |
       +--------- ajp----[tomcat]

希望这可以帮助。

答案4

mod_proxy 将使用普通的 http 连接器真正地“代理”所有对 tomcat 的请求。

mod_jk 打开与 tomcat 服务器的“ajp13”连接,这些连接与正​​常的 tomcat http 连接器是分开的,并以此方式传递流量。

相关内容