为什么要在Glassfish或Tomcat前面使用Apache Web服务器?

为什么要在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注入等)的额

在GF或Tomcat前面使用ApacheWebServer好吗?它是否提高了性能/安全性

或者没有任何理由将Apache Web服务器与GF一起使用?

  • 可伸缩性-正如Amir和user384706所指出的,您可以在Apache后面对应用程序的多个实例进行负载平衡。这将允许您处理更多的卷,并在一个实例发生故障时提高稳定性

  • 安全性-Apache、Tomcat和Glassfish都支持SSL,但如果您决定使用Apache,很可能您应该在那里配置它。如果您需要针对攻击(DoS、XSS、SQL注入等)的额外保护,可以安装web应用程序防火墙

  • 附加功能-Apache有一系列不错的模块,可用于URL重写、与其他编程语言接口、身份验证和大量其他功能

  • 性能-如果您有大量静态内容,使用Apache提供这些内容将提高您的性能。如果您的大部分内容是动态的,那么单独使用Tomcat或Glassfish也同样快(可能更快)。(正如对的回答所指出的,这不再是事实。)


如果您运行的是LAMP堆栈,那么可以在apache上运行PHP/Ruby,并使用mod_jk将java内容转发给tomcat

将Apache放在Tomcat前面的一个原因是为了负载平衡。
请求到达前面的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)

    • 既然每个人都给了你为什么把Apache放在Tomcat前面的理由,那么让我给你一些为什么的理由:

      • 意思是没有彗星、网袋等
      • 如果您不使用AJP,我注意到在使用Apache的mod_proxy时会有相当大的代理开销。所以,如果您在前面寻找低延迟的Apache,那就不太好了
      • 与Nginx或Lighttpd等相比,Apache有着相当大的足迹
      把Apache放在前面不算

      • 提高性能
      • 改善安全。我认为我从未见过Tomcat存在真正的安全问题。我不知道这个BS是从哪里来的,因为Tomcat不如Apache安全
      Apache提供的是更多插件,允许您运行不同的web技术


      如果您只需要Tomcat,则更适合使用HAProxy或Nginx作为负载平衡器。

      实际上,静态内容的性能差异可以忽略不计,请参阅如果您使用Comet/Websockets,请不要将Apache放在前面。请参阅我的答案。Tomcat 7支持AJP连接器的NIO(请参阅),尽管仍然标记为实验性的。@Bob,而该文档似乎显示NIO支持该文档