概要
今回は、VirtualBoxの仮想マシン(CentOS8)にインストールしたApacheとTomcatを、AJPで連携させてみようと思います。仮想マシンが用意されていることが前提で、TomcatやApacheのインストールからの手順をまとめていきます。
環境
- VirtualBox 6.1.16
- ゲストOS(CentOS 8.2.2004)
- Java 1.8.0_272
- Apache Tomcat 9.0.39
- Apache 2.4.37
Tomcat
Java実行環境のインストール
TomcatはJava言語のアプリケーションなので、動作させるためにJavaの実行環境をインストールします。
# dnf install java-1.8.0-openjdk
Tomcatのインストール
実行環境が整ったので、さっそくTomcatをインストールしていきます。まずは/tmpに移動します。
# cd /tmp
/tmpは時間が経つと中身が消えるため、とりあえずファイルを置いておきたい時に最適なディレクトリです。
Tomcatはダウンロードサイトからリンクを入手し、wgetでダウンロードします。そのあと、tarコマンドが-Cで指定した/optにファイルを展開します。
# wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.39/bin/apache-tomcat-9.0.39.tar.gz
# ll
-rw-r--r-- 1 root root 819200 11月 6 21:02 apache-tomcat-9.0.39.tar.gz
# tar -zxvf apache-tomcat-9.0.39.tar.gz -C /opt
# cd /opt
# ll
drwxr-xr-x 9 root root 220 11月 6 21:22 apache-tomcat-9.0.39
ちなみに/optは、パッケージ管理以外でインストールしたアプリケーションソフトウェアを配置する場所としてFHSで定められています。
次は、Tomcatの実行ユーザを作っていくのですが、デフォルトシェルに/sbin/nologinを指定しています。なぜなら、このユーザはサービスの実行ユーザとしてしか使わないからです。
# useradd -s /sbin/nologin tomcat
tomcatというユーザを作成したので、実行ユーザとグループの所有権を変更します。
# chown -R tomcat:tomcat apache-tomcat-9.0.39
systemdのユニットファイル作成
Tomcatはパッケージ管理システムを使用せず、外部からダウンロードしてきたので、ユニットファイルが作成されていません。ユニットファイルが作成されていないと、systemctlを使った処理ができないため、自分で作成する必要があります。
# vi /etc/systemd/systemc/tomcat.service
[Unit]
Description=Apache Tomcat 9
After=network.target
[Service]
User=tomcat
Group=tomcat
Type=oneshot
PIDFile=/opt/apache-tomcat-9.0.36/tomcat.pid
RemainAfterExit=true
ExecStart=/opt/apache-tomcat-9.0.36/bin/startup.sh
ExecStop=/opt/apache-tomcat-9.0.36/bin/shutdown.sh
ExecReStart=/opt/apache-tomcat-9.0.36/bin/shutdown.sh;/opt/apache-tomcat-9.0.36/bin/startup.sh
[Install]
WantedBy=multi-user.target
10.6. SYSTEMD のユニットファイルの作成および変更を参考にし、この設定ファイルで登場するセクションとオプションの説明をまとめます。
セクション | オプション | 説明 |
Unit | Description | ユニットの説明 |
After | 指定したユニットのアクティブ後にアクティブ | |
Service | User | 実行ユーザ |
Group | 実行グループ | |
Type | サービス起動の種類を指定 | |
PIDFILE | PIDファイルへのパス | |
RemainAfterExit | サービスのプロセスが全て終了してもアクティブ | |
ExecStart | ユニット開始時に実行するコマンド | |
ExecStop | ユニット停止時に実行するコマンド | |
ExecReStart | ユニット再起動時に実行するコマンド | |
Install | WantedBy | 依存関係を表す |
正直このドキュメント読んでもよくわからず、、。以下の記事がとても参考になりました。
完成したら、他の多くのサービスと同様にパーミッションを755に設定します。
# ll /etc/systemd/system/tomcat.service
-rw-r--r-- 1 root root 406 11月 6 21:35 tomcat.service
# chmod 755 /etc/systemd/system/tomcat.service
# ll /etc/systemd/system/tomcat.service
-rwxr-xr-x 1 root root 406 11月 6 21:35 /etc/systemd/system/tomcat.service
あとはユニットファイルを認識させ、自動起動の設定をしておしまいです。
# systemctl daemon-reload
# systemctl list-unit-files | grep tomcat
tomcat.service disabled
# systemctl enable tomcat
server.xmlの設定変更
まずは変更する前に一応バックアップを取っておきます。
# cd apache-tomcat-9.0.39/conf
# ll
-rw------- 1 tomcat tomcat 12873 10月 6 23:17 catalina.policy
-rw------- 1 tomcat tomcat 7262 10月 6 23:17 catalina.properties
-rw------- 1 tomcat tomcat 1400 10月 6 23:17 context.xml
-rw------- 1 tomcat tomcat 1149 10月 6 23:17 jaspic-providers.xml
-rw------- 1 tomcat tomcat 2313 10月 6 23:17 jaspic-providers.xsd
-rw------- 1 tomcat tomcat 4144 10月 6 23:17 logging.properties
-rw------- 1 tomcat tomcat 7588 10月 6 23:17 server.xml
-rw------- 1 tomcat tomcat 2164 10月 6 23:17 tomcat-users.xml
-rw------- 1 tomcat tomcat 2558 10月 6 23:17 tomcat-users.xsd
-rw------- 1 tomcat tomcat 172359 10月 6 23:17 web.xml
# cp -p server.xml server.xml.`date +%Y%m%d`
# ll
-rw------- 1 tomcat tomcat 12873 10月 6 23:17 catalina.policy
-rw------- 1 tomcat tomcat 7262 10月 6 23:17 catalina.properties
-rw------- 1 tomcat tomcat 1400 10月 6 23:17 context.xml
-rw------- 1 tomcat tomcat 1149 10月 6 23:17 jaspic-providers.xml
-rw------- 1 tomcat tomcat 2313 10月 6 23:17 jaspic-providers.xsd
-rw------- 1 tomcat tomcat 4144 10月 6 23:17 logging.properties
-rw------- 1 tomcat tomcat 7588 10月 6 23:17 server.xml
-rw------- 1 tomcat tomcat 7588 10月 6 23:17 server.xml.20201106
-rw------- 1 tomcat tomcat 2164 10月 6 23:17 tomcat-users.xml
-rw------- 1 tomcat tomcat 2558 10月 6 23:17 tomcat-users.xsd
-rw------- 1 tomcat tomcat 172359 10月 6 23:17 web.xml
では以下のように編集していきます。diffコマンドで表示した通り、コメントアウトを外して有効にし、address=”::1″の部分を削除しています。secretRequiredの行を追記していることにも注意です。
# vi server.xml
--------(省略)----------
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector protocol="AJP/1.3"
port="8009"
secretRequired="false"
redirectPort="8443" />
# diff server.xml server.xml.20201106
115a116
> <!--
116a118
> address="::1"
118d119
< secretRequired="false"
119a121
> -->
なぜここを有効にしたかというと、今回ApacheとTomcatはAJP(Apache JServ Protocol)というプロトコルを用いて通信を行い、その際8009番ポートを使用するからです。
動作確認
Tomcatは8080番ポートで簡易的なWebサーバを動作させているので、これで動作確認をしてみます。
まずは、一時的にファイアーウォールの8080番ポートを開放し、tomcatを起動させます。
# firewall-cmd --add-port=8080/tcp
# systemctl start tomcat

URLに<IPアドレス>:8080と入力して、このような画面が表示されれば問題ないです。
最後にリロードして、一時的に開放した8080番ポートを塞ぎます。
# firewall-cmd --reload
# systemctl restart tomcat
Apache
さくっとインストールして、ファイアウォールの設定をします。
# dnf install httpd
# firewall-cmd --add-service=http --zone=public --permanent
success
# firewall-cmd --add-service=https --zone=public --permanent
success
# firewall-cmd --reload
success
# systemctl enable httpd --now
URLにIPアドレスを打ち込み、テストページが表示されれば問題なしです。

ApacheとTomcatの連携
ではここから連携のための設定変更を行っていきます。
Apacheモジュールの確認
ApacheとTomcatが連携するためには、以下の二つのモジュールが必要です。
mod_proxy.so | Apacheのプロキシの仕組みを提供 |
mod_proxy_ajp.so | AJPによるApacheとTomcatの接続を提供 |
この二つはデフォルトでApacheに提供されているものなので、一応ロードされているか確認します。
# less /etc/httpd/conf.modules.d/00-proxy.conf
LoadModule proxy_module modules/mod_proxy.so
--------(省略)---------
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
--------(省略)---------
リバースプロキシの設定
ここでは、URLの中に特定の文字列があれば、それをTomcatに転送する仕組みを設定します。
以下の設定では、http://IPアドレス/tomtom9/ にアクセスすると、8009番ポートの/に転送されるようにしています。
# vi /etc/httpd/conf.d/tomcat.conf
ProxyPass /tomtom9 ajp://localhost:8009/
Tomcatの設定
動作確認の前に、Tomcatの8080番ポートは使わないので、コメントアウトして無効化します。そのあとApacheとTomcatを再起動させます。
# vi server.xml
<!-- <Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" /> -->
# systemctl restart httpd tomcat
動作確認
では、両者が連携しているかどうか確認していきます。
http://IPアドレス/tomtom9/にアクセスすると、

このようにTomcatの管理画面(8009番ポートの/)を表示することができました。
最後に閉鎖した8080番ポートにアクセスできないことを確認してみます。

無事確認できたので、これにてApacheとTomcatの連携の設定は終了です。
Comments