金子邦彦研究室プログラミングTomcat を用いた Java サーブレット・プログラミングApache Tomcat コネクタの設定

Apache Tomcat コネクタの設定

Apache Tomcat に内蔵の HTTP サーバではなく,Apache HTTP サーバApache Tomcat を連携させて動かします. そのためには,「コネクタ」と呼ばれるプログラムを使う. Apache Tomcat にはすでに主要ないくつかのコネクタが搭載済みです. Apache HTTP サーバ側には,コネクタの設定を行う必要がある。 コネクタにはいくつか種類がありますが、 最善だと判断される mod_proxy_ajp モジュールを使う。

お断り

Apache HTTP サーバのインストールについては、 XAMPPでインストールする方法や 単体でインストールする方法があります インストール法の説明は別の Webページに移しました.

jk, jk2 コネクタについての記述は、別の Webページ に移しました

XAMPP を使っている場合。 Tomcat 5.5 でなく、Tomcat 6 でよいという場合には、この Web ページの手順に従わず、XAMPP の Web ページで配布されている Tomcat アドオンを使うという方法もあります (Tomcat アドオンを使うと、Tomcat 6 が自動的にインストールされます。 Tomcat アドオンを使って Tomcat 5.5 をインストールするのは難しい)。

準備事項

Apache HTTP サーバのインストールが済んでいること. XAMPPでインストールする方法や 単体でインストールする方法があります.

Tomcat インストール が済んでいること.

Apache の httpd.conf ファイルの場所と,Tomcat インストールディレクトリを調べておくこと。この資料では,次のように書く.

Apache mod_proxy_ajp モジュールの設定

httpd.conf の設定

C:\Program Files\Apache Group\Apache Software Foundation\Apache2.2\confにあるhttpd.conf に次のような2行があるので書き換える. (XAMPP を使っている場合には,C:\xampp\apache\conf\httpd.conf と読み替えてください. )

【変更前】
# LoadModule proxy_module modules/mod_proxy.so
# LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
【変更後】
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

httpd.conf の末尾に、次の1行を書き加える。 これは、tomcat 関係の設定を 別のファイル(httpd-proxy.conf)に書きたいための設定。

Include conf/extra/httpd-proxy.conf

httpd-proxy.conf の作成

httpd.conf があるディレクトリに、extra というサブディレクトリが、すでにあるはず。 そこに(extra下に)、httpd-proxy.conf というファイルを作る。 ファイルの中身は次のようにする。

<Location /servlets-examples/>
    ProxyPass ajp://localhost:8009/servlets-examples/
</Location>

XAMPP を使っている場合の追加設定

XAMPP を使っている場合は,まだ,このままでは動かないようです. httpd.conf に次の設定を書き加えてください(tomcat インストールディレクトリを C:\tomcat55 としている).

Alias /servlets-examples "C:/tomcat55/webapps/servlets-examples"

<Directory "C:/tomcat55/webapps/servlets-examples">
    Options Indexes
    AllowOverride None
    Order Allow,Deny
    Allow from all
</Directory>

※ なぜ,私は tomcat プラグインを使っていないのか? (答) tomcat バージョン5(バージョン6でなく)を使いたいから. ※ なぜ,tomcat バージョン5なのか? (答) tomahawk を使いたいから.

server.xml の設定

C:\tomcat55\conf\server.xml 内にある AJP の設定と,Tomcat の設定を一致させる. そのために,

を見比べる.AJP の設定には,足りない属性があるので、足りない属性とその属性値を AJP の設定に補う.

※ つまり,port="8080" ... の属性値をコピーアンドペースト.

Tomcat での 8080 ポートの抑止

C:\tomcat55\conf\server.xml 内にある port="8080" についての記述をコメ ントにする。 これで、Tomcat と 8080 ポートで通信することはできなくなり、 Apache 経由での Tomcat との通信のみが許されることになる。

【変更前】
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
【変更後】
<!--
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
-->

テスト実行

Tomcat に付属のサンプルファイルを使ってテスト

  1. Tomcat の再起動:

    C:\tomcat55\bin\tomcat5w.exe を使用して、Tomcat を再起動する

  2. apache httpd の再起動:

    httpd.conf を書き換えたので、再起動が必要。

  3. 下記の URL を使い、servlets-examples のページを開く.

    「:8080」を付けていないので、Tomcat に直接アクセスするのでなく、Web サー バにアクセスしていることになる。

    http://localhost/servlets-examples

    下記のように表示されれば OK.

    [image]

(オプション) リクエストについての設定

今後、Tomcat の c:\tomcat55\webapps\WEB-INF\classes\ ディレクトリには、Java プログラムファイルが多数置かれることになる。 Web の http://ほにゃらら、という URL へのアクセスがあると、これらクラスの doGet メソッドが起動されるという仕組みになっている。 そのために、URL へのリクエストを、Tomcat 側のどこのディレクト リに飛ばすかを、個々の URL ごとに設定することになる。その設定 を行ってみる(なお、Tomcat 側のどこのディレクトリと、クラスとのマッピングは、 Tomcat の web.xml の設定。混同しないこと)。

ここでは、試しに、 http://localhost/hello に対するアクセスを、Tomcat 側の hello に飛ばすように設定してみます。

conf/extra/httpd-proxy.conf を次のように書く。 Order と Allow の行は、「127.0.0.1」からのアクセスだけを許すという設定です。

<Location /hello/>
    ProxyPass ajp://localhost:8009/hello/
    Order allow,deny
    Allow from 127.0.0.1
</Location>

上記の設定をテストするためには、 Tomcat のプログラム の Web ページに記載した HelloWorldExample.java プログラムを参考にして ください。

httpd.conf を書き換えたので、apahce httpd をリスタートすること。