为什么tomcat6无法绑定80端口?

为什么tomcat6无法绑定80端口?

我知道在端口 80 上运行 tomcat 会产生什么影响,但我需要一个快速解决方案。我正在尝试遵循此教程。我按照教程做了两处更改:

  • tomcat6 是 tomcat 运行的用户名
  • tomcat conf文件的位置:/usr/share/tomcat6/bin/catalina.sh

但我仍然收到权限错误。Java 说它无法绑定到端口 80。我还应该做什么?我还应该提供哪些信息供人们调试?只是为了确认,端口 80 上没有其他程序在运行

答案1

/etc/default/tomcat6您可以按如下方式将 AUTOBIND 属性更改为“yes”:

AUTHBIND=yes

重新启动 tomcat,这样你就可以使用可用的特权端口 (1-1023)。

答案2

有两种不同的方法可以做到这一点,而无需实际触及 tomcat 配置。

您可以制作一个 iptables 脚本,将流量从端口 80 重定向到端口 8080(这样您就不需要摆弄 tomcat 设置了)

对于 iptables

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j REDIRECT --to-port 80 就可以了!(编写一个脚本,让它在 uppstart 上自动完成)

或者您可以创建一个 Apache 反向代理,实际上通过它代理与您的 tomcatserver 的连接(这很好,因为它实际上可以缓存请求并加快您的连接速度)

答案3

在 Tomcat HTTP 连接器中,确保端口 80 上的连接器绑定到所有接口或 0.0.0.0 ,而不仅仅是 127.1 。这也许可以解释为什么你无法使用如下 URL 进行连接 http://10.0.0.2:80 但你可以 http://127.1:80

答案4

使用 authbind 启动 tomcat 服务,这将允许用户启动小于 1024 的端口,我们不需要重定向或 iptables。

apt-get 安装 authbind -y

安装 Authbind 软件

chmod -R 755 /etc/authbind

group 应该是用户组。

chown -Rh root:组/etc/authbind

之后运行以下命令

cd /etc/authbind/byuid

举个例子,假设用户 ID 是 2000,您可以使用您的用户 ID 号

回显‘0.0.0.0/0:1,1023’> 2000

该文件应归用户和组所有。

chown :2000

修改权限 700 2000

在 tomcat 启动文件 $CATALINA_BASE/startup.sh 中添加以下行

export JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true"

使用 Authbind service startup.sh 启动 tomcat

评论以下行

#$CATALINA_HOME/bin/startup.sh

添加 This End 作为文件结尾

AUTHBIND_COMMAND="/usr/bin/authbind --deep /bin/bash -c " 

$AUTHBIND_COMMAND $CATALINA_HOME/bin/startup.sh   

现在您应该能够以少于 1024 个端口的用户身份启动 tomcat 服务。

相关内容