TT Lab
はじめる
学ぶ 学習パス コース

Tomcat & nginxの運用

server.xmlに手を入れる — コネクタ・セキュリティ・アクセスログ

TT Labで続きを見る

目標

server.xmlの階層構造を理解し、コネクターの追加、終了ポートのセキュリティ対応、アクセスログのフォーマット変更、外部のdocBaseコンテキスト、レスポンス圧縮を、自分で設定できるようになります。

なぜ重要なのか

server.xmlは、SI現場で最も頻繁に開かれる設定ファイルです。ところが、ほとんどは「どこかで受け取ったファイルをコピーして、ポートだけを変える」方式で扱われています。その結果、終了ポートがデフォルトのまま本番に出て(セキュリティ点検の指摘の第1位)、アクセスログに応答時間がないため、「遅い」という報告に根拠を示せません。このラボでは、各属性が何を変えるのかを、自分で確認しながら身に付けます。

ステップ

  1. Tomcatを起動して、/opt/tomcat/conf/server.xmlを/opt/tomcat/conf/server.xml.origにバックアップします。
  2. server.xmlにポート8081のHTTPコネクターを追加して、再起動します。http://127.0.0.1:8081/が200である必要があります。
  3. Server要素のshutdown属性の値を、デフォルト(SHUTDOWN)ではない、8文字以上の別の文字列に変更します。
  4. Hostの中のAccessLogValveのpatternに、ミリ秒単位の処理時間を表す指定子を追加して再起動したあと、リクエストを1回送って、/opt/tomcat/logs/localhost_access_log.*.txtにログが残るようにします。
  5. /opt/tomcat/conf/Catalina/localhost/api.xmlを作成して、docBaseを/opt/lab/fixtures/tomcat/apiに指定します。再起動後、http://127.0.0.1:8080/api/index.htmlが200である必要があります。
  6. ポート8080のコネクターで圧縮を有効にして、再起動します。curl -H 'Accept-Encoding: gzip' -I http://127.0.0.1:8080/api/big.htmlのレスポンスヘッダーに、Content-Encoding: gzipがある必要があります。
  7. /root/tc/validate.shを作成します。引数を1つ(XMLファイルのパス)受け取って、XMLが正常なら終了コード0、壊れているかファイルがなければ、0以外の値で終了します。
  8. /root/tc/serverxml.csvを作成します。1行目はelement,attribute,value,whyです。ステップ2–6で変更した設定5件を、それぞれ1行ずつ書きます。whyは15文字以上である必要があります。

参考

原本のバックアップ

Tomcatを起動して、/opt/tomcat/conf/server.xmlを/opt/tomcat/conf/server.xml.origにバックアップします。

設定ファイルを直す前のバックアップは、交渉の対象ではありません。バックアップも、有効なXMLである必要があって初めて意味があります。

追加のコネクターの作成

server.xmlにポート8081のHTTPコネクターを追加して、再起動します。http://127.0.0.1:8081/が200である必要があります。

ConnectorはServiceの下に、複数置けます。既存のコネクターをコピーして、ポートだけを変えればよいです。反映は再起動後です。

終了コマンドの変更

Server要素のshutdown属性の値を、デフォルト(SHUTDOWN)ではない、8文字以上の別の文字列に変更します。

Server要素のshutdown属性がデフォルトなら、ポート8005に接続できる誰でも、WASを停止できます。セキュリティ点検の常連項目です。

アクセスログに応答時間を追加する

Hostの中のAccessLogValveのpatternに、ミリ秒単位の処理時間を表す指定子を追加して再起動したあと、リクエストを1回送って、/opt/tomcat/logs/localhost_access_log.*.txtにログが残るようにします。

AccessLogValveのpatternに、処理時間を表す指定子を追加します。ミリ秒単位の指定子と、秒単位の指定子が別にあるので、ドキュメントを確認してください。再起動後にリクエストを1回送ると、ログができます。

webappsの外のディレクトリをサービスする

/opt/tomcat/conf/Catalina/localhost/api.xmlを作成して、docBaseを/opt/lab/fixtures/tomcat/apiに指定します。再起動後、http://127.0.0.1:8080/api/index.htmlが200である必要があります。

conf/Catalina/localhost/の下にコンテキスト名.xmlを置くと、その名前がコンテキストパスになり、docBaseで任意のパスを指せます。

コネクターの圧縮設定

ポート8080のコネクターで圧縮を有効にして、再起動します。curl -H 'Accept-Encoding: gzip' -I http://127.0.0.1:8080/api/big.htmlのレスポンスヘッダーに、Content-Encoding: gzipがある必要があります。

Connector属性で圧縮を有効にします。最小サイズの基準があるので、小さなレスポンスは圧縮されません。クライアントがAccept-Encodingを送る必要があることも、忘れないでください。

設定の検証スクリプト

/root/tc/validate.shを作成します。引数を1つ(XMLファイルのパス)受け取って、XMLが正常なら終了コード0、壊れているかファイルがなければ、0以外の値で終了します。

デプロイ前に、XMLが壊れていないかを確認するスクリプトです。引数として受け取ったファイルを検証して、終了コードで知らせるようにすれば、自動化に使えます。xmlstarletやpythonのうち、使いやすいものを使ってください。

変更内容の文書化

/root/tc/serverxml.csvを作成します。1行目はelement,attribute,value,whyです。ステップ2–6で変更した設定5件を、それぞれ1行ずつ書きます。whyは15文字以上である必要があります。

設定の変更は、必ず「何を、なぜ」を一緒に残します。6か月後にこの値を戻そうとする人に必要なのは、値ではなく理由です。