我正在设置一个Debian服务器来服务Java应用程序。我已经做了好几个星期的研究了。Tomcat的网站说,如果你不是聚类的话,最好使用独立的Tomcat来加快速度。但是,我已经看到很多人建议使用Apache + Tomcat可以提供更好的安全性和抵御攻击的保护。
请假定该进程将以非特权用户的身份在端口80上运行。我假设如果您在服务器前面运行防火墙,Tomcat应该会很好。但是,如果您只想使用Linux防火墙运行公开的web服务器,那么最好的选择是什么?
或者有人可以推荐另一个开源的web服务器。我试图保持解决方案尽可能轻,因为这些网络应用程序将在容器中运行。
所有的意见都受到欢迎和重视。
发布于 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变成代理地址,.)是我不喜欢的东西。
其他不错的选择包括:
发布于 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可能更容易。
发布于 2010-04-01 01:16:12
按照@deutsch的回答,Tomcat不必在UNIX上作为root运行。如果您从一个包(例如Fedora / CentOS / Red的CentOS RPM )安装它,它将以用户tomcat的身份以有限的权限运行。
尽管如此,我同意@Deutsch的最后一段;使用Apache作为Tomcat的前端,除非您在一个非常严格的最后期限内部署。即使您还不太熟悉它,在Tomcat前面使用mod_proxy进行基本部署也很容易,而且您几乎肯定会从增加的可读性和安全性中受益。
https://serverfault.com/questions/128112
复制相似问题