Tomcatサーバに80番ポートでアクセスする。

Tomcatを普通にインストールすると、8080番ポートで待機します。でも、外部に公開することを考えると、80番ポートでリクエストできるようにしたいです。

そのための手順のメモです。

server.xmlのポートを80に変更

server.xmlにポートの設定があります。

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

この8080を80に変更してTomcatを再起動します。

<Connector port="80" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

すると、80番ポートでアクセスできるかと思いきや、できませんでした。

8080番はもちろんOKで、9080番でもOKです。でも、80番ポートはLISTENしてくれません。

80番ポートで待機させるためには、プロセスをルート権限で実行する必要があります。ここではTomcatをルート権限で実行する必要があります。

しかし、今回はTomcatを専用のユーザーで実行したいと思っているので、そのままでは80ポートで待機させることができませんでした。

参考書籍

こちらの本にその対処法が複数書いてあったので、そのひとつを試しました。


Tomcatハンドブック 第2版

iptablesでポートフォワーディング

これの解決策の一つとしては、80ポートでリクエストされたものを、8080ポートで待機しているTomcatに、ルーティングすれば良いです。

リバースプロキシなどを置くのであれば、そこでポート変換をすれば良いと思います。そのままTomcatにポートフォワーディングするなら、たとえばiptablesを使って実現することができます。

sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

これで、80ポートへのリクエストを、8080ポートで待機しているTomcatに流しこむことができます。

proxyPortの設定

こうするとTomcat自体は8080番ポートで待機させた状態で、クライアントからは80番ポートで接続できます。しかしながら、Tomcatは自分自身が8080番ポートでアクセスさせれていると認識しているので、互いに咬み合わない場合が生じます。

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           proxyPort="80" />

そこで、「Tomcat自身は8080番ポートで待機しているものの、リクエストは80番ポートを通しておこないますよ」ということを設定します。具体的には、設定ファイルのConnector要素にproxyPort属性を追加します。

これでTomcatをルート権限で実行せずに、80番ポートでアクセスできるようになりました。

About katty0324

Leave a Reply

Scroll To Top