ITエンジニアの成長ブログ

ITエンジニアとして行う勉強の発信&日々の生活で体験した楽しいことをゆるく発信

Apache HTTPサーバーとTomcatを連携する

今回は、HTTPサーバーの一つであるApacheJavaサーブレットコンテナであるTomcatを連携したいと思います。HTTPサーバーのApacheでリクエストの受付を行い、そのリクエストをTomcatに転送するような構成です。私個人が今までの仕事で携わった仕事でよくこの構成を見ました。他にもたくさん記事にしている方も多いですので、まぁ定番構成なのかと思います。では、短いですがよければお読みください。

ちなみに、Apache HTTPサーバーとTomcatインストール手順は以前記事にしましたので必要に応じてお読みいただければと思います。
Apache HTTPサーバーをWindows Serverにインストールする - ITエンジニアの成長ブログ
TomcatをWindowsサービスとしてインストールする - ITエンジニアの成長ブログ

事前準備と想定環境

Apacheバージョンは2.4、Tomcatバージョン8.5、Amazon EC2 Windows Server 2019 DataCenterで試しています。
ApacheTomcatはすでにインストール済みということが前提となります。

また、Tomcatには以下のような簡単なWEBアプリケーションが配置されてます。パスは各自の環境ごとに読みかえていただければと思います。
TomcatのWEBアプリケーションの一つに”test”があり、それは"hello.html"という動作確認用のHTMLファイルのみ格納されています。
C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps\test\hello.html

<!DOCTYPE html>
<html>
<head>
<title>HELLO</title>
</head>
<body>
<h1>HELLO</h1>
</body>
</html>

Apacheの設定準備

それでは、まずはApacheから設定していきましょう。Apacheの設定は大きく以下の2つです。一つずつやっていきます。
Tomcatと連携するための拡張モジュールの読み込み設定を追加
Tomcatへ連携するURLパスを設定

Tomcatと連携するための拡張モジュールの読み込み設定を追加

Tomcatと連携するための拡張モジュール読み込みについてですが、設定ファイルを修正するだけでOKです。
Apacheのメイン設定ファイルである"httpd.conf"を修正します。
・修正するファイル(パスはそれぞれの環境ごとに読みかえていただければと思います)
C:\Apache24\conf\httpd.conf

以下の画面キャプチャの赤枠で囲った部分が今回設定変更が必要になる拡張モジュールです。ApacheTomcatを連携するためには、「proxy_ajp_module」というモジュールが必要になります。このモジュール自体が「proxy_module」のモジュールが必要になるので、どちらも読み込みするように設定変更が必要です。
現在は、どちらも行の先頭に”#"がありますので無効化(コメントアウトされており、設定が有効になっていない)されている状態です。設定を有効にするには、この先頭の"#"を外してあげればOKです。これで①の作業は完了です。

f:id:mr_star:20200929005706p:plain
Apache設定変更キャプチャ①
Tomcatへ連携するURLパスを設定

今度は、ApacheからTomcatへ連携するURLパスを設定します。要は、Apacheに来たブラウザなどによるリクエストでどのURLをTomcatに転送するかを設定するということです。それでは設定していきましょう。

こちらの設定も①と同様にApacheのメイン設定ファイルである"httpd.conf"を修正します。

設定ファイルのどこでも良いので、以下の設定を1行追加します。設定の意味は、Apacheにリクエストされた”/test”をTomcatの/testに転送する設定です。
ProxyPass /test ajp://localhost:8009/test

一つ目の引数が転送元のリクエスト、つまりApacheに来たリクエストですね。2つ目の引数がTomcatのWEBアプリケーションのURLパスを指定しています。なにやら見慣れない"ajp"という文言がありますが、これはApache JServ Protocolの略称でApacheTomcatと通信するためのプロトコルのことです。処理の流れとしては、以下のような感じでやり取りされます。

■処理概要
ブラウザ→(HTTP)→Apache→(AJP)→Tomcat

上記までの設定変更が完了したら、修正した設定ファイルを上書き保存し、Apacheの再起動を行って下さい。再起動をすることで、修正した設定が読み込まれます。

Tomcatの設定準備

Apacheの設定変更が完了しましたので、次はTomcatを設定します。Tomcatの設定変更は一つです。
先ほどApacheで設定変更した通り、AJPプロトコルでリクエストを受け付けれるようにすることです。修正するファイルはTomcatの設定ファイルである"server.xml"です。

・修正するファイル(パスはそれぞれの環境ごとに読みかえていただければと思います)
C:\Program Files\Apache Software Foundation\Tomcat 8.5\conf\server.xml

以下の通り、先ほど設定したポート番号である"8009"で検索するとAJPプロトコルでリクエストを受け付けするための設定の場所が見つかると思います。
私の環境では、デフォルトではコメントアウトされていました。

f:id:mr_star:20200929012020p:plain
Tomcat設定変更画面①

以下のようにコメントアウトを削除して、secretRequired属性を追加しましょう。

f:id:mr_star:20200929013418p:plain
Tomcat設定変更画面②
これでTomcatの設定変更は完了です。修正したファイルを上書き保存し、Tomcatの再起動をします。

動作確認

これまでの作業でApacheTomcatそれぞれ準備完了です。 それでは、ブラウザで以下のURLにアクセスしてみましょう。 http://localhost/test/hello.html 以下のような画面が表示されたら成功です!お疲れさまでした。
f:id:mr_star:20200929014628p:plain
動作確認画面キャプチャ①

おわりに

簡単にApacheTomcatを連携するところをやってみました。個人的には初めて設定したのですが、案外簡単でしたので驚きました。何も知らないときは、とにかく設定ファイルとかたくさん修正しなくちゃいけないのかなぁとか勝手に知らない也に想像していたのですが、単に連携だけを考えるととてもシンプルですよね。 今後は、ApacheTomcatの設定とかいろいろと触れていきたいと思います。同時接続数とかの設定などとか気になりますので、動作確認を交えながら実際に試して確認していたいなぁと漠然と考えています。しかし、Windowsのブログ記事とかないから手軽に確認するの大変だよなとか最近よく思います。 今回も最後までお読みいただきありがとうございました。それでは今回はこの辺で失礼します。