備忘録 Apache2.4.6 - Tomcat 8.5.11　を連携してみた

初めてApacheとTomcatとの連携にチャレンジしてみた！

【環境】
OS: Cent OS 7.2
Apache : 2.4.6　　※ portは11080を指定しています
Tomcat : 8.5.11

事前に、 firewall-cmdを用いて、11080やApacheのポート8080は解放しています


## サンプルアプリの確認
１．サンプルアプリをダウンロード
　　とりえずサンプルアプリを動かしてみたいので、以下のURLからダウンロード。
　　※sample.warファイル
　　
　　http://tomcat.apache.org/tomcat-8.5-doc/appdev/sample/

　　![2017032901.JPG](https://qiita-image-store.s3.amazonaws.com/0/170871/bc9bafc3-efa2-b1d8-6bab-85215cbc1849.jpeg)

２．サンプルアプリケーションをサーバー上に配置
　　Tomcatのインストールディレクトリ内にある webappディレクトリに配置。
　　今回は、/usr/local/apache-tomcat-8.5.11/webappsディレクトリ

３．ファイルのオーナーを変更
　　この環境はtomcatユーザーで起動するため、配置したファイルをtomcatユーザーに変更。


```ruby:
$ 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
```
　
４．ファイルを展開
　　jarコマンドで、サンプルアプリを展開する。

```ruby:
$ 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
```

５．Webブラウザでの確認
　　Webブラウザより http://IPアドレス:8080/sample/　へアクセスする。
　　以下のような画面が表示される。

![2017032902.JPG](https://qiita-image-store.s3.amazonaws.com/0/170871/ec470bf2-947a-9ad9-ff3d-b7d82384c94a.jpeg)

## Tomcat上での設定（確認）
apacheとtomcatを連携するためには、ajpモジュールが必要となる。
Tomcatのインストールディレクトリ内にある confディレクトリにあるserver.xmlで以下の記述があることを確認する。
※ 今回は、/usr/local/apache-tomcat-8.5.11/conf/server.xmlファイルの確認

```ruby:server.xml
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
```

## Apache上の設定
１．LoadModuleの設定
　 apacheとtomcatを連携するために、LpadModuleの設定が必要となる。
　 以前は httpd.confに記述されていたが、 今回のバージョンでは、httpd.confファイルにへ記述されていない。
　　/etc/httpd/conf.modules.dディレクトリに、モジュールをロードするためのconfファイルが存在するため、必要に応じて記述を行う。

　　今回、必要となる記述は以下の2つとなる。　

```ruby:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
```

　　これらの記述は、00-proxy.confファイルにすでに記述されているため、今回は追記の必要はない。

```ruby:
# 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
```

２．extraディレクトリの作成
　　/usr/httpd/confディレクトリ内に、extraディレクトリを作成する。

```ruby:
# pwd
/etc/httpd/conf
# mkdir extra
# ls
extra  httpd.conf  httpd.conf.20170322  httpd.conf.rpmsave  magic
```

３．httpd-proxy.confファイルの作成
　　extraディレクトリ内に、httpd-proxy.confファイルを作成する。
　　このファイルに、ajpの設定内容を記述する。

```ruby:
ProxyPass /sample/ ajp://192.168.56.106:8009/sample/
```
　　これによりApacheへきたリクエストが ajpモジュールが、8009ポートで、Tomcat上のsampleアプリを呼び出す。
　　また、このポートはTomcatのserver.xmlファイルでajp連携の設定を確認したときのポートっ番号である。

４．httpd.confファイルの編集
　　先ほど作成したファイルをApacheが読み込むために、httpd.confファイルの末尾に、以下の内容を追記する。

```ruby:
Include /etc/httpd/conf/extra/httpd-proxy.conf
```

５．Apacheを再起動
　　Apacheの設定変更を反映するため、再起動する。

```ruby:
$ sudo systemctl restart httpd
```

## Webブラウザでアクセス
Apache経由で、サンプルアプリへ接続する。

http://IPアドレス:11080/sample/

Apache経由でアクセスできた！

![2017032903.JPG](https://qiita-image-store.s3.amazonaws.com/0/170871/eafece18-3e0a-ce90-ecec-2334d7d8418b.jpeg)

よかった、よかった。