失敗
Apache と Tomcat を AJP (Apache JServ Protocol) で連結させるには、次の設定が必要です。
- mod_proxy および mod_proxy_ajp モジュールをインストールする。
- ProxyPass ディレクティブを使い、Apache から Tomcat へ転送するリクエストの設定をする。
Ubuntu 版の Apache では、mod_proxy と mod_proxy_ajp モジュールは標準インストールされているため、1 の作業は必要ありません。 次に 2 の 転送設定ですが、Ubuntu 版の Apache は設定ファイルの構成がオリジナルとは大きく異なるため、どこに記述すべきか少々悩んでしまいました。
環境
このレポートは、以下の環境について記述したものです。
| OS | Ubuntu 9.10 |
| AP サーバ | Tomcat 6.0.20 |
| Web サーバ | Apache 2.2.12-1ubuntu2.1 |
原因
Ubuntu 版 Apache の設定ファイルは、/etc/apache2 ディレクトリ以下にあります。概要は次の通りです。
| パス | 区分 | 説明 |
|---|---|---|
| apache2.conf | ファイル | Apache 全体に適用される設定です。 |
| httpd.conf | ファイル |
Apache 全体に適用される設定です。 Ubuntu では空ファイルになっており、通常は使用しません。 |
| port.conf | ファイル | 待ち受けポートの設定です。 |
| magic | ファイル | MIME を定義します。 |
| envvars | ファイル | 環境変数を定義します。 |
| conf.d/ | ディレクトリ |
Apache 全体に適用される設定ファイルを配置します。 charset など。 |
| mods-available/ | ディレクトリ |
モジュール別の設定ファイル (○○.conf) と読み込みファイル (○○.load) を配置します。 alias.conf、alias.load など。 |
| mods-enabled/ | ディレクトリ |
使用するモジュール設定ファイルへのシンボリックリンクを配置します。 alias.conf (../sites-available/alias.conf へのリンク) 、alias.load (../sites-available/alias.load へのリンク) など。 |
| sites-available/ | ディレクトリ |
サイト別の設定ファイルを配置します。 default など。 |
| sites-enabled/ | ディレクトリ |
使用するサイト設定ファイルへのシンボリックリンクを配置します。 000-default (../sites-available/default へのリンク) など。 |
解決策
まず、mod_proxy_ajp モジュールの設定ファイルを /etc/apache2/mods-available ディレクトリに作成します。 次に、/etc/apache2/mods-enabled ディレクトリにシンボリックリンクを作成し、設定ファイルを有効化します。
(1) AJP 設定ファイルの作成
/etc/apache2/mods-available ディレクトリに、AJP の設定ファイルを作成します。
~# vi proxy_ajp.conf
ここでは、すべてのリクエストをローカルマシンの 8009 番ポートに転送する例を示します。
ProxyPass / ajp://localhost:8009/
(2) AJP 設定ファイルの有効化
mods-available ディレクトリに作成した設定ファイルは、そのままでは Apache に読み込まれません。 この設定ファイルを読み込ませるには、mods-enabled ディレクトリにシンボリックリンクを作成する必要があります。
~# ln -s ../mods-availables/proxy_ajp.conf proxy_ajp.conf
(3) Apache の再起動
Apache を再起動すると、作成した設定ファイルが読み込まれ、Apache と Tomcat が連携されます。
補足
上記の設定では、Tomcat Manager などへのリクエストも許可されてしまい、セキュリティ上、問題があります。 対策として <Location> ディレクティブで、アクセス制御をする例を示します。
■ Tomcat Manager へのアクセス制御
# すべてのリクエストをローカルマシンのポート 8009 に転送 ProxyPass / ajp://localhost:8009/ # 指定されたマシン (IP とサブネットマスクで指定) からのリクエストのみを許可 <Location /manager/*> Order deny,allow Deny from all Allow from 192.168.0.1/255.255.255.0 </Location>
関連レポート
参考サイト
- Apache HTTP SERVER PROJECT - Apache モジュール mod_proxy
- Apache HTTP SERVER PROJECT - Apache モジュール mod_proxy_ajp
