連載
» 2007年11月20日 00時00分 公開

Tomcatはどこまで“安全”にできるのか?(2):Tomcatをツールで運用し、設定の基礎を知る (2/3)

[x-lab チーム,株式会社アメニクス]

server.xmlを書いてTomcatを設定してみよう

 それでは、実際に紹介したタグを設定してserver.xmlを書いていきましょう。

コンテキスト全体に関する属性を設定する<Server>タグ

 server.xmlを書いていくに当たり、まずはこれらの中でトップレベルに来る要素の<Server>を書く必要があります。<Serverタグ>では、このコンテキスト全体に関する属性を設定できます。

要素 内容
className 実装するJavaのクラス名。org.apache.catalina.Serverインターフェイスの実装が必要。指定しなければ、標準実装が設定される
port shutdownコマンドを待ち受けるポート番号
shutdown shutdownコマンドを実行する文字列。TCP/IP経由でshutdownポートからこの文字列を受け取ると、Tomcatは停止

 さて、それではTomcatが8005番ポートで「SHUTDOWN」という文字列を受け取るとシャットダウンするように設定します。これらの属性を持ったServerタグは以下のような記述になります。

<Server port="8005" shutdown="SHUTDOWN" >
</Server>

 これで、このTomcatは8005番ポートでシャットダウンコマンドを受け付けるようになります。

Severに必ず1つ以上設定する<Service>タグ

 次に、<Server>タグの中で必ず1つは設定しないといけない<Service>タグを設定します。<Service>タグでは、以下のような属性の設定を行えます。

要素 内容
className 実装するJavaのクラス名。org.apache.catalina.Serviceインターフェイスの実装が必要。指定しなければ、標準実装が設定される
name このサービスの名前を設定。ログなどの表示に利用される。<Serve>rごとに<Service>の名前は一意でなければいけない

 先ほどの<Server>タグに追加して「Catalina」という名前のサービス(Service)グループを設定してみましょう。

<Server port="8005" shutdown="SHUTDOWN" >
  <Service name="Catalina" >
  </Service>
</Server>

 これで、このサーバの中に「Catalina」というサービスグループができました。それでは、サービスを詳しく設定していきましょう。

リクエスト処理を行うための<Connector>タグ

 まずは、リクエスト処理を行うための<Connector>タグを定義します。 <Connector>タグでよく利用する属性を見ていきましょう。

要素 内容 デフォルト値
protocol 流れてくるトラフィックを処理するプロトコルを設定。初期設定はHTTP/1.1コネクタが設定される <br>・org.apache.coyote.http11.Http11Protocol<br>- HTTP/1.1コネクタ <br>・org.apache.coyote.http11.Http11NioProtocol <br>- 非ブロックJavaコネクタ <br>・org.apache.coyote.http11.Http11AprProtocol <br>- APR(Apache Portable Runtime)コネクタ なし
port コネクションを待ち受けるTCPのポート番号を設定。ほかのアプリケーションで利用しているポート番号は利用できない なし
≪connectionTimeout コネクションを受け付けてからコネクタが待ち受ける時間を設定。単位はミリ秒 6000
redirectionPort SSLでの通信が接続されたときに転送されるポートを設定 なし
maxThreads このコネクタで処理できるリクエスト処理スレッドの最大数を設定 40
secure リクエストがSSL通信かどうかをチェック false
scheme リクエストが指定したスキーマで送られてくるかを確認 http
sslProtocol 利用するSSLプロトコルを設定 TLS
SSLEnabled このコネクタでSSLのトラフィックが利用できるよう設定 false
編集部注:SSLについて詳しく知りたい読者は、セキュリティ用語辞典の[SSL]をご参照ください。

 それでは、HTTP/1.1コネクタを用いて8080番ポートで待ち受けるHTTP専用コネクタ(Connector)を設定してみましょう。SSL専用のリダイレクトポートは8443にし、タイムアウトの時間は100秒にします。

<Server port="8005" shutdown="SHUTDOWN" >
  <Service name="Catalina" >
    <Connector port="8080"
      protocol="org.apache.coyote.http11.Http11Protocol"
      connectionTimeout="10000" redirectPort="8443"
      scheme="http" secure="false"
/>

 これで、このサービスは8080番ポートで待ち受けるコネクタを持ちました。

コネクタを動かす<Engine>タグ

 コネクタが用意できたので、このコネクタを動かすTomcatのエンジン(Engine)を設定します。Engineタグを追加していきます。<Engine>タグでは、次のような属性を設定できます。

要素 内容
backgroundProcessorDelay backgroundProcessメソッド呼び出しの遅延時間を設定。デフォルトでは、10秒が設定されている
className 実装するJavaのクラス名。org.apache.catalina.Engineインターフェイスの実装が必要。指定しなければ、標準実装としてorg.apache.catalina.core.StandardEngineが設定される
defaultHost デフォルトのhost名を設定
jvmRoute ロード・バランシング時に利用する識別子を設定
name このエンジンの名前を設定。ログやメッセージで表示される。この名前は、ほかの<Service>を含め一意である必要がある
編集部注:ロード・バランシングについて詳しく知りたい読者は、Insider's Computer Dictionaryの[ロード・バランシング]をご参照ください。

 Tomcatのエンジンを設定してみましょう。エンジンのデフォルトのホスト名は「localhost」として、エンジンの名前は「Catalina」を設定します。

<Server port="8005" shutdown="SHUTDOWN" >
  <Service name="catalina" >
    <Connector port="8080"
      protocol="org.apache.coyote.http11.Http11Protocol"
      connectionTimeout="10000" redirectPort="8443"
      scheme="http" secure="false"
    />
    <Engine name="Catalina" defaultHost="localhost" />
  </Service>
</Server>

 これでTomcatエンジンの設定ができました。

Tomcatに設定する仮想ホスト<Host>タグ

 最後に、最低限の設定としてこのTomcatエンジンに仮想ホスト(Host)を登録してみましょう。仮想ホストを登録する<Host>タグでは、以下のような属性を設定できます。

要素 内容 デフォルト値
appBase 仮想ホストのベースディレクトリを指定。$CATALINA_BASEからの相対パス絶対パスで指定 なし
autoDeploy Webアプリケーションの自動デプロイを行うかどうかを設定 true
backgroundProcessorDelay backgroundProcessメソッド呼び出しの遅延時間を設定。<Engine>の設定を引き継ぐ −1秒
className 実装するJavaのクラス名。org.apache.catalina.Hostインターフェイスの実装が必要 org.apache.<br>catalina.core.<br>StandardHost
deployOnStartup Tomcat起動時にappBase以下に配置されているWebアプリケーションを自動的にデプロイするかどうかを設定 true
≪name 仮想ホストの名前を設定。<Host>を設定する場合、最低でも1つは<Engine>で指定したdefaultHostと同じ名前でなければいけない なし
deployXML Webアプリケーションに組み込まれたcontext.xmlのパースを行うかどうかを設定 true
errorReportValveClass このホストで行うエラー報告ValveのJavaクラス名を設定。Tomcatが生成するエラー・ページをカスタマイズできる。org.apache.catalina.Valveインターフェイスの実装が必要 org.apache.<br>catalina.valves.<br>ErrorReportValve
unpackWARs AR形式のappBaseに置かれたWebアプリケーションを展開するかどうかを設定 なし
workDir Contextが用意するスクラッチディレクトリへのパス名を設定 $CATALINCA_HOME
/work直下の適切なディレクトリ

 それでは、この情報で仮想ホストに設定を追加していきましょう。名前は「localhost」でアプリケーションは「webapps」に設定します。WARファイルは自動的に展開するようにしたいと思います。

編集部注:WARファイルについて詳しく知りたい読者は、Java TIPSの「Webアプリケーションをwarファイルでまとめる」をご参照ください。

<Server port="8005" shutdown="SHUTDOWN" >
  <Service name="catalina" >
    <Connector port="8080"
      protocol="org.apache.coyote.http11.Http11Protocol"
      connectionTimeout="10000" redirectPort="8443"
      scheme="http" secure="false"
    />
    <Engine name="Catalina" defaultHost="localhost" />
    <Host name="localhost" appBase="webapps"
      unpackWARs="true" autoDeploy="true" />
    </Engine>
  </Service>
</Server>

 これでHostの設定まで終わりました。この状態でTomatは簡単なWebアプリケーションも動作できるような状態になりました。

 JNDI(Java Naming and Directory Interface)リソースを使う場合や複数の仮想ホストを運用するような場合は、もっと詳細に設定する必要がありますので、Tomcatの公式リファレンスページや、Tomcatのパッケージに同梱されているドキュメントファイル$CATALINA_HOME/webapps/docs/以下のファイルを参考に設定しましょう。

編集部注:JNDIについて詳しく知りたい読者は、Java TIPSの「JNDI活用でデータソース管理を一元化する」をご参照ください。
ALT 図4 Tomcatの公式リファレンスページ

 次ページでは、Tomcat 6から新しくできるようになった設定について解説します。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。