我尝试谷歌搜索,发现只有 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 连接器是分开的,并以此方式传递流量。