我应该自己运行Tomcat还是运行Apache + Tomcat?

Ock*_*zor 9 apache tomcat

我想知道将Tomcat作为Web服务器和容器运行是否可行?另一方面,似乎正确地扩展webapp的方法是在端口80上使用Apache HTTP侦听并将其连接到另一个端口上侦听Tomcat?两种方式都可接受吗?现在用的是什么?什么是主要区别?大多数主要网站如何解决这个问题?

谢谢.

Sim*_*nni 14

由于多种原因,将Apache(或任何其他Web服务器)放置在应用程序服务器(Tomcat)前是一件好事.

首先考虑的是静态资源和缓存.

Tomcat可能也会提供很多静态内容,甚至在动态内容上它也会向浏览器发送一些缓存指令.但是,每次首次命中tomcat的浏览器都会导致tomcat发送静态文件.由于在Tomcat中处理请求比在Apache中处理要贵一些(因为Apache是​​超级优化的并且利用了Tomcat中并不总是可用的非常低级别的东西,因为Tomcat从请求中提取的信息比Apache需要的要多得多等等. ..),静态文件可能更好地由Apache服务器.

然而,由于配置Apache以提供部分内容而Tomcat用于其余部分或URL空间是一项艰巨的任务,因此通常更容易让Tomcat使用正确的缓存头提供服务,并且Apache在其前面捕获内容,服务它需要浏览器,并缓存它,以便其他浏览器访问同一个文件将直接从Apache提供服务,甚至不会打扰Tomcat.

除了静态文件之外,还可能不需要每毫秒更新许多动态内容.例如,主页加载的json告诉用户数据库中有多少东西是一个昂贵的查询,执行数千次,可以安全地每小时执行一次,而不会让用户生气.因此,tomcat可以使用适当的一小时缓存指令为json提供服务,Apache将缓存json片段并将其提供给需要它一小时的任何浏览器.显然有很多其他方法可以实现它(缓存过滤器,缓存查询的JPA缓存等等),但是发送适当的缓存头并使用Apache作为反向代理非常容易,符合REST并且可以很好地扩展.

另一个考虑是负载平衡.Apache带有一个很好的负载平衡模块,它可以帮助您在许多Tomcat实例上扩展应用程序,假设您的应用程序可以水平扩展或在集群上运行.

第三个考虑因素是关于溃疡,标题等.有时您可能需要更改一些网址,或删除或覆盖某些标题.例如,在重大更新之前,您可能希望在浏览器上禁用缓存几个小时,以避免浏览器继续使用陈旧数据(与在切换服务器之前降低DNS TTL相同),或者将旧应用程序移动到另一个URL空间,或者重写旧的可能的URL到新的URL.虽然可以重新配置web.xml文件中的servlet,并且过滤器可以创建奇迹,但如果您使用的是解释URL的框架,则可能需要对站点地图文件或类似内容进行大量工作.

在Tomcat前面安装Apache或其他Web服务器可能只会使用mod_rewrite等模块帮助大量更改Apache配置文件.

所以,我总是建议在Tomcat前面安装Apache httpd.由于资源缓存,通常会恢复连接处理的小开销,并且在您第一次需要移动URL或处理某些标头时,会重新获得其他配置工作.