首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache + Tomcat与独立Tomcat或GlassFish

Apache + Tomcat与独立Tomcat或GlassFish
EN

Server Fault用户
提问于 2010-03-31 14:23:29
回答 3查看 5.1K关注 0票数 6

我正在设置一个Debian服务器来服务Java应用程序。我已经做了好几个星期的研究了。Tomcat的网站说,如果你不是聚类的话,最好使用独立的Tomcat来加快速度。但是,我已经看到很多人建议使用Apache + Tomcat可以提供更好的安全性和抵御攻击的保护。

请假定该进程将以非特权用户的身份在端口80上运行。我假设如果您在服务器前面运行防火墙,Tomcat应该会很好。但是,如果您只想使用Linux防火墙运行公开的web服务器,那么最好的选择是什么?

或者有人可以推荐另一个开源的web服务器。我试图保持解决方案尽可能轻,因为这些网络应用程序将在容器中运行。

所有的意见都受到欢迎和重视。

EN

回答 3

Server Fault用户

发布于 2010-04-02 15:58:53

根据我自己的经验,在Tomcat面前保留一些东西以保护它不受外界的影响是明智的。如果您使用tomcat本机扩展运行Tomcat,则IO非常快,Tomcat将运行得非常好。

另外,Tomcat可以通过使用jsvc在端口80上运行,而无需在根目录中运行,如果没有提供发行版,则构建和使用非常简单。

然而,保持一个简单的Web前端--以防万一--也是有用的:因为这个前端可以给您在Tomcat上永远不会有的一点灵活性(gzip进行动态,重写规则,在同一个IP上处理多个tomcat :使用简单虚拟主机和代理映射的端口,.)

Apache2可以是使用mod_proxy + AJP的前端。AJP处理头部和源IP转发到Tomcat,当您必须在域上添加RewriteRules时,您将永远不会感到高兴,因为Apache以非常简单的方式提供了这些信息。

然而,AJP选择webapp状态改变的速度非常慢,当您的webapp重新启动时,不得不等待30秒才能再次在互联网上使用它,这是非常令人沮丧的。在最新的AJP + Tomcat组合中也存在一些不太好的问题,导致了空页和内容类型的中断(虽然可以修复,但是通过放弃tomcat本机增强.)。

简单的HTTP Mod_proxy也可以使用,但是不是真正的代理(Apache更改主机:报头,源IP变成代理地址,.)是我不喜欢的东西。

其他不错的选择包括:

  • HAProxy:非常聪明和简单的代理,非常善于处理负载,非常简单的配置,稳固的和真正的HTTP代理,可以转发源IP通过通常的X转发-For报头。我在生产中使用这个,我对此非常高兴。它可以扩展到数千个实时连接,同时限制后端活动连接的数量,并且有许多内置的好功能。然而,它可能不适合做一些比HTTP路由更聪明的事情(例如,RewriteRules )。
  • Nginx:我听说这个服务器确实支持AJP。由于比Apache更轻,功能也比HAProxy更全面,如果有机会的话,我今天可能会尝试这样做。

结论

  • 如果你有时间做测试,试试Nginx,
  • 如果你想拥有一个简单而坚实的前端,可以选择HAProxy,
  • 如果你喜欢“传统”路线,那就去找Apache2+AJP,
  • 如果您认为Tomcat足够强大,并将提供您所需的所有功能,请使用jsvc并将Tomcat放在端口80上。
票数 4
EN

Server Fault用户

发布于 2010-03-31 21:42:12

我在UNIX上遇到的Tomcat和Glassfish都遇到的问题是(因为它们是Java应用程序,我想)它们不能绑定到端口80,然后丢弃根权限。将这些类型的东西作为root运行并不是最佳实践,因此剩下两个选项:

(1)以绑定到高端口(例如8080)的常规用户身份运行应用程序服务器,并使用类似于iptables规则的方法将端口80流量重定向到端口8080。我在Linux上使用了一些Glassfish服务器,它运行得非常好。

(2)以Apache后面的常规用户身份运行应用程序服务器。Apache可以绑定到端口80,删除特权,然后将请求代理到高端口上的应用服务器。

我更喜欢后者,但主要是因为我已经与Apache合作了很长时间,并且发现配置和管理非常方便。因此,如果您知道Apache很好地使用它,那么当您需要动态重写一些URL或调优过期标头时,您会很高兴的。另一方面,如果您没有Apache经验(或者在本例中需要尽可能轻量级的东西),那么只使用Tomcat和使用iptables可能更容易。

票数 1
EN

Server Fault用户

发布于 2010-04-01 01:16:12

按照@deutsch的回答,Tomcat不必在UNIX上作为root运行。如果您从一个包(例如Fedora / CentOS / Red的CentOS RPM )安装它,它将以用户tomcat的身份以有限的权限运行。

尽管如此,我同意@Deutsch的最后一段;使用Apache作为Tomcat的前端,除非您在一个非常严格的最后期限内部署。即使您还不太熟悉它,在Tomcat前面使用mod_proxy进行基本部署也很容易,而且您几乎肯定会从增加的可读性和安全性中受益。

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/128112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档