为什么在Glassfish或Tomcat面前使用Apache Web Server?

时间:2011-02-25 20:38:13

标签: apache tomcat glassfish

在GF或Tomcat前面使用Apache Webserver是个好主意吗?它是否提高了性能/安全性?

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

5 个答案:

答案 0 :(得分:66)

取自http://wiki.apache.org/tomcat/FAQ/Connectors#Q3

  • 聚类。通过使用Apache HTTP作为前端,您可以让Apache HTTP充当您的内容的前门到多个Apache Tomcat实例。如果您的某个Apache Tomcats失败,Apache HTTP会忽略它,您的系统管理员可以彻夜难眠。如果您使用硬件负载均衡器和Apache Tomcat的群集功能,则可以忽略这一点。
  • 聚类/安全。您还可以将Apache用作不同URL Tomcats的前门,用于不同的URL命名空间(/ app1 /,/ app2 /,/ app3 /或虚拟主机)。然后,Apache Tomcats可以在一个受保护的区域中,从安全的角度来看,您只需要担心Apache HTTP服务器。从本质上讲,Apache成为智能代理服务器。
  • 安全。无论哪种方式,这个主题都可以左右。 Java拥有安全管理器,而Apache拥有更大的思想共享和更多关于安全性的技巧。我不会更详细地介绍这一点,但让Google成为你的朋友。根据您的情况,一个可能比另一个好。但是请记住,如果你使用Tomcat运行Apache - 你有两个系统要防御,而不是一个。
  • 附加组件。添加CGI,perl,PHP对Apache来说非常自然。它更慢,更多的是Tomcat的kludge。 Apache HTTP还有数百个可以随意插入的模块。 Apache Tomcat可以具备此功能,但代码尚未编写。
  • 装饰!使用Apache Tomcat前面的Apache HTTP,您可以执行Apache Tomcat不支持或不具备即时代码支持的任意数量的装饰器。例如,可以为Apache Tomcat编写mod_headers,mod_rewrite和mod_alias,但是为什么在Apache HTTP做得很好的时候重新发明轮子呢?
  • 速度。 Apache HTTP在提供静态内容方面比Apache Tomcat更快。但除非你有高流量站点,否则这一点毫无用处。但在某些情况下,Apache Tomcat可能比Apache httpd更快。所以基准您的网站。使用正确的连接器(启用了sendFile的APR)时,Apache Tomcat可以以httpd速度执行。在Apache httpd和Tomcat
  • 之间进行选择时,速度不应被视为一个因素
  • 插座处理/系统稳定性。与HTTP Tomcat相比,Apache HTTP在错误条件方面具有更好的套接字处理能力。主要原因是Apache Tomcat必须通过需要跨平台的JVM执行其所有套接字处理。问题是套接字优化是一个特定于平台的考验。大多数情况下java代码都没问题,但是当你被连接丢失,无效数据包,来自无效IP的无效请求轰炸时,Apache HTTP在丢弃这些错误条件方面比基于JVM的程序做得更好。 (YMMV)

答案 1 :(得分:45)

既然每个人都告诉你为什么要把Apache放在Tomcat面前让我给你一些理由,为什么来:

  • The AJP connector does not and will not support advanced IO表示没有 Comet Websockets 等。
  • 如果您没有使用AJP,我注意到在使用mod_proxy进行Apache时会有相当大的代理开销。因此,如果您正在寻找低延迟,那么前面的Apache就不会很好。
  • 与Nginx或Lighttpd等相比,Apache有一个相当大的足迹。

将Apache放在前面 NOT

Apache为您提供的功能是更多插件,并允许您运行不同的Web技术。

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

答案 2 :(得分:8)

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

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

  • 其他功能 - Apache提供了许多可用于URL重写,与其他编程语言接口,身份验证以及大量其他内容的好模块。

  • 性能 - 如果您有大量静态内容,使用Apache提供它将提高您的性能。如果你的大部分内容都是动态的,那么单独使用Tomcat或Glassfish会同样快(可能更快)。 (正如this question的答案所指出的那样,这不再是真的了。 。)

答案 3 :(得分:1)

将Apache置于Tomcat之前的一个原因是负载平衡 请求在前面命中Apache服务器并分发到后端Tomcat 容器,具体取决于负载和可用性。
客户端只知道一个IP(Apache),但请求分布在多个容器上 因此,在您部署一种分布式Web应用程序的情况下,您需要它健壮 如果您的问题是关于简单的Web应用程序,请参阅dbyrne答案

答案 4 :(得分:0)

如果你正在运行LAMP堆栈,你可以从apache运行PHP / Ruby东西并使用mod_jk将java东西转发到tomcat。