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

Nav*_*Nav 54 apache tomcat glassfish

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

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

Ami*_*far 67

取自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)


Ada*_*ent 45

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

  • AJP连接器不支持也不支持高级IO,这意味着没有Comet,Websockets等.
  • 如果您没有使用AJP,我注意到在使用mod_proxy进行Apache时会有相当大的代理开销.因此,如果你正在寻找前面的低延迟Apache,那就不好了.
  • 与Nginx或Lighttpd等相比,Apache有一个相当大的足迹.

在前面把阿帕奇确实NOT:

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

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


dby*_*rne 8

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

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

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

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

  • 实际上,静态内容的性能差异可以忽略不计,请参阅http://stackoverflow.com/questions/654701/how-much-slower-is-serving-static-content-from-tomcat (2认同)