Tomcatはどこまで“安全”にできるのか?(1)

“安全”のために
Tomcatを理解し、構築し、動作させる


アメニクス
x-lab チーム
2007/10/11


Tomcatを自動的に起動するには?


手動での起動は管理しづらいから

 インストールしたままのTomcatには、起動用のスクリプトなどは用意されておらず、このままでは毎回手動で起動しなくてはなりません。毎回手動で起動するのは、担当者により気分でオプションが変わったり、コマンドを間違えたりする可能性も考えられ、管理も煩雑になります。

 そこで、Tomcatを起動するための専用スクリプトを作成しましょう。

Apache Commons DaemonでTomcatをデーモン化

 その前に、プロセスの管理を容易にするために、Apacheのトップレベルプロジェクトの1つのCommonsプロジェクトに含まれているDaemonコンポーネントを利用して、Tomcatをデーモン(自動プロセス)化します。

注意!

Commons Daemonをビルドするためには、サーバコンポーネントのビルド環境が必要となります。autoconfmakeなどのビルド用ツール(コマンド)を実行できる環境をあらかじめご用意ください。

 Commons-DaemonプロジェクトのファイルはインストールしたTomcatの配下にある「/bin」ディレクトリ内に「jsvc.tar.gz」として格納されています。

 まず、このファイルを一時的に/tmpなどの一時ディレクトリへ移動します。

mv -f /opt/tomcat6/bin/jsvc.tar.gz /tmp/

 ファイルを移動したら先ほどの一時ディレクトリへ移動してファイルを解凍します。

cd /tmp
tar -xzf jsvc.tar.gz

 ファイルを解凍すると、「jsvc-src」というディレクトリが作成されます。その「jsvc-src」のディレクトリへ移動します。

cd jsvc-src

 ディレクトリを移動したらautoconfを利用してconfigureスクリプトを作成します。

autoconf

 configureスクリプトを作成したら、configureスクリプトを実行します。

sh configure

 configureが完了したら、ビルドに取り掛かります。

make

 ビルド後には「jsvc」というファイルが作成されます。作成されたjsvcの所有権をtomcatへと変更し、tomcatのインストールされているディレクトリ以下のbinディレクトリへと移動します。

chown tomcat. jsvc
mv -f jsvc /opt/tomcat6/bin

 後は、ビルドに利用したディレクトリとファイルを削除して、ビルドは完了です。

rm -rf /tmp/jsvc-src/ /tmp/jsvc.tar.gz

 これで、Tomcatをデーモン化して動作させることができるようになりました。

自動起動させるためのスクリプトを作成

 それでは、今度は自動起動させるためのスクリプトを作成します。エディタを用いて「/etc/rc.d/init.d/」以下にjsvcという名前の起動スクリプトを作成します。

vi /etc/rc.d/init.d/jsvc

 スクリプトの中身は以下のとおりです。

#!/bin/sh
#
# chkconfig: - 80 20
# description: jsvc

# Source function library.

. /etc/init.d/functions

JAVA_HOME=/usr/java/jdk1.5.0_12
CATALINA_HOME=/opt/tomcat6
TOMCAT_USER=tomcat
TMP_DIR=/tmp
CATALINA_OPTS=
CLASSPATH=\
$JAVA_HOME/lib/tools.jar:\
$CATALINA_HOME/bin/commons-daemon.jar:\
$CATALINA_HOME/bin/bootstrap.jar
PIDFILE=/var/run/tomcat.pid
LOCKFILE=/var/lock/subsys/tomcat
DAEMON=$CATALINA_HOME/bin/jsvc

start(){
    #
    # Start Tomcat
    #


    echo -n "Starting jsvc: "
    $DAEMON \
    -pidfile $PIDFILE \
    -user $TOMCAT_USER \
    -home $JAVA_HOME \
    -Dcatalina.home=$CATALINA_HOME \
    -Djava.io.tmpdir=$TMP_DIR \
    -outfile $CATALINA_HOME/logs/catalina.out \
    -errfile '&1' \
    $CATALINA_OPTS \
    -cp $CLASSPATH \
    org.apache.catalina.startup.Bootstrap

    #
    # To get a verbose JVM
    #-verbose \
    # To get a debug of jsvc.
    #-debug \

    RETVAL=$?
    if [ $RETVAL = 0 ]; then
        echo_success
        touch $LOCKFILE
    else
        echo_failure
    fi
    echo
}

stop(){
    #
    # Stop Tomcat
    #

    echo -n "Shutting down jsvc: "
    $DAEMON \
    -stop \
    -pidfile $PIDFILE \
    org.apache.catalina.startup.Bootstrap
    RETVAL=$?
    if [ $RETVAL = 0 ]; then
        echo_success
        rm -f $PIDFILE $LOCKFILE
    else
        echo_failure
    fi
    echo
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
        status $DAEMON
        RETVAL=$?
        ;;
    *)
        echo $"Usage: jsvc {start|stop|restart|status}"
        exit 1
        ;;
esac

注意!

起動スクリプトはjsvc.tar.gzを解凍した後のjsvc-src/native/Tomcat5.shを参考にしています。

 スクリプトの作成が終わったら、ファイルに実行権限を与えます。

chmod +x /etc/init.d/jsvc

 スクリプトに実行権限を与えたら、最後にchkconfigを実行して起動時のON/OFF設定を行って終了です。

chkconfig jsvc on

 以上で、Tomcatの自動実行の設定が完了しました。これで、サーバを再起動したときに自動的にTomcatが起動するようになります。

TomcatとApacheを連携させるmod_proxy_ajp


8080番ポートと80番ポートの謎

 Tomcatには、簡易Webサーバとしての機能も有しているため、デフォルトの状態では8080番ポートを利用して通常のHTMLページを含んださまざまなWebページの表示ができます。しかし、インターネットを利用していてもWebページ閲覧中に8080番ポートへと転送されるようなケースには巡り合うことはありません。

 ということは、Tomcatを80番ポートに変更してサーバを運用しているのでしょうか? 恐らくほとんどどのケースはこれに当てはまりません。

 TomcatのWebサーバ機能は簡易機能しか有しておらず、専用のWebサーバに比べると機能やパフォーマンスの面で劣ります。それでは、どのようにして80番ポートだけでWebサーバとTomcatの両方を利用しているのでしょうか?

TomcatとWebサーバを連携させて解決

 Tomcatは、ほかのWebサーバと連携する機能が充実しているため、Webサーバと連携させて利用できるようになっています。この連携の仕組みを利用することでWebページの表示パフォーマンスの改善やさまざまな制御を行っているのです。

 特に、WebサーバのApacheとは同じ団体が管理していることもあり親和性に優れています。バージョンによって異なるいくつかの連携の方法がありますが、今回は「CentOS 5.0」をOSとして利用しているため、最新のApache 2.2系列での連携方法を取り上げます。

 いままでのApache 2.0系列やApache 1.3系列では、Tomcatとの連携にmod_jkと呼ばれるコネクタモジュールを必要としていました。Apache 2.2系列では、いままでのバージョンとは異なり、Apacheの基本コンポーネントとして連携用の機能を備えているため、モジュールを追加する必要がなくなりました。

編集部注Apache 2.2について詳しく知りたい読者は、Linux Square の記事「Apache 2.2でWebサイトをパフォーマンスアップ!Apache 2.0については、同じく「Apache 2.0の新機能とその実力」をご参照ください。

mod_proxy_ajpを利用するには?

 通常、TomcatとApacheの通信は“AJPコネクタ”という機能を利用して実現しています。Apache 2.2系列では、mod_proxy_ajpと呼ばれるモジュールを利用することで簡単にTomcatとの連携を実現しています。

 Apacheの設定ファイル(httpd.confなど)において以下の2つのモジュールを読み込ませることでこの機能を利用できるようになります。

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

 CentOS 5.0では、初期状態でこれらの設定ファイルは読み込まれるようになっているので、特に変更の必要はありません。

 それでは、実際に「/tomcat」というディレクトリにアクセスする場合と通常のTomcatのトップページへアクセスする場合と同じ設定を行ってみましょう。

 そのためには、エディタを用いてApacheの設定ファイル(httpd.confなど)へ以下の行を追加します。

ProxyPass /tomcat/ ajp://localhost:8009/

 CentOS 5.0では、ajpの設定は専用のファイル「/etc/httpd/conf.d/proxy_ajp.conf」が存在しているので、このファイルにまとめて書くのが好ましいでしょう。

vi /etc/httpd/conf.d/proxy_ajp.conf

注意!

Tomcatが通常利用するポートは8080番ポートですが、AJPコネクタを利用した通信には8009番ポートを利用する点に注意してください。

 この設定を行いApacheの再起動を行えば、以下のようなページへのアクセスが可能となります。

図3 Tomcatのサンプルページ
図3 Tomcatのサンプルページ

 以上で、ApacheとTomcatの連携設定は完了です。いよいよ次ページではセットアップした環境でサーブレット/JSPを表示させます。

1-2-3

 INDEX
第1回 “安全”のためにTomcatを理解し、構築し、動作させる
  Page1
いまさら聞けないTomcat
CentOS 5.0に最新Tomcatをセットアップ
Page2
Tomcatを自動的に起動するには?
TomcatとApacheを連携させるmod_proxy_ajp
  Page3
「Hello World!」を表示してみよう
Tomcat 6の新機能と運用に関する設定



Java Solution全記事一覧

Java Solution フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

アイティメディアの提供サービス

ホワイトペーパー(TechTargetジャパン/閲覧には会員登録が必要です)

スキルアップ/キャリアアップ(JOB@IT)

- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  New! それはスペックで、導入が目的ではない
導入の「先」を見据えた、ITIL運用とは?

  New! 見れば必ず気に入る“机の上”PCサーバ
小さくて静か。ユーザー目線で考えた自信作

  New! あなたの会社の将来は本当に大丈夫?
屋台骨を支えるIT人材、育成できてますか?

  New! いま、SaaSエンジニアがおもしろい!
〜エンジニア・キャリア進化論(第10回)〜

  New! このご時勢、数年後の計画は分からない
迷った時のミッドレンジストレージはコレ

  New! 複数のストレージを“1つ”にできる、
ストレージ管理の「魔法の箱」を徹底解剖

  New! シンプル・簡単 iSCSI仮想化ストレージ
ITインフラ全体の“正しい仮想化”実現!

  New! ソフトウェアで、できることとは?
ビジネス直結「リカバリ・マネジメント」

  New! そのサーバに統合して安心ですか?
「現実的なサーバ統合」の3つの要件とは

  New! ――品質は上げてコストは半減――
ロボットが見せるPC管理の新しい形

  New! WebLogicとCoherenceが融合した
グリッド型アプリケーションサーバを実現

  New! 「偽装」も「疑わしい動き」も逃さない
1つのエージェントで徹底的にPCを守る!

  New! もはや、プライベートのツールではない!
企業・自治体も導入するSNSの効果とは?

  New! 「リポート機能は“すごい”のひとこと」
ある保険会社の“DB監査製品”導入事例

  New! 新しい技術の導入 ⇒ また最初からやり直し
の必要がなくなる「普遍性のあるノウハウ」

  New! ユーザー任せのパスワード管理は危険!
法整備対策に有効な高効果・低コスト製品

  New! 『フリーでやってみたいけど……』
そんなエンジニアの不安をすべて解決!

  「だれも見たことがない、10年後の
『ソフトウェア産業』を一緒に創りたい」

  「ウチはUTMなんかいらない」ってホント?
エンタープライズ市場でも選ばれる理由

  物理も仮想も効率的に運用・管理したい!
問題と解決策はこちら≫≫

  【工事進行基準】対策をチャンスに!
プロジェクト「見える化」で効率アップ!

  【工事進行基準】システム業界も導入!
新時代のプロジェクト管理はこれで決まり

  看護休暇、時短勤務、育児フレックス……。
各種の支援で「柔軟な働き方が可能な環境」

  『こうあるべし』ではなく、全ての人が
力をフルに発揮できる職場環境を考える

  宅急便もサーバも、止めない・止まらない
これが、クロネコヤマトのデータセンター

  高評価の技術採用で“いいところ取り”
低価格なのに機能は“フル”な次世代UTM

  “超高速”なのに“低価格”なUTM
その性能の高さの秘密とメリットに迫る!

  金融業界でのBPM適用<成功ケース>紹介
BPMシステムの導入のための5つのポイント

  間違いだらけのセキュリティ対策から脱却
「脅威の見えない化」対抗する2つの特徴

  “Windows”も“Linux”も“Solaris”も
SAP運用に最適な【x64サーバ】とは?

  Office製品ともシームレスに連携――
“マイクロソフトだからこそ”のERPとは

  転職した理由は「社風が合うと感じたから」
入社2カ月“勝ち組エンジニア”に話を聞く


ソリューションFLASHPR