目次

はじめに

2003.06.17時点のApache2はまだまだ実績が少ないため、 Apache1.3.2xとTomcat 4.1.xの連携を基本とする。

連携方法一覧

  1. mod_jkを使用する(AJP12)
  2. mod_jkを使用する(AJP13)
  3. mod_jk2を使用する(AJP13)
  4. Apacheのmod_proxyを使用する

で、

もっとも手軽なのはmod_proxyだが、mod_proxyはあくまでおまけ程度のものであり、 本来の用途とは少し異なると(私は)思うので却下。

恐らく一番実績があるのはmod_jk(AJP12)だと思うが、設計が古くパフォーマンスが悪い。 個人的にTomcat4.0.xまではmod_jk(AJP13)を使用していたが、設定が邪魔臭い。

mod_jk2はApache2の(多分)推奨コネクタだが、Apache1.3.xでも使用できる。 特徴は設定が簡単。というか正式なリファレンスが見当たらないためわからない。

でも私の環境では WindowsXP + Apache 1.3.24 + mod_ssl + OpenSSL + mod_jk2(AJP13) + Tomcat 4.1.24 という組み合わせで動いてる。

したがって、

実運用ではmod_jk(AJP13)が主流だと思う。 開発環境は実環境とほぼ同じ状態で設定が簡単なほうが良いためmod_jk2を一押しとする。

mod_jk2の設定など

教えるのはもったいない。

mod_jk(ajp13)で連携してみる

しかしまぁ、そんな事言っても結局mod_jkの設定をすることもあるので覚書する。
おおまかな設定の流れは

  1. Apacheのhttpd.conf に mod_jk.conf のパスを指定してインクルードする。
  2. mod_jk.conf にて mod_jk.dll のパスを指定する。
  3. mod_jk.conf にて workers.properties のパスを指定する。
  4. workers.properties にてコネクタの定義とそのコネクタの使用するポートを設定する。
  5. mod_jk.conf に /hoge というリクエストがあった場合、X:/Apache Group/Tomcat 4.1/webapps/hoge に行く見たいな設定をする。
  6. ↑のときに許可するリクエストのパスの種類も設定する。
  7. ↑のときに使用するコネクタの種類*1も設定する。
  • つまるところ、Apache の httpd.conf に mod_jk.conf をインクルードするわけですから逆に httpd.conf に全部設定書いても動くと思いますが、ややこしくなってしまうのでやめましょう。

Apache httpd.conf

  • mod_jk.confインクルードする。
    # Apache Tomcat 連携
    Include "X:/Apache Group/conf/mod_jk.conf"

    こんな感じで mod_jk.conf のパスを指定します。

    もちろん設定したパスに mod_jk.conf を設置してください。

mod_jk.conf

mod_jk.conf に各種設定を書いていきます。

  • mod_jk.dll のパス
    #
    # The following line instructs Apache to load the jk module
    #
    #LoadModule jk_module modules/mod_jk.dll
    LoadModule jk_module "X:/Apache Group/conf/mod_jk.dll"

    もちろん設定したパスに mod_jk.dll を設置してください。

    コメントアウトしてる"modules/mod_jk.dll"の場合、%APACHE_HOME%/modules/ になります。

    • workers.properties のパス
      JkWorkersFile "X:/Apache Group/conf/workers.properties"

      もちろん設定したパスに workers.properties を設置してください。

      workers.properties の設定は次項にて

workers.properties

ほったらかしです・・・・

ディレクトリのindexを見せなくする

設定はそれぞれのディレクトリを見せなくするを参照。

  1. Apache
  2. Tomcat

連携している場合に発生する問題点

mod_jk でApache-Tomcat連携している場合

  • mod_jk.conf で alias を切っている場合、Apacheの設定でTomcatのディレクトリindexが表示されることがある。*2
  • Apacheの設定としてディレクトリのindexを表示しないようにする。
    • この設定方法だと、Apacheとしてディレクトリを表示しないことになるのでエラーメッセージの統一ができる。
  • mod_jk.conf で すべてのRequestがTOMCATにマウントされているとApacheでのディレクトリインデックスの隠蔽は無駄である。

mod_jk2 でApache-Tomcat連携している場合

  • 知らない。

Apache-Tomcat連携で日本語ファイルのDownload時の文字化けをやっつける

  • Apache-Tomcat連携で日本語ファイルをDownloadするとDownloadダイアログのファイル名が文字化けする。

なぜかというと

  1. tomcatで通常responseヘッダーに格納する文字コードは「ISO-8859-1」
  2. 連携時、Tomcat-JK2.jarに含まれるモジュールでのresponseヘッダーの文字コードの扱いは「UTF-8」になってるらしい。

    なので化ける*4

    • これに関しては設定などがないので*5ソースを改修して自力でTomcat-JK2.jarを作るしかない。

cvs.apache.org からソースを取得する

  • 設定などはここを見ろ!
  • このリポジトリから「jakarta-tomcat-connectors」プロジェクトをcheck out
cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic login
password: anoncvs
cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic checkout [module-name]

※コマンドラインでの check out は↑の通り

  • このリポジトリから check out する際、目的の Tomcat のバージョンを指定する。
    • 今回はTomcat4.1.24。タグは「TOMCAT_4_1_24」。

tomcat-jk2.jar をbuildする。

  • 作業環境はWindows2Kpro
  • まず、Defaultの状態でbuildできないと話にならないので・・・

    buildしてみる。

    • ・・・で出来ないと思う。
    • Windowsの環境変数に依存していると思われるjarへのクラスパスを通す。*6
    • Build関連のファイルに依存していると思われるjarへのパスがあったらフルパスで通す。*7
      • このときTOMCATのjarなどにパスを通すことになるが、当然そのtomcatはバージョンを合わせる。
  • buildが出来るようになったらソースの修正に入る。*8

org.apache.jk.server.JkCoyoteHandler?#appendHead() を修正する

  • org.apache.jk.server.JkCoyoteHandler?#appendHead() の 281行目辺りに「UTF8」とべた書きされている部分がある。*9
    c2b=new C2BConverter(  "UTF8" );

    「ISO-8859-1」で扱うように修正する。*10

    // c2b=new C2BConverter(  "UTF8" );
    c2b=new C2BConverter(  "ISO-8859-1" );
  • で、build。

修正した Tomcat-jk2.jar を配置する

  • 修正した Tomcat-jk2.jar を %CATALINA_HOME%/server/lib のものと置き換える。*11
  • これで Apache-Tomcat連携で日本語ファイルのダウンロード時、ダイアログの表示で日本語が使えます。
    Tomcat4.1.24用



その他の情報

  • 通常のURLでディレクトリでは英文字の大文字小文字を判断しませんが、aliasに関しては大文字小文字が判断されるみたいです。 -- 連携したら必ずひっかかるね? 2003-10-15 (水) 13:33:34

リンク集


*1 この場合ajp13を使うわけですが・・・
*2 Apacheにて全体を見せないように設定していても、aliasはその場の設定が有効となるため
*3 /servlet/* といったRequestが問題だ・・・なくなる方向であるとは思いますが・・・
*4 Tomcatだけだったら「ISO8859-1」で扱えば日本語を扱える
*5 ソース中に「("UTF-8")」ってべた書きしてあるっぽい
*6 ちなみに私は「servlet.jar catalina.jar tomcat-util.jar commons-modeler.jar mx4j-jmx.jar jakarta-regexp-1.2.jar commons-logging.jar」これだけ通した。
*7 元がLinux用になってるが気にせずWindowsのパスを通す
*8 結構強引にbuildできます。ただし、BUILD SUCCESSFULになっても一部失敗しているときがあるので、もとのTomcat-jk2.jarとファイルサイズを見比べる
*9 「UTF-8」ではなく「UTF8」となっていた為、ここを見つけるのに苦労した・・・RFC的に「UTF8」はオッケーなのだろうか?「UTF-8」が正しかったように記憶しているが・・・
*10 この C2BConverter(String str)はクラスを何個か経由して最終的に java.io.OutputStreamWriter?(OutputStream? out, Charset cs)に書き込んでた・・・ややこしい・・・
*11 Defaultはリネームするなどしておいておきましょう。

添付ファイル: fileworkers.properties 618件 [詳細] filemod_jk.dll 286件 [詳細] filemod_jk.conf 549件 [詳細] filetomcat-jk2.jar 301件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-04-07 (金) 16:01:32 (105d)