- Category -

HOME > 失敗レポート > JBoss > JBoss 4.0 - Apache 2.2 の連携

JBoss 4.0 - Apache 2.2 の連携

作成日時:2007/02/03  更新日時:2007/02/03

失敗

Apache 2.0 から Apache 2.2 への移行に伴い、JBoss との連携方法を AJP モジュール (Apache モジュール mod_proxy_ajp) を使用したものに変更しました。

AJP モジュールを使用した方法では、JK2 のコンパイルや worker2.properties を作成する手間がなくなります。 加えて、設定も httpd.conf (もしくはモジュール別のサブ設定ファイル) に書き込めるようになります。

Syntax error
図1 Syntax error

「ずいぶん便利になったんだなぁ」とちょっぴり感動しながら、Apache を起動すると Syntax error が発生。あれれ?

環境

このレポートは、以下の環境について記述したものです。

OS openSUSE 10.2
AP サーバ JBoss Application Server 4.0.5 GA
Web サーバ Apache HTTP Server 2.2.4

原因

原因は非常に単純なものでした。 Apache の configure 時に、肝心の AJP モジュールと Proxy モジュール (AJP モジュールを使用するには、Proxy モジュールが必要) を指定し忘れていたのです。

つまり、AJP モジュールと Proxy モジュールを有効にせず、AJP プロトコルの転送設定だけを記述していたことになります。 Syntax error は当然ですね。

私のような失敗をする人/した人 (いるのでしょうか? いれば、ちょっと安心。) のため、何より自分への戒めのため、解決策を記述しておきます。

解決策

AJP モジュールと Proxy モジュールを有効にして、Apache をコンパイル&インストールします。 その後、httpd.conf に設定を記述します。

(1) Apache のコンパイル&インストール

まず、Apache のソールファイル (httpd-2.2.4.tar.gz) を解凍します。

tar zxvf httpd-2.2.4.tar.gz

解凍後、コンパイルします。
configure の引数に --enable-proxy と --enable-proxy-ajp を指定し、AJP モジュールと Proxy モジュールを有効にします。
【注意】
--enable-proxy を --enable-proxy-ajp より前に入力してください。 順序が逆ですと、エラーになります。

cd httpd-2.2.4
./configure --enable-proxy --enable-proxy-ajp
make

インストールします。

make install

(2) httpd-proxy.conf の作成

Apache 2.2 では、モジュールごとに設定ファイルを分割することが推奨されています。 本稿では、Proxy モジュール用の設定ファイルとして httpd-proxy.conf (任意の名前に変更可能) を作成します。

[httpd-proxy.conf] 新規作成
# すべてのリクエストをローカルマシンのポート 8009 に転送
<Location />
  ProxyPass ajp://localhost:8009/
</Location>

【注意】
設定ファイルを分割せず、直接 httpd.conf に記述することもできます。

(3) httpd-proxy.conf を conf/extra ディレクトリにコピー

作成した httpd-proxy.conf を ${APACHE_HOME}/conf/extra ディレクトリに配置します。

cp httpd-proxy.conf /usr/local/apache2/conf/extra

(4) httpd.conf の修正

(2)、(3) で用意した httpd-proxy.conf を組み込むように httpd.conf を修正します。

[httpd.conf] 以下を追加
# httpd-proxy.conf を組み込む
Include conf/extra/httpd-proxy.conf

以上の設定で、JBoss と Apache を連携させることができます。
ブラウザの URL に http://サーバ名/ と指定し、リクエストが JBoss に転送されていることを確認してください。
http://localhost/
図2 動作確認

補足

上記の設定では、Web コンソールや JMX コンソールなどへのリクエストも許可されてしまい、セキュリティ上、問題があります。 対策として <Location> ディレクティブで、これらの画面に対するアクセス制御をする例を示します。

■ Web コンソールへのアクセス制御

[httpd-proxy.conf] Web コンソールへのアクセス制御
# ローカルマシンからのリクエストのみを許可
<Location /web-console/*>
  Order deny,allow
  Deny from all
  Allow from localhost
</Location>

■ JMX コンソールへのアクセス制御

[httpd-proxy.conf] JMX コンソールへのアクセス制御
# 指定されたマシン (IP とサブネットマスクで指定) からのリクエストのみを許可
<Location /jmx-console/*>
  Order deny,allow
  Deny from all
  Allow from 192.168.0.1/255.255.255.0
</Location>

関連レポート

参考サイト