tomcat6 がポート 80 にバインドしないのはなぜですか?

tomcat6 がポート 80 にバインドしないのはなぜですか?

ポート80でTomcatを実行することの影響は承知していますが、迅速な解決策を探しています。私はこれに従おうとしていますチュートリアルチュートリアルに従って、2 つの変更を加えました。

  • tomcat6はtomcatが実行されるユーザー名です
  • tomcat conf ファイルの場所:/usr/share/tomcat6/bin/catalina.sh

しかし、まだ権限エラーが出ています。Java はポート 80 にバインドできないと言っています。他に何をすべきでしょうか? デバッグのために他にどのような情報を提供すべきでしょうか? 念のため確認しますが、ポート 80 で実行されているものは他にはありません

答え1

次のようにして、AUTOBIND プロパティを/etc/default/tomcat6「yes」に変更できます。

AUTHBIND=yes

Tomcat を再起動すると、使用可能な特権ポート (1 ~ 1023) を使用できるようになります。

答え2

実際に Tomcat の設定に触れることなくこれを行うには、2 つの方法があります。

ポート 80 からポート 8080 にトラフィックをリダイレクトする iptables スクリプトを作成できます (そうすれば、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のコネクタが127.1だけではなくすべてのインターフェース、つまり0.0.0.0にバインドされていることを確認してください。これが、次のようなURLで接続できない理由かもしれません。 http://10.0.0.2:80 しかし、 http://127.1:80

答え4

authbind を使用して tomcat サービスを開始します。これにより、ユーザーは 1024 未満のポートを開始できるようになり、リダイレクトや iptables は必要ありません。

apt-get install authbind -y

Authbindソフトウェアをインストールするには

chmod -R 755 /etc/authbind

グループはユーザー グループである必要があります。

chown -Rh ルート:グループ /etc/authbind

その後、以下のコマンドを実行します

/etc/authbind/byuid をコピーします

例えば、ユーザーIDが2000だとすると、ユーザーID番号を使用できます。

エコー '0.0.0.0/0:1,1023' > 2000

そのファイルはユーザーとグループが所有する必要があります。

チョーン:2000

chmod 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 サービスを開始できるはずです。

関連情報