Apach2.2 を使って Windowsでも Tomcatを80番ポートから利用する
Tomcatを Windowsで動かしている時、大抵は URLに :8080 とつけて 8080番ポートから利用されていると思うが、普通このシチュエーションは開発用や社内のちょっとしたツールとしての利用であって、いっぽうプロダクション環境は Linuxや Sun で Apache - mod_jk - Tomcat という構成で 80番ポートを使って公開・運用されるのが一般的だろう。
が、Windows上の Tomcatをプロダクション環境として使いたい時もある。普段そのホストを管理するスタッフが Windowsの操作しか出来ない場合がそうだ。コンシューマ向けの公開サービスを運用するならそのようなシチュエーションは稀だと思うが、イントラネットの場合はむしろ非Windowsのコンピュータを操作出来るスタッフが居るケースの方が珍しかろう。とりわけ中小企業では。
そういったケースではそもそも Javaではなく IIS+ASP.NETを用いるのが妥当という考えもないではないが、それでも Javaで開発するほうが都合の良い場合もある。というか、そういうのは開発リソースやライセンス、ミドルウェア要件など案件個別の問題なので詳しく議論する価値なし。よって以下略。
というわけでいつものように能書きが長くなったが、ここでは Apache+Tomcatという普通の組み合わせを、だが Windows用にセットアップする(学校でUNIXを習わなかったのにうっかり Java開発の道へ入ってしまった文系エンジニアの諸兄には悪いものではなかろう)ための方法をメモしておく。なお Tomcatは既に稼働しており、8009番ポートでAJPを待ち受けている(デフォルトではそのようになっている)状態を想定している。
私は、公式のミラーから apache_2.2.6-win32-x86-no_ssl.msi をダウンロードしてただダブルクリックで開き、ハイハイと答えて Apache 2.2.6のインストールを完了した。デフォルトでは、80番ポートを待ち受けるように設定された Apacheが自動起動のサービスとしてインストールされる。Apacheのインストールだけなら、ここまでであっけなく終了。
さて、Apache 2.2には mod_proxy_ajpが含まれているため、Tomcatと AJPで接続するためにモジュールを調達してくる必要がない。Apache 2.2用に mod_jkをセットアップしようとして悩んでいる人をよく見かけるが、(mod_jkに特有の込み入った機能を使いたいのでなければ)これは全くの徒労である。
(そしてこの状況は、標準でコンパイラを搭載していない Windows環境にとって都合が良い)
Apache2.2は何も考えずにインストールすると C:\Program Files\Apache Software Foundation\Apache2.2 に展開される。デフォルトだと、Tomcatとの連携に必要なふたつのモジュール mod_proxy, mod_proxy_ajpはロードされないようになっているため、Apacheのメイン設定ファイル conf\httpd.conf で下記の行をコメントインすることによってモジュールを有効にする。
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
モジュールを有効にしたら、Tomcatへのリクエスト転送を設定する。これは(特にこだわりがないのなら)httpd.confの末尾にでも書けば良い。下記は、Tomcatに標準搭載の managerアプリケーションと、自分でしこしこ作ってデプロイした mywebappアプリケーションに対して処理を転送する例。
ProxyPass /manager ajp://localhost/manager
ProxyPass /mywebapp ajp://localhost/mywebapp
ajp:// ... の所には、Tomcatが別のホストで動作している場合はlocalhostの代わりにそのホスト名又はIPアドレスを、8009番以外のポートでAJPの待ち受けをしているのであればホスト名の後にコロンで区切ってポート番号を記述すること。
httpd.confを書き換えたら Apacheを再起動して設定を反映させる。Apacheの再起動はタスクバーに出ているApacheアイコンをいじると出てくる画面でやるか、「管理ツール」→「サービス」あたりから通常のサービスと同様の手順で行う。
これで URLに :8080 と書かなくても利用できる Webアプリケーションを Windowsでサービスさせることが出来るようになった。
Linuxで同じ事をするよりも遙かに簡単で、マニュアル化もしやすいのではないだろうか。
学校でUNIXをやってない(しつこいな、そのくだり)技術スタッフを現地に遣ってセットアップしてもらうのにはもってこいだ。
viの操作方法を他人に説明するのほどつまらん仕事は他にあまりない。
ついでに、Tomcat単独では出来なかった(出来るのかもしれないが、やり方を調べる価値を見いだせなかった)細かいログ採取やアクセス制御も Apache側の設定で出来るだろう。
■おまけ■
LoadModule deflate_module modules/mod_deflate.so
をコメントインし、
AddOutputFilterByType DEFLATE text/html text/plain text/xml
を httpd.confの末尾に追加することで ApacheがHTTPレスポンスを圧縮してくれるようになる。
企業のイントラなんかで、地方の支店がADSL回線につながっているケースだと支店側のWebアプリケーションへアクセスするのが速くなるかもね。(ADSLは上り方向の帯域が狭いため)
#支店に何故わざわざサーバを置くのかって?じゃあ本社との通信が途絶えたら業務が完全ストップするような支店でいいのか?
#納得いかないなら、「本社が地方にある場合」とかに適当に読み替えろや。
が、Windows上の Tomcatをプロダクション環境として使いたい時もある。普段そのホストを管理するスタッフが Windowsの操作しか出来ない場合がそうだ。コンシューマ向けの公開サービスを運用するならそのようなシチュエーションは稀だと思うが、イントラネットの場合はむしろ非Windowsのコンピュータを操作出来るスタッフが居るケースの方が珍しかろう。とりわけ中小企業では。
そういったケースではそもそも Javaではなく IIS+ASP.NETを用いるのが妥当という考えもないではないが、それでも Javaで開発するほうが都合の良い場合もある。というか、そういうのは開発リソースやライセンス、ミドルウェア要件など案件個別の問題なので詳しく議論する価値なし。よって以下略。
というわけでいつものように能書きが長くなったが、ここでは Apache+Tomcatという普通の組み合わせを、だが Windows用にセットアップする(学校でUNIXを習わなかったのにうっかり Java開発の道へ入ってしまった文系エンジニアの諸兄には悪いものではなかろう)ための方法をメモしておく。なお Tomcatは既に稼働しており、8009番ポートでAJPを待ち受けている(デフォルトではそのようになっている)状態を想定している。
私は、公式のミラーから apache_2.2.6-win32-x86-no_ssl.msi をダウンロードしてただダブルクリックで開き、ハイハイと答えて Apache 2.2.6のインストールを完了した。デフォルトでは、80番ポートを待ち受けるように設定された Apacheが自動起動のサービスとしてインストールされる。Apacheのインストールだけなら、ここまでであっけなく終了。
さて、Apache 2.2には mod_proxy_ajpが含まれているため、Tomcatと AJPで接続するためにモジュールを調達してくる必要がない。Apache 2.2用に mod_jkをセットアップしようとして悩んでいる人をよく見かけるが、(mod_jkに特有の込み入った機能を使いたいのでなければ)これは全くの徒労である。
(そしてこの状況は、標準でコンパイラを搭載していない Windows環境にとって都合が良い)
Apache2.2は何も考えずにインストールすると C:\Program Files\Apache Software Foundation\Apache2.2 に展開される。デフォルトだと、Tomcatとの連携に必要なふたつのモジュール mod_proxy, mod_proxy_ajpはロードされないようになっているため、Apacheのメイン設定ファイル conf\httpd.conf で下記の行をコメントインすることによってモジュールを有効にする。
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
モジュールを有効にしたら、Tomcatへのリクエスト転送を設定する。これは(特にこだわりがないのなら)httpd.confの末尾にでも書けば良い。下記は、Tomcatに標準搭載の managerアプリケーションと、自分でしこしこ作ってデプロイした mywebappアプリケーションに対して処理を転送する例。
ProxyPass /manager ajp://localhost/manager
ProxyPass /mywebapp ajp://localhost/mywebapp
ajp:// ... の所には、Tomcatが別のホストで動作している場合はlocalhostの代わりにそのホスト名又はIPアドレスを、8009番以外のポートでAJPの待ち受けをしているのであればホスト名の後にコロンで区切ってポート番号を記述すること。
httpd.confを書き換えたら Apacheを再起動して設定を反映させる。Apacheの再起動はタスクバーに出ているApacheアイコンをいじると出てくる画面でやるか、「管理ツール」→「サービス」あたりから通常のサービスと同様の手順で行う。
これで URLに :8080 と書かなくても利用できる Webアプリケーションを Windowsでサービスさせることが出来るようになった。
Linuxで同じ事をするよりも遙かに簡単で、マニュアル化もしやすいのではないだろうか。
学校でUNIXをやってない(しつこいな、そのくだり)技術スタッフを現地に遣ってセットアップしてもらうのにはもってこいだ。
viの操作方法を他人に説明するのほどつまらん仕事は他にあまりない。
ついでに、Tomcat単独では出来なかった(出来るのかもしれないが、やり方を調べる価値を見いだせなかった)細かいログ採取やアクセス制御も Apache側の設定で出来るだろう。
■おまけ■
LoadModule deflate_module modules/mod_deflate.so
をコメントインし、
AddOutputFilterByType DEFLATE text/html text/plain text/xml
を httpd.confの末尾に追加することで ApacheがHTTPレスポンスを圧縮してくれるようになる。
企業のイントラなんかで、地方の支店がADSL回線につながっているケースだと支店側のWebアプリケーションへアクセスするのが速くなるかもね。(ADSLは上り方向の帯域が狭いため)
#支店に何故わざわざサーバを置くのかって?じゃあ本社との通信が途絶えたら業務が完全ストップするような支店でいいのか?
#納得いかないなら、「本社が地方にある場合」とかに適当に読み替えろや。

0 件のコメント:
コメントを投稿
<< ホーム