為什麼tomcat6不綁定80埠?

為什麼tomcat6不綁定80埠?

我知道在連接埠 80 上運行 tomcat 的影響,但我需要一個快速的解決方案。我正在嘗試遵循這個教學。我按照教程進行了兩處更改:

  • tomcat6 是使用者名稱 tomcat 運行為
  • tomcatconf檔案位置:/usr/share/tomcat6/bin/catalina.sh

但我仍然收到權限錯誤。 Java 說它無法綁定到連接埠 80。我還應該提供哪些其他資訊供人們調試?只是為了確認,在連接埠 80 上沒有其他任何東西在運行

答案1

您可以將 AUTOBIND 屬性變更/etc/default/tomcat6為“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 反向代理,透過它​​實際代理到 Tomcat 伺服器的連線(這很好,因為它實際上可以快取請求並為您加速連線)

答案3

在 Tomcat HTTP 連接器中,請確保連接埠 80 上的連接器綁定到所有介面或 0.0.0.0 ,而不僅僅是 127.1 。這可能可以解釋為什麼您無法連接諸如 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

群組應該是用戶群組。

chown -Rh root:群組 /etc/authbind

之後運行以下命令

cd /etc/authbind/byuid

例如,假設使用者 ID 為 2000,您可以使用您的使用者 ID 號

回顯'0.0.0.0/0:1,1023'> 2000

該文件應該由使用者和群組擁有。

週:2000

修改 700 2000

在 tomcat 啟動檔案 $CATALINA_BASE/startup.sh 中新增以下行

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

使用Authbind服務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 服務。

相關內容