在旧版本的tomcat(如3.2)中,您可以找到recomendation以在apache Web服务器中提供静态内容,并将动态内容保留给tomcat本身。 在新版本的tomcat文档中,即使在mod_jk配置教程中也找不到任何对此实践的引用。 所以我很纳闷。
tomcat还不足以提供静态内容吗?如果我将部署架构更改为分离静态和动态内容,我会有性能改进吗?
答案 0 :(得分:9)
关于纯粹的速度,我建议阅读Myth or truth: One should always use Apache httpd in front of Apache Tomcat to improve performance?博文。让我部分引用它:
简短的回答是,这是一个 神话。更长的答案是回来 在Tomcat 3的时代,有一些 真相到此取决于 情况。但是,对于 今天使用的Tomcat版本(5.5.x 和6.0.x)然后没有必要 使用httpd纯粹的性能 原因。 Tomcat现在支持了 本机/ APR连接器使用 相同的本机库(Apache Portable Runtime-APR)作为httpd的 低级I / O因此可以 实现与httpd类似的性能。 当提供静态内容时 时间稍长一些 使用Tomcat比较httpd但是 差异是如此之小 不太可能引人注目的 生产系统。
...
performance testing已执行 克里斯托弗舒尔茨,一个常客 Tomcat用户邮件列表,用过 更广泛的文件大小和提供 - 在我看来 - 更好的结果。该 他的测试结果显示在 下图。
这些结果更符合要求 随着预期,尽管有 有几点值得注意:
- Apache httpd和Coyote APR / native表现出类似的表现 水平。
- Coyote NIO与httpd和Coyote APR / native相差不远。
- 似乎对sendfile的用途有限制。这可能是一个 硬件限制,但值得 进一步关注。我已将此添加到 我的待办事项列表。
- 对于小文件大小(小于~10KiB)的静态文件缓存 Tomcat提供了重要意义 性能提升。
...
虽然原始性能为静态 内容可能不是一个很好的理由 使用httpd,还有一些不错 你可能想要使用的原因 用Tomcat httpd。最常见的 原因是提供负载平衡 两个或多个Tomcat实例。的httpd 这不是唯一的选择 - 硬件负载平衡器或其他 可以使用反向代理 - 但它 是系统中的热门选择 管理员,因为他们中的很多人 已经熟悉httpd了。生病 写下更多关于使用httpd作为 负载平衡器在以后的文章中。
...
值得一读。
话虽如此,使用Tomcat前面的Web服务器来提供静态内容显然会为动态内容释放更多功能,因此是我最喜欢的选择。
答案 1 :(得分:2)
在Apache httpd和Tomcat之间选择时,不应该考虑速度。
什么是JK(或AJP)?
AJP是一种有线协议。它是HTTP协议的优化版本,允许Apache等独立Web服务器与Tomcat通信。 历史性,Apache在提供静态内容方面比Tomcat快得多。我们的想法是让Apache尽可能地提供静态内容,但是将请求代理到Tomcat以获取与Tomcat相关的内容。
并且
速度。 Apache提供静态内容比Tomcat更快。但除非你有高流量站点,否则这一点毫无用处。但在某些情况下,tomcat可能比Apache httpd更快。所以基准您的网站。 当使用正确的连接器(启用了sendFile的APR)时,Tomcat可以以httpd速度执行。在Apache httpd和Tomcat
之间进行选择时,不应将速度视为一个因素
资源:
答案 2 :(得分:0)
对于所有“/ static / *”内容,Tomcat中的servlet过滤器可能会添加具有max-age值的Cache-Control标头。因此,如果相同的客户经常回来(Intranet),Tomcat就足够了,因为静态内容将在浏览器缓存中,并且与动态内容相比很少被问到服务器。
此外,静态内容的缓存控制对扩展网络带宽来说是一个好主意。
(这只是我自己的经历,努力去吻)