在亚马逊的EC2中,Linux无法使用80端口来运行Tomcat。

12

首先,我想确认一下在EC2控制台中是否没有设置安全组。因为我可以设置Apache,它默认使用80端口,并且可以通过80端口访问Apache网站。 但是对于Tomcat,如果我使用8080端口(默认),或者某些大于1023(我认为是这个端口)的值,它可以正常工作。但是,当我更改server.xml文件(将8080更改为80)时,如果我使用80端口,它无法工作。我成功启动了服务,但没有80 / http监听。我知道这应该是某些权限问题(只有root用户才能启动低于1023的端口服务),但我不知道该如何操作。


3个回答

30

对于这个问题,我的个人选择是使用iptables将所有从端口80发出的流量重定向到Tomcat运行的上游端口(例如8080)。

/sbin/iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT
/sbin/iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

这是正确的答案。它只是将流量重定向到端口80到8080,而不对出站流量施加限制。一些像这样的iptables脚本由于安全问题会阻止http流出,但在当今时代更新服务器变得非常困难。 - chubbsondubs
该《云中的猫》("Cat in the Cloud")文章描述了几个建议,并且截至2012年,它们似乎更喜欢使用 iptables - amos

2
以前我用的方法是使用Apache2作为代理,利用虚拟主机将请求代理到Tomcat上。这样处理请求后,如果你未来决定使用多个Tomcat进行负载均衡,也可以将其用作负载均衡器。

1

在Linux上配置Tomcat在特权端口上运行的常见方法是使用authbind

以下是在Ubuntu 16.04上设置Tomcat 7的步骤。

首先确保已安装authbind:

sudo apt-get install authbind

编辑/etc/default/tomcat7并取消注释此行:

AUTHBIND=yes

创建端口80的绑定权限文件:
sudo touch /etc/authbind/byport/80
sudo chmod 500 /etc/authbind/byport/80
sudo chown tomcat7 /etc/authbind/byport/80

如果您也在使用https,请按照上述步骤对端口443执行相同操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接