今回は、HTTPサーバーの一つであるApacheとJavaサーブレットコンテナである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で試しています。
Apache、Tomcatはすでにインストール済みということが前提となります。
また、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
以下の画面キャプチャの赤枠で囲った部分が今回設定変更が必要になる拡張モジュールです。ApacheとTomcatを連携するためには、「proxy_ajp_module」というモジュールが必要になります。このモジュール自体が「proxy_module」のモジュールが必要になるので、どちらも読み込みするように設定変更が必要です。
現在は、どちらも行の先頭に”#"がありますので無効化(コメントアウトされており、設定が有効になっていない)されている状態です。設定を有効にするには、この先頭の"#"を外してあげればOKです。これで①の作業は完了です。
②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の略称でApacheがTomcatと通信するためのプロトコルのことです。処理の流れとしては、以下のような感じでやり取りされます。
■処理概要
ブラウザ→(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プロトコルでリクエストを受け付けするための設定の場所が見つかると思います。
私の環境では、デフォルトではコメントアウトされていました。
以下のようにコメントアウトを削除して、secretRequired属性を追加しましょう。
これでTomcatの設定変更は完了です。修正したファイルを上書き保存し、Tomcatの再起動をします。