为什么要在Glassfish或Tomcat前面使用Apache Web服务器?
在GF或Tomcat前面使用ApacheWebServer好吗?它是否提高了性能/安全性 或者没有任何理由将Apache Web服务器与GF一起使用?为什么要在Glassfish或Tomcat前面使用Apache Web服务器?,apache,tomcat,glassfish,Apache,Tomcat,Glassfish,在GF或Tomcat前面使用ApacheWebServer好吗?它是否提高了性能/安全性 或者没有任何理由将Apache Web服务器与GF一起使用? 可伸缩性-正如Amir和user384706所指出的,您可以在Apache后面对应用程序的多个实例进行负载平衡。这将允许您处理更多的卷,并在一个实例发生故障时提高稳定性 安全性-Apache、Tomcat和Glassfish都支持SSL,但如果您决定使用Apache,很可能您应该在那里配置它。如果您需要针对攻击(DoS、XSS、SQL注入等)的额
- 可伸缩性-正如Amir和user384706所指出的,您可以在Apache后面对应用程序的多个实例进行负载平衡。这将允许您处理更多的卷,并在一个实例发生故障时提高稳定性
- 安全性-Apache、Tomcat和Glassfish都支持SSL,但如果您决定使用Apache,很可能您应该在那里配置它。如果您需要针对攻击(DoS、XSS、SQL注入等)的额外保护,可以安装web应用程序防火墙
- 附加功能-Apache有一系列不错的模块,可用于URL重写、与其他编程语言接口、身份验证和大量其他功能
- 性能-如果您有大量静态内容,使用Apache提供这些内容将提高您的性能。如果您的大部分内容是动态的,那么单独使用Tomcat或Glassfish也同样快(可能更快)。(正如对的回答所指出的,这不再是事实。)
请求到达前面的Apache服务器,并根据负载和可用性分发到后端Tomcat容器。
客户端只知道一个IP(Apache),但请求分布在多个容器上。
因此,如果您部署了一种分布式web应用程序,并且需要它的健壮性,那么就是这种情况。
如果您的问题是关于一个简单的web应用程序的,请参见摘自
- 集群。通过使用ApacheHTTP作为前端,您可以让ApacheHTTP充当通向多个ApacheTomcat实例的内容的前门。如果您的一个ApacheTomcat失败,ApacheHTTP将忽略它,您的系统管理员可以整夜睡眠。如果使用硬件负载平衡器和ApacheTomcat的集群功能,这一点可以忽略
- 集群/安全。您还可以使用Apache作为不同URL名称空间(/app1/、/app2/、/app3/、或虚拟主机)的不同Apache Tomcat的前门。然后,ApacheTomcat可以分别位于一个受保护的区域中,从安全角度来看,您只需要担心ApacheHTTP服务器。从本质上讲,Apache变成了一个智能代理服务器
- 安全。这个话题可以左右任何一方。Java拥有安全管理器,而Apache在安全方面拥有更大的思想份额和更多的技巧。我不会更详细地讨论这个问题,但让谷歌成为你的朋友吧。根据您的场景,其中一个可能比另一个更好。但也要记住,如果您使用Tomcat运行Apache,您需要保护两个系统,而不是一个
- 附加组件。添加CGI、perl和PHP对Apache来说非常自然。这对Tomcat来说是一个更慢、更麻烦的过程。ApacheHTTP还有数百个可以随意插入的模块。ApacheTomcat可以具有此功能,但代码尚未编写
- 装饰师!使用ApacheTomcat前面的ApacheHTTP,您可以执行ApacheTomcat不支持或没有即时代码支持的任意数量的decorator。例如,可以为ApacheTomcat编写mod_头、mod_重写和mod_别名,但既然ApacheHTTP做得这么好,为什么还要重新发明轮子呢
- 速度。ApacheHTTP在提供静态内容方面比ApacheTomcat更快。但是,除非你有一个高流量的网站,这一点是无用的。但在某些情况下,ApacheTomcat可以比ApacheHTTPD更快。所以,对你的网站进行基准测试。使用适当的连接器(启用sendFile的APR)时,ApacheTomcat可以以httpd速度运行。在选择ApacheHTTPD和Tomcat时,不应将速度视为一个因素
- 插座处理/系统稳定性。ApacheHTTP在错误条件方面比ApacheTomcat具有更好的套接字处理能力。主要原因是ApacheTomcat必须通过需要跨平台的JVM执行其所有套接字处理。问题是套接字优化是一个特定于平台的考验。大多数情况下,java代码都很好,但当您也受到断开连接、无效数据包、来自无效IP的无效请求的轰炸时,Apache HTTP在消除这些错误条件方面比基于JVM的程序做得更好。(YMMV)
- 意思是没有彗星、网袋等
- 如果您不使用AJP,我注意到在使用Apache的mod_proxy时会有相当大的代理开销。所以,如果您在前面寻找低延迟的Apache,那就不太好了
- 与Nginx或Lighttpd等相比,Apache有着相当大的足迹
- 提高性能李>
- 改善安全。我认为我从未见过Tomcat存在真正的安全问题。我不知道这个BS是从哪里来的,因为Tomcat不如Apache安全
- 既然每个人都给了你为什么把Apache放在Tomcat前面的理由,那么让我给你一些为什么不的理由:
如果您只需要Tomcat,则更适合使用HAProxy或Nginx作为负载平衡器。实际上,静态内容的性能差异可以忽略不计,请参阅如果您使用Comet/Websockets,请不要将Apache放在前面。请参阅我的答案。Tomcat 7支持AJP连接器的NIO(请参阅),尽管仍然标记为实验性的。@Bob,而该文档似乎显示NIO支持该文档