【发布时间】:2011-07-04 14:06:07
【问题描述】:
在 GF 或 Tomcat 前使用 Apache Webserver 是个好主意吗?它是否提高了性能/安全性?
或者没有任何理由将 Apache Web Server 与 GF 一起使用?
【问题讨论】:
-
如果你在做 Comet/Websockets,不要把 Apache 放在前面。看我的回答。
在 GF 或 Tomcat 前使用 Apache Webserver 是个好主意吗?它是否提高了性能/安全性?
或者没有任何理由将 Apache Web Server 与 GF 一起使用?
【问题讨论】:
取自https://cwiki.apache.org/confluence/display/TOMCAT/Connectors#Connectors-Q3
【讨论】:
既然每个人都给了你为什么将 Apache 放在 Tomcat 前面的理由,那么让我给你一些不的理由:
把 Apache 放在前面确实不:
Apache 为您提供的是更多插件,并允许您运行不同的 Web 技术。
如果您只需要 Tomcat,您会更适合使用 HAProxy 或 Nginx 作为负载平衡器。
【讨论】:
可扩展性 - 正如 Amir 和 user384706 所指出的,您可以在 Apache 后面对应用程序的多个实例进行负载平衡。这将使您能够处理更多的流量,并在您的一个实例出现故障时提高稳定性。
安全性 - Apache、Tomcat 和 Glassfish 都支持 SSL,但如果您决定使用 Apache,那么您很可能应该在其中配置它。如果您想要额外的攻击防护(DoS、XSS、SQL 注入等),您可以安装mod_security Web 应用防火墙。
其他功能 - Apache 有许多不错的模块可用于 URL 重写、与其他编程语言的接口、身份验证以及大量其他内容。
性能 - 如果您有很多静态内容,使用 Apache 提供它会提高您的性能。如果您的大部分内容是动态的,那么单独使用 Tomcat 或 Glassfish 将同样快(可能更快)。 (正如this question 的答案所指出的那样,这不再是真的了。)
【讨论】:
将 Apache 放在 Tomcat 前面的一个原因是为了负载平衡。
请求先到达 Apache 服务器,然后根据负载和可用性分发到后端 Tomcat 容器。
客户端只知道一个 IP (Apache),但请求分布在多个容器上。
因此,如果您部署了一种分布式 Web 应用程序并且您需要它的健壮性。
如果您的问题是关于一个简单的 Web 应用程序,那么请参阅 dbyrne 答案
【讨论】:
如果您正在运行 LAMP 堆栈,您可以从 apache 运行 PHP/Ruby 的东西,并使用 mod_jk 将 java 的东西转发到 tomcat。
【讨论】: