为什么我不应该直接使用Tomcat来提供Java Web应用程序?

我曾经多次听说,不应该从正在运行的Tomcat服务器直接向外界提供Java web应用程序。 相反,应该有一个常规的Web服务器之间 – 例如Apache。 为什么是这样?

最近刚刚问过我的同事web-dev的这个问题……他说,当只有一个单一来源(networking服务器)击中Tomcat时,Tomcat的运行效率会更高。 它会进一步扩大。 另外,实际的networking服务器更容易configuration,以做一些奇怪的事情,比如URL重写(一个非常常见的事情要做,根据所有关于SF的mod_rewrite问题来判断),访问控制和任何SSL这不像一个证书/一个站点那么简单。

我不知道这个答案是否特定于Java和Tomcat,但是在我们的安全模型中,我们不直接向互联网提供任何东西 – 我们在运行ReverseProxy的DMZ中将Apache放在所有的应用程序服务器中,在独立的DMZ (还有那些在另一个DMZ中连接到我们的数据库服务器的。)

除了安全性之外,这可以让您执行redirect,SSL卸载以及Apache可以执行的所有其他好东西。 我不知道Tomcat是否拥有所有这些function。

通常用于面向Tomcat的Apache服务器的主要目的是将静态内容 (如图像,HTML,JS,CSS文件) 卸载到Apache Web服务器。 只有dynamic请求传递给Tomcat,从而减lessstream量。 如果穿越防火墙。

查看官方Wiki的完整列表。 为什么我应该将Apache与Tomcat集成? (或不) ,这解释了安全性,集群和速度的好处,但是更新的Tomcat 6的性能并不像以前那么重要。