IIS 10.0 + Tomcat 8.5 連携(mod_jk,tomcat-connectors)

ARRでIISとTomcatを連携してみました。
Application Request Routingで連携

もうひとつ、古くからあるtomcat-connectorsを使用する方法を試してみます。

環境は
・Windows Server 2016(IIS 10.0)
・Tomcat 8.5
です。


tomcat-connectorsの入手



ISAPIフィルターであるtomcat-connectorsを入手します。
http://archive.apache.org/dist/tomcat/tomcat-connectors/

ダウンロードリンクがわかりにくいですが、/jk/binaries/windows/と進みます。
http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/windows/

813_01.png

「tomcat-connectors-1.2.42-windows-x86_64-iis.zip」をダウンロードし、解凍すると
「isapi_redirect.dll」が入手できます。




ISAPIフィルターの設定



isapi_redirect.dllを適当なフォルダーにコピーします。
今回は「C:\inetpub\connector」というフォルダーを作成してdllをコピーしました。

813_02.png




isapi_redirect.properties



dllをコピーしたフォルダに「isapi_redirect.properties」ファイルを作成します。
このファイルは、他の設定ファイルのパスを記載するなど、大本の設定ファイルとなります。

ISAPI redirector for Micrsoft IIS HowTo
こちらではレジストリに値を登録する例が記載されていますが、
レジストリを使用しない場合はこちらの設定ファイルを作成すれば良いようです。
設定値も参考になります。


ファイルの内容は以下の通り。


extension_uri=/jakarta/isapi_redirect.dll
log_file=C:\share\isapi_redirect.log
log_level=debug
worker_file=C:\inetpub\connector\workers.properties
worker_mount_file=C:\inetpub\connector\uriworkermap.properties
uri_select=unparsed




・extension_uri

転送先のuri(任意値)
http://localhost/[任意の値]/isapi_redirect.dllというURLで解決できるパスを記載します。
今回は「/jakarta/isapi_redirect.dll」としました。
後の手順で「jakarta」という仮想ディレクトリを作成し、isapi_redirect.dllへアクセスできるよう構成します。

・log_file

ログの出力パス


・log_level

ログの出力レベル。
debug, info, errorなどが指定できます。
debugだとフルダンプのログが出力されるので、うまく動いてくれない時の原因調査時に役立ちます。
実運用する場合は、info以上が良いかと思います。


・worker_file,worker_mount_file

各々の設定ファイルへのパスを記載します。



その他、詳細な内容は以下が参考になります。
Configuring the ISAPI redirector for Microsoft IIS





workers.properties



isapi_redirect.propertiesで指定したパスに「workers.properties」を作成します。
このファイルにはリクエスト転送先の情報を記載します。

内容は以下の通り。


ps=\
worker.list=tomcat
worker.tomcat.port=8009
worker.tomcat.host=192.168.1.4
worker.tomcat.type=ajp13




※192.168.1.4はTomcatを動かすサーバーのIPです。

・ps

パスセパレーター(だと思う)


・worker.list

これから定義していくworkerの名称をカンマ区切りで指定します。(任意)
ここで指定した文字列をキーに、以降の設定を記載していきます。

・port,host,type

転送先のポート、ホスト、転送タイプを指定します。
ポートは8080ではなく、8009を指定します。
ここでajp13という転送専用のリスナーが待ち受けています。
後ほど、Tomcatでの設定を確認します。


その他、詳細な内容は以下が参考になります。
workers.properties configuration


他の項目と合わせる必要があるのか悩みましたが、worker.listに指定する名前は任意です。
こういうイメージです。


worker.list=[hoge]
worker.[hoge].port=8009
worker.[hoge].host=localhost
worker.[hoge].type=ajp13




転送先が複数ある場合


worker.list=[hoge],[piyo]

worker.[hoge].port=8009
worker.[hoge].host=localhost
worker.[hoge].type=ajp13

worker.[piyo].port=8009
worker.[piyo].host=192.168.1.4
worker.[piyo].type=ajp13



worker.listで指定した名称は次に記載する設定ファイルで使用します。





uriworkermap.properties



isapi_redirect.propertiesで指定したパスに「uriworkermap.properties」を作成します。
このファイルにはリクエスト転送先の情報を記載します。

内容は以下の通り。


/sample/*=tomcat




http://iisserver/sampleのリクエストをtomcatに転送するしていです。
ここで指定している「tomcat」はworkers.propertiesで命名したworkerの名称となります。

もちろん複数のURLを記載したり、拡張子による分岐も可能です。


/sample/*=tomcat
/sample2/*=tomcat
/sample3/*.do=tomcat




その他、詳細な内容は以下が参考になります。
uriworkermap.properties configuration



ここまでで「C:\inetpub\connector」は以下のようになるはずです。

813_03.png





IISの設定



ここからはIISマネージャー画面での設定作業になります。

やることは以下の4つ。
・サーバーホームから「ISAPIおよびCGIの制限」の追加
・「Default Web Site」で「ISAPIフィルターを」の追加
・dllを保存したフォルダへ仮想ディレクトリの作成
・仮想ディレクトリでハンドラーマッピングの追加



まず、サーバーホームから「ISAPIおよびCGIの制限」を選択。

813_04.png


右側の[操作] - [追加]をクリック。
ISAPIまたはCGIのパスにコピーしたisapi_redirect.dllへのパスを指定します。
説明は任意の文字列を入力。

813_05.png


追加できました。

813_06.png



続いて「Default Web Site」を選び、「ISAPIフィルターを」選択します。

813_07.png


右側の[追加]をクリック。
フィルター名は任意に入力し、実行可能ファイルに再びisapi_redirect.dllへのパスを指定します。

813_08.png


追加できました。

813_09.png


続いて仮想ディレクトリを追加します。

813_10.png


ポイントは「エイリアス」です。
isapi_redirect.propertiesのextension_uriで指定した名称と一致させます。
今回は「/jakarta/isapi_redirect.dll」と指定したので、エイリアスを「jakarta」としました。

物理パスはdllをコピーしたフォルダを指定します。

813_11.png


仮想フォルダ「jakarta」が追加できました。

813_12.png

作成した仮想フォルダのハンドラーマッピングを表示します。

813_13.png


右側の[スクリプトマップの追加]をクリック。
要求パス:*
実行可能ファイル:isapi_redirect.dllへのパス
名称:任意
を入力します。

813_14.png


追加時、スクリプトマップ追加の確認ダイアログが表示されます。
「はい」を選択してISAPI拡張を有効にします。

813_15.png


ここまで設定が終わったらIISを再起動します。

813_16.png




server.xml



デフォルトでajp13は有効となっているはずですが、念の為確認します。
%TOMCAT%/conf/server.xmlを開きます。

8009ポートでajp13を待ち受ける設定が有効であることが確認できました。

813_17.png





動作確認



Tomcatに直接アクセスしてみます。
http://192.168.1.4:8080/sample/SampleServlet
このURLでこんな表示。

813_18.png


IISでのリダイレクトをテストします。
http://192.168.1.102/sample/SampleServlet

813_19.png

狙い通りの動作です。






HTTP エラー 403.18 - Forbidden



ほとんど発生することはないと思いますが、403.18エラーが発生してうまく動いてくれないことがありました。

813_20.png


HTTP エラー 403.18 - Forbidden

Web サーバー上のこのリソースに対して構成されたアプリケーション プールで、指定された要求を処理することができません。

可能性のある原因:
・ISAPI フィルターまたはカスタム モジュールは、元の URL 以外のアプリケーション プールで実行するように URL を変更しました。
・ISAPI 拡張 (またはカスタム モジュール) は、元の URL ではないアプリケーション プールで実行するように
ExecuteURL (または ExecuteRequest) を使用しました。
・あるアプリケーション プール内にあるカスタム エラー ページを、別のアプリケーション プール内の Web サイトが参照しています。
URL を処理するとき、IIS によって、ページが存在するアプリケーション プールで処理するように決定されます。
ページを参照する Web サイトのあるアプリケーション プールでは処理されません。
・Web サイトには複数のアプリケーションが構成されています。この要求を実行するように構成されたアプリケーションは、
存在しないアプリケーション プールで実行するように設定されています。




今回の場合、仮想ディレクトリ「jakarta」と、リダイレクトするか監視しているURL「sample」の
アプリケーションプールが異なることが原因でした。

813_21.png


アプリケーションプールをまたいで処理は行えないようです。
同じアプリケーションプールに変更すると狙い通りの動作になりました。

813_22.png




【参考URL】

ISAPI redirector for Micrsoft IIS HowTo
IIS + Tomcat
IS7.5 tomcat7 連携
IISとTomcatの連携



関連記事

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
https://symfo.web.fc2.com/

PR

検索フォーム

月別アーカイブ