概要
TomcatをラズパイのApache2と連携させ、外部に公開、アクセスできるようにする。
はじめに
この記事は、Raspberry Piの初期設定、ドメインの取得、Apache2の導入、ポート開放等が済んでいる前提の記事です。
お済みでない方は、先にそちらの設定を行うことを推奨します。
使用環境
- Raspbian 10.7
- Apache 2.4.38
- Tomcat 9.0.31
環境構築
まずパッケージの更新をしておきます。
$ sudo apt update
$ sudp apt upgrade
パッケージの更新が終わったらTomcatのインストールを行います。
執筆時点(2021/01/15)ではtomcat9
が最新のようです。
$ sudo apt install tomcat9
インストールが完了したら正常に動作しているか確認します。
$ curl localhost:8080
Apache Tomcatの情報がかえってこれば成功です。
tomcat9
はインストールした時点で起動時に自動的に開始するようになっています。
各種設定
Apache2の設定
この記事では、AJPプロトコルを使ってApacheとTomcatを連携させていきます。
似たような方法にmod_jk
を用いた連携方法もありますが、余計なパッケージをインストールしたくないのでここでは説明しません。
Apache + mod_jk + 各種アプリケーションサーバの設定方法
まず、AJPを利用するためのモジュールを有効にします。
$ sudo a2enmod proxy proxy_ajp
/etc/apache2/mods-enabled
ディレクトリを確認してモジュールが有効になっているか確かめます。
/etc/apache2/mods-enabled
ディレクトリの中に、proxy.conf
, proxy.load
, proxy_ajp.load
の3つがあれば成功です。
次に、リバースプロキシの設定を行います。
root権限で/etc/apache2/sites-available
ディレクトリに設定用のtomcat_ajp.conf
を作成します。
<VirtualHost *:80>
# サーバーの名前
ServerName example.com
# サーバー管理者のメールアドレス
ServerAdmin hogehoge@example.com
# リバースプロキシの設定
<Location />
ProxyPass ajp://localhost:8009/
ProxyPassReverse ajp://localhost:8009/
</Location>
</VirtualHost>
設定ファイルが作成出来たら設定を有効にします。
$ sudo a2ensite tomcat_ajp
同じドメインでほかにもサイトを公開している場合、ロケーションにアプリケーション名を設定するか別のドメイン・サブドメインを使って設定を分けるといいと思います。
ここでは、テストのためにほかの設定ファイルは読み込まれていないものとします。
設定を反映させるためにApacheを再起動します。
$ sudo service apache2 restart
Tomcat9の設定
Tomcatの設定ファイルがあるディレクトリは、/etc/tomcat9/
, /var/lib/tomcat9/conf/
の2つがありますが、優先されるのは/etc/tomcat9/
に含まれる方のようなので、そちらを編集します。
上手くいかない場合は、/var/lib/tomcat9/conf/
の方を変更してみてください。
/etc/tomcat9/server.xml
を編集していきます。
まず、直接Tomcatにアクセスができなくするため、デフォルトの8080ポートの部分をコメントアウトします。
<!--
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-->
次に8009ポートの部分を編集します。コメントアウトが付いている場合は外してください。
AJPコネクタが信頼できないサイトと接続できないようにするためにsecretRequired
オプションを追記します。
<Connecter protocol="AJP/1.3"
address="::1"
port="8009"
secretRequired="false"
redirectPort="8443" />
設定を反映させるためにTomcatを再起動します。
$ sudo service tomcat9 restart
ポート8080が閉じているか確認します。
$ curl localhost:8080
接続が拒否されれば成功です。
動作確認
まず、ラズパイ上のブラウザで設定したサーバー名にアクセスします。
Tomcatのルートページが表示されれば成功です。
別の端末のブラウザでも表示されるか確かめます。
アクセスがうまくいかない場合はポート開放、ファイアウォールの設定などを見直してみてください。
お疲れ様でした。