Agusa Lab. > Webware Project > GrapeWeb
 

Tomcat Configuration

Tomcat の Web アプリケーション標準構成と共有ファイルの配置場所

Tomcat の Web アプリケーション標準構成
Tomcat の標準の Web アプリケーション構成は下図のようになっています。
Tomcat の標準構成
  • index.jsp, sample.js, style.css など:
    Web アプリケーションのビューを構成するファイルは Web アプリケーションディレクトリの直下に 配置します。ユーザからの HTTP リクエストはこれらのファイルに対して行われることになります。
  • WEB-INF/web.xml:
    Web アプリケーション配置記述ファイル。個々の Web アプリケーションに関する設定などを記述する。
  • WEB-INF/classes/ 以下:
    Web アプリケーションで利用する Java クラスファイル群。 パッケージなどを利用している場合はパッケージの階層構造に従う必要がある。
  • WEB-INF/lib/以下:
    Web アプリケーションで利用する jar ファイル群。
Tomcat 共有ファイルの配置場所
WEB-INF/lib は個々の Web アプリケーションが利用するライブラリファイルを配置する場所ですが、 アプリケーションサーバ (Tomcat) のライブラリファイルを配置する場所も存在します。
  • $TOMCAT_HOME/common/lib/以下:
    Web アプリケーションおよび Tomcat の内部コードが利用する jar ファイルの配置場所。 JDBC コネクタなどはこの場所に配置するとよい (Tomcat も JDBCRealm などで利用するため)。
  • $TOMCAT_HOME/shared/lib/以下:
    Web アプリケーションのみが利用する jar ファイルの配置場所。

server.xml について

Tomcat の設定は $TOMCAT_HOME(Tomcat をインストールしたディレクトリ)/conf/server.xml で行ないます。 server.xml では、Tomcat で利用するポート番号の指定やデータベースの設定など、 Web アプリケーションサーバとしてのホストの設定を記述します。
server.xml で設定するのは主に以下の要素です。(いくつかの要素に関してはもう少し詳しく説明します。)

  • ホスト
    Tomcat のホストに関する設定。直観的には Apache HTTP サーバの VirtualHost の設定と似ている。
  • リソース:
    Tomcat が利用するデータベースなどのリソースに関する設定。
  • コンテキスト
    個々の Web アプリケーションに関する設定

Host タグ

Host タグはアプリケーションサーバのホスト設定を記述します。 Host タグで利用する主要な属性は以下の通りです。

Host タグの属性
属性名 説明
name(必須) ホストの名前。DNS に登録されているサーバ名を記述する。 Host は Engine タグの子要素として記述されねばならず、Engine タグ内の Host 要素のうち、 必ず1つは Host の属性 name と Engine タグの属性 defaultHost が同じでなければならない。
appBase(必須) Web アプリケーションの標準配置場所となるディレクトリへのパスを記述する。 属性 autoDeploy が true の場合は、appBase 直下に War ファイルまたは展開済み Warフォルダを コピーすることで、Tomcat を再起動することなく Web アプリケーションが配備される。
autoDeploy autoDeploy="true" が Host の属性として指定されている場合、 Tomcat はサーバ実行中に appBase 以下にコピーされた Web アプリケーションを自動的に配備する。 デフォルト値は "true" である。
deployOnStartup deployOnStartup="true" が Host の属性として指定されている場合、 Tomcat 起動時に appBase 以下に存在する Web アプリケーションが自動的に配備される。 デフォルト値は "true" である。
debug ログに吐き出すデバッグ情報の詳細度レベル。
0 (fatal messages only), 1 (errors), 2 (warnings), 3 (information), and 4 (debug)の種類がある。 デフォルトは "0" 。
unpackWARs unpackWARs="true" が Host の属性として指定されている場合、 appBase ディレクトリ以下に配備された war ファイルがアプリケーション配備時に自動で展開される。

Context タグ

Context タグは個々の Web アプリケーションに関する設定を記述します。 Context タグで利用する主な属性は以下の通りです。

Context タグの属性
属性名 説明
path(必須) Web アプリケーションのコンテキストパス。
<Host の name> + <Context の path> がWeb アプリケーションの URL となる。 コンテキストパスは "/スラッシュ()" から記述しなければならない。
:Warning!
$appBase/dir1/dir2/dir3 などの入れ子になったパスにある Web アプリケーションの Context を記述する際には、必ず <Context path="/dir1/dir2/dir3" …> のようにパスを記述すること。 <Context path="/dir1" …> でも http://host:8080/dir1/dir2/dir3 によって dir3 の Web アプリケーションにアクセスすることは可能だが、 dir3/WEB-INF/web.xml に記述される URI マッピングが上手く動作しない。 ( web.xml には /WEB-INF/web.xml を基準としてパスを記述するが、 Tomcat は Context パスとして記述されたパスを利用してマッピングを実行するため )
docBase(必須) Web アプリケーションのソースがあるディレクトリ(WEB-INF ディレクトリの親ディレクトリ)へのパスを記述する。 絶対パス、相対パスのどちらも利用可能である。 相対パスの場合、 appBase ディレクトリからの相対パスとなることに注意。
reloadable reloadable="true" を設定することで、/WEB-INF/classes/ と /WEB-INF/lib/ 以下の変更を Tomcat が監視するようになり、 Web アプリケーションの再配備をしなくても classes と lib の変更を反映できる。 Jakarta のドキュメントによれば、監視機構が備わるために Tomcat のオーバーヘッドが増加するため アプリケーションサーバ運用時には推奨されないとある。 しかし、Tomcat Manager などのツールを利用しなくても classes と lib の変更が反映されるため、 開発時には有効な属性である。
debug ログに吐き出すデバッグ情報の詳細度レベル。
0 (fatal messages only), 1 (errors), 2 (warnings), 3 (information), and 4 (debug)の種類がある。 デフォルトは "0" 。

ちょっと便利な Context の記述法

Web アプリケーションへのアクセスを制限したい場合
Web アプリケーションへのアクセスを IP アドレスやドメインによって制限したい場合には、 Valve (バルブ) を使って次のように記述します。
        IP アドレスで制限する場合:
        <Context path="/path" docBase="webapp" >
       < Valve className="org.apache.catalina.valves.RemoteAddrValve"
            allow="127.0.0.1" > 
        </Context>
      

上記のように記述することで、127.0.0.1 (localhost)からのアクセスのみ受け付けるようになる。 特定の IP を拒否したい場合は deny を用いる。

        ホスト名で制限する場合:
        <Context path="/path" docBase="webapp" >
         < Valve className="org.apache.catalina.valves.RemoteHostValve"
            allow=".domain.com" > 
        </Context>
      

上記のように記述することで、ホスト名に ".domain.com" を含むホストからのアクセスのみを受け付けるようになる。 特定のホストを拒否したい場合は deny を用いる。

どちらも allow, deny の属性には正規表現を用いることができる。 プライベートネットワークの全てのマシンからのみ、アクセスを受け付ける場合は以下のように記述する。

        <Context path="/path" docBase="webapp" >
         < Valve className="org.apache.catalina.valves.RemoteAddrValve">
            allow="127.0.0.1" > 
        </Context>
      
Web アプリケーション毎にログを分ける
Host が利用するログと個々の Web アプリケーションのログを区別したい場合には、 Logger を用いることで Web アプリケーション毎のログを作成できます。
      <Context path="/path" docBase="webapp" >
       <Logger className="org.apache.catalina.catalina.Logger.FileLogger"
          prefix="my_log" suffix=".log" timestamp="true"
          verbosity="0" directory="logs/myapp">
      </Context>
    

上記の記述をすることで、以下のようなログファイルを作成できます。

  1. ファイルの接頭辞が"my_log"
  2. ファイルの接尾辞が".log"
  3. ファイル名に"年-月-日"が存在
  4. ログレベルが "0"(debug="0" と同じレベル)
  5. ログファイルは $TOMCAT_HOME/logs/myapp 以下に保存

by Nobuyuki Kaneko