初めてApacheとTomcatとの連携にチャレンジしてみた!
【環境】
OS: Cent OS 7.2
Apache : 2.4.6 ※ portは11080を指定しています
Tomcat : 8.5.11
事前に、 firewall-cmdを用いて、11080やApacheのポート8080は解放しています
サンプルアプリの確認
1.サンプルアプリをダウンロード
とりえずサンプルアプリを動かしてみたいので、以下のURLからダウンロード。
※sample.warファイル
http://tomcat.apache.org/tomcat-8.5-doc/appdev/sample/
2.サンプルアプリケーションをサーバー上に配置
Tomcatのインストールディレクトリ内にある webappディレクトリに配置。
今回は、/usr/local/apache-tomcat-8.5.11/webappsディレクトリ
3.ファイルのオーナーを変更
この環境はtomcatユーザーで起動するため、配置したファイルをtomcatユーザーに変更。
$ sudo chown tomcat.tomcat sample.war
$ ls
ROOT docs examples host-manager manager sample sample.war
$ ls -l
合計 16
drwxr-x---. 3 tomcat tomcat 4096 3月 23 20:39 ROOT
drwxr-x---. 14 tomcat tomcat 4096 3月 23 20:39 docs
drwxr-x---. 6 tomcat tomcat 78 3月 23 20:39 examples
drwxr-x---. 5 tomcat tomcat 82 3月 23 20:39 host-manager
drwxr-x---. 5 tomcat tomcat 97 3月 23 20:39 manager
drwxr-x---. 5 tomcat tomcat 81 3月 29 10:08 sample
-rw-r--r--. 1 tomcat tomcat 4606 3月 29 10:02 sample.war
4.ファイルを展開
jarコマンドで、サンプルアプリを展開する。
$ jar -xvf sample.war
META-INF/が作成されました
META-INF/MANIFEST.MFが展開されました
WEB-INF/が作成されました
WEB-INF/classes/が作成されました
WEB-INF/classes/mypackage/が作成されました
WEB-INF/lib/が作成されました
images/が作成されました
WEB-INF/classes/mypackage/Hello.classが展開されました
WEB-INF/web.xmlが展開されました
hello.jspが展開されました
images/tomcat.gifが展開されました
index.htmlが展開されました
$ ls
META-INF ROOT WEB-INF docs examples hello.jsp host-manager images index.html manager sample sample.war
5.Webブラウザでの確認
Webブラウザより http://IPアドレス:8080/sample/ へアクセスする。
以下のような画面が表示される。
Tomcat上での設定(確認)
apacheとtomcatを連携するためには、ajpモジュールが必要となる。
Tomcatのインストールディレクトリ内にある confディレクトリにあるserver.xmlで以下の記述があることを確認する。
※ 今回は、/usr/local/apache-tomcat-8.5.11/conf/server.xmlファイルの確認
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
Apache上の設定
1.LoadModuleの設定
apacheとtomcatを連携するために、LpadModuleの設定が必要となる。
以前は httpd.confに記述されていたが、 今回のバージョンでは、httpd.confファイルにへ記述されていない。
/etc/httpd/conf.modules.dディレクトリに、モジュールをロードするためのconfファイルが存在するため、必要に応じて記述を行う。
今回、必要となる記述は以下の2つとなる。
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
これらの記述は、00-proxy.confファイルにすでに記述されているため、今回は追記の必要はない。
# grep proxy *conf
00-proxy.conf:# This file configures all the proxy modules:
00-proxy.conf:LoadModule proxy_module modules/mod_proxy.so
00-proxy.conf:LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
2.extraディレクトリの作成
/usr/httpd/confディレクトリ内に、extraディレクトリを作成する。
# pwd
/etc/httpd/conf
# mkdir extra
# ls
extra httpd.conf httpd.conf.20170322 httpd.conf.rpmsave magic
3.httpd-proxy.confファイルの作成
extraディレクトリ内に、httpd-proxy.confファイルを作成する。
このファイルに、ajpの設定内容を記述する。
ProxyPass /sample/ ajp://192.168.56.106:8009/sample/
これによりApacheへきたリクエストが ajpモジュールが、8009ポートで、Tomcat上のsampleアプリを呼び出す。
また、このポートはTomcatのserver.xmlファイルでajp連携の設定を確認したときのポートっ番号である。
4.httpd.confファイルの編集
先ほど作成したファイルをApacheが読み込むために、httpd.confファイルの末尾に、以下の内容を追記する。
Include /etc/httpd/conf/extra/httpd-proxy.conf
5.Apacheを再起動
Apacheの設定変更を反映するため、再起動する。
$ sudo systemctl restart httpd
Webブラウザでアクセス
Apache経由で、サンプルアプリへ接続する。
Apache経由でアクセスできた!
よかった、よかった。