apache2.2.3+tomcat6.0.26 (APサーバ)


Table of Contents

↑

はじめに

apache+tomcatの環境を構築します。データベースはPostgreSQLの利用を前提としてJDBCをインストールします。

尚、PostgreSQL(IP 192.168.11.101)は下記を前提に構築済とします。

↑

環境

  • ホスト名(IP)
    • serv202(192.168.11.202)
  • OS
    • CentOS 5.4 (kernel 2.6.18-164.11.1.el5)
  • パッケージ
    • httpd-2.2.3-31.el5.centos.2
    • httpd-devel-2.2.3-31.el5.centos.2
    • mod_ssl-2.2.3-31.el5.centos.2
    • tomcat 6.0.26.tar.gz
    • mod_jk 1.2.30
    • JDK 1.6.0_18
    • postgresql-8.4-701.jdbc4.jar
↑

パッケージのインストール

↑

apacheのインストール

  • apacheのインストール(openldap-develもインストールされます)
    # yum install httpd# yum install httpd-devel
  • apache用のSSLモジュールをインストール
    # yum install mod_ssl
↑

mod_jkのインストール

  • apacheとtomcatを連携させるためmod_jkをインストールします。
    # wget http://ftp.kddilabs.jp/infosystems/apache/tomcat/tomcat-connectors/jk/source/jk-1.2.30/tomcat-connectors-1.2.30-src.tar.gz# tar zxvf tomcat-connectors-1.2.30-src.tar.gz# cd tomcat-connectors-1.2.30-src/native# ./configure --with-apxs# make# make install
↑

JDKのインストール

  • 以下のサイトからJDKをダウンロードします。
    http://java.sun.com/javase/downloads/index.jsp

  • JDKをインストールします。
    # chmod u+x jdk-6u13-linux-i586-rpm.bin# ./jdk-6u18-linux-i586-rpm.binDo you agree to the above license terms? [yes or no]yes

  • 確認のためJDKのバージョンを表示させます。
    # java -versionjava version "1.6.0_18"Java(TM) SE Runtime Environment (build 1.6.0_18-b07)Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)
↑

JDBCのインストール

  • PostgreSQLと接続するためにJDBCをインストールします。
    # wget http://jdbc.postgresql.org/download/postgresql-8.4-701.jdbc4.jar# cp postgresql-8.4-701.jdbc4.jar /usr/local/tomcat/lib/
↑

tomcatのインストール

  • tomcatは最新版をソースからインストールします。
    # wget http://ftp.riken.jp/net/apache/tomcat/tomcat-6/v6.0.26/bin/apache-tomcat-6.0.26.tar.gz# tar zxvf apache-tomcat-6.0.26.tar.gz# mv apache-tomcat-6.0.26 /usr/local/tomcat# useradd tomcat -d /usr/local/tomcat# chown -R tomcat:tomcat /usr/local/tomcat
↑

設定

↑

tomcatの設定

↑

環境変数の設定

  • Tomcat関連の環境変数を設定します。
    クラスパスにはJDBCとサーブレット用の設定を追加しています。
    # vi /etc/profileJAVA_HOME=/usr/java/jdk1.6.0_18CATALINA_HOME=/usr/local/tomcatPATH=$PATH:$JAVA_HOME/binCLASSPATH=.:$CATALINA_HOME/lib/postgresql-8.4-701.jdbc4.jar:$CATALINA_HOME/lib/servlet-api.jarexport JAVA_HOME CLASSPATH PATH
  • 環境変数を反映します。
    # source /etc/profile
↑

server.xmlの編集

  • ポート8080番はapacheとtomcatの連携で不要になるため、コメントにして無効にします。
    ポート8009番はapacheとの連携に利用するため、デフォルトの設定内容を確認しておきます。
    # vi /usr/local/tomcat/conf/server.xml      
↑

ログ設定

  • /var/log配下にログが保存されるよう変更します。
    # mv /usr/local/tomcat/logs/ /var/log/tomcat# ln -s /var/log/tomcat /usr/local/tomcat/logs
  • logrotateの設定を行います。tomcat用のlogrotateファイルを作成します。
    # vi /etc/logrotate.d/tomcat/var/log/tomcat/catalina.out {    copytruncate    weekly    rotate 52    compress    missingok}

    logrotateファイルの確認を行います。errorで始まる行がなければ問題ありません。
    # logrotate -d /etc/logrotate.d/tomcat

    最後にsyslogを再起動します。
    # /etc/init.d/syslog restart
↑

apacheの設定

↑

workers.propertiesの作成

  • server.xmlに合わせてworkers.propertiesを作成します。
    # vi /etc/httpd/conf/workers.propertiesworker.list=tomcatworker.tomcat.port=8009worker.tomcat.host=localhostworker.tomcat.type=ajp13
    設定項目 説明
    worker.list workerの名前を定義します。
    worker.*.port Tomcatの待ち受けPortを指定します
    worker.*.host TomcatサーバのIPを指定します
    worker.*.type 「ajp12」or「ajp13」を指定します。
↑

httpd.confの編集

  • apacheの設定ファイル「/etc/httpd/conf/httpd.conf」を編集します。行数はあくまで目安です。
    # vi /etc/httpd/conf/httpd.conf#44行目 ヘッダ情報にapacheのパージョンなどを含めないよう制限しますServerTokens Prod#266行目 サーバ名を設定しますServerName www.oss-d.net:80#329行目「/var/www/html」以下のディレクトリでhtaccessを有効にしますAllowOverride All#526行目 エラーページの設定(サーバのバージョンやホスト名を出力しない)ServerSignature Off#749行目 デフォルトの文字コードを指定しますAddDefaultCharset UTF-8#最終行 mod_jkに対するの設定を行いますLoadModule jk_module modules/mod_jk.so     JkWorkersFile   /etc/httpd/conf/workers.properties    JkLogFile   /var/log/httpd/mod_jk.log    JkMount     /*  tomcat
↑

ssl.confの編集

  • apacheのSSL設定ファイル(/etc/httpd/conf.d/ssl.conf)を編集します
    # vi /etc/httpd/conf.d/ssl.conf#112行目 httpsdの使用する公開鍵の場所(基本的にデフォルト)SSLCertificateFile /etc/pki/tls/certs/localhost.crt#119行目 httpsd の使用する秘密鍵の場所(基本的にデフォルト)SSLCertificateKeyFile /etc/pki/tls/private/localhost.key#134行目 中間証明書の場所を指定します。利用するCAによっては設定が必要になります。#        今回はCAを利用せず、自己証明書を利用するため設定しません。#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt#227行目 ログの出力形式CustomLog logs/ssl_access_log combined#230行目 mod_jkの設定JkMount /usr/local/tomcat/webapps/ROOT/* tomcat
↑

秘密鍵と証明書の作成

下記を前提に秘密鍵「localhost.key」と証明書「localhost.crt」を作成します。

  • カレントディレクトリを変更します。
    # cd /etc/pki/tls

  • 秘密鍵を生成します。
    # openssl genrsa -des3 2048 -rand /var/log/ > private/localhost.key
    「Enter PEM pass phrase:」と表示されるので、パスフレーズを入力すると暗号化のための秘密鍵(localhost.key)が生成されます。

  • 秘密鍵からパスフレーズを削除します。削除しないとApache起動時に毎回パスフレーズを入力する必要があります。
    # openssl rsa -in private/localhost.key -out private/localhost.keyEnter pass phrase for private/localhost.key:writing RSA key「Enter pass phrase for private/localhost.key:」と表示されるので、先ほどのパスフレーズを入力します。


  • 生成された秘密鍵を使ってサイト証明書を発行します(Common NameはURLでのホスト名を入力)
    # openssl req -new -x509 -key private/localhost.key -out certs/localhost.crt -days 3650-----Country Name (2 letter code) [AU]:JPState or Province Name (full name) [Some-State]:Locality Name (eg, city) []:Organization Name (eg, company) [Internet Widgits Pty Ltd]:Organizational Unit Name (eg, section) []:Common Name (eg, YOUR name) []:www.oss-d.netEmail Address []:
↑

マルチプロセッシングモジュール(MPM)の設定

  • MPMをデフォルトのprefork MPMでなく、worker MPMで起動するよう設定を変更します。
    # vi /etc/sysconfig/httpdHTTPD=/usr/sbin/httpd.worker
↑

自動起動の設定

↑

Tomcatの起動設定

↑

自動起動の設定

  • 自動起動用のスクリプトを「/etc/init.d/tomcat」として作成します。
    下記サンプルは「/etc/init.d/functions」を利用するため、RedHat系以外のLinuxでは動作しない可能性があります。

    # vi /etc/init.d/tomcat#!/bin/bash## tomcat      This shell script takes care of starting and stopping Tomcat## chkconfig: - 80 20# description: tomcat# Source function library.. /etc/rc.d/init.d/functions# Define the tomcat usernameprog="tomcat"TOMCAT_USER="tomcat"TOMCAT_PATH="/usr/local/tomcat"TOMCAT_PID="/var/run/tomcat.pid"start() {    echo $"Starting $prog: "    if [ -r ${TOMCAT_PID} ] ; then        echo_failure        echo "$prog process already running"        return -1    else        runuser ${TOMCAT_USER} -c ${TOMCAT_PATH}/bin/startup.sh        RETVAL=$?        [ ${RETVAL} = 0 ]  && pgrep -u ${TOMCAT_USER} java > ${TOMCAT_PID}        echo_success        echo        return ${RETVAL}    fi}stop() {    echo -n $"Stopping $prog: "    if [ -r ${TOMCAT_PID} ] ; then        runuser ${TOMCAT_USER} -c ${TOMCAT_PATH}/bin/shutdown.sh > /dev/null        RETVAL=$?        [ ${RETVAL} = 0 ]  && rm -f  ${TOMCAT_PID}        echo_success        echo        return ${RETVAL}    else        echo_failure        echo "$prog process not running"        return -1    fi}# See how we were called.case "$1" in  start)    start    ;;  stop)    stop    ;;  restart)    stop    sleep 2    start    ;;  *)    echo $"Usage: $prog {start|stop|restart}"    exit 1esacexit ${RETVAL}
    「. /etc/rc.d/init.d/functions」「echo_failure」「echo_success」の行をコメントにすれば他のディストリビューションでも動作すると思います。
  • 自動起動スクリプトに実行権限を付与します。
    # chmod +x /etc/init.d/tomcat
  • chkconfigコマンドでtomcatをリストに追加し、自動起動をONにします。
    # chkconfig --add tomcat# chkconfig tomcat on

  • chkconfigコマンドで自動起動の確認をします。LUNレベル3,4,5がonになっていれば問題ありません。
    # chkconfig --list tomcattomcat            0:off   1:off   2:off    3:on    4:on    5:on    6:off
↑

起動確認

  • tomcatを起動します。
    # /etc/init.d/tomcat starttomcat を起動中:Using CATALINA_BASE:   /usr/local/tomcatUsing CATALINA_HOME:   /usr/local/tomcatUsing CATALINA_TMPDIR: /usr/local/tomcat/tempUsing JRE_HOME:        /usr/java/jdk1.6.0_18Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar                                                           [  OK  ]

  • netstatコマンドでプロセスの確認します。
    # netstat -lntp |grep javatcp    0    0 ::ffff:127.0.0.1:8005     :::*            LISTEN    6346/javatcp    0    0 :::8009                   :::*            LISTEN    6346/javatcp    0    0 :::8080                   :::*            LISTEN    6346/java
↑

apacheの起動設定

↑

自動起動の設定

  • chkconfigコマンドで自動起動をONにします
    # chkconfig  httpd on
↑

起動確認

  • apacheを起動します。
    # /etc/init.d/httpd start


  • netstatコマンドでプロセスの確認します。
    # netstat -lntp |grep httptcp    0    0   :::80             :::*            LISTEN    529/httpd.workertcp    0    0   :::443            :::*            LISTEN    529/httpd.worker
↑

動作確認

↑

JDBCの確認(サーブレット)

↑

確認用スクリプトの作成

  • classファイルを設置するためのディレクトリを作成します。
    # mkdir /usr/local/tomcat/webapps/ROOT/WEB-INF/classes
  • サーブレット確認用のjavaファイルを作成します。
    # cd /usr/local/tomcat/webapps/ROOT/WEB-INF/classes# vi JDBC_Servlet.javaimport java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.sql.*;public class JDBC_Servlet extends HttpServlet {    public void doGet(HttpServletRequest request, HttpServletResponse response)    throws IOException, ServletException{        PrintWriter out = response.getWriter();        try{            Class.forName("org.postgresql.Driver");            // PostgreSQL 接続            String db = "jdbc:postgresql://192.168.11.101:5432/template1";            String user = "postgres";            String pass = "";            Connection conn = DriverManager.getConnection(db,user,pass);            //out.println(conn);            // SQL実行            Statement st = conn.createStatement();            String sql = "SELECT usename FROM pg_user";            ResultSet rs = st.executeQuery(sql);            // SQL実行結果を出力            while (rs.next()) {                out.println(rs.getString(1));            }            // PostgreSQL 切断            st.close();            rs.close();            conn.close();        }catch(Exception e){            out.println(e);        }    }}
  • コンパイルします。
    # javac JDBC_Servlet.java
↑

servletの設定

  • ブラウザから閲覧できるようservletの設定を変更します。
    # vi /usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml...        JDBC_Servlet      JDBC_Servlet          JDBC_Servlet      /servlet/JDBC_Servlet  
↑

動作確認

↑

JDBCの確認(JSP)

↑

確認用スクリプトの作成

  • JSP確認用のjavaファイルを作成します。
↑

動作確認

↑

チューニング

↑

apacheのチューニング

↑

Apache マルチプロセッシングモジュール(MPM)の設定

  • MPMをデフォルトのprefork MPMでなく、worker MPMにする事で大幅なパフォーマンス向上が期待できます。
    # vi /etc/sysconfig/httpdHTTPD=/usr/sbin/httpd.worker

    設定変更後はapacheを再起動します。
    # /etc/init.d/httpd restart
↑

プロセスの設定

  • 多数のリクエストを同時処理できるよう、待ち受けプロセスに関する設定を見直します。
    一般的にプロセス数が多いほど性能はあがりますが、その分メモリを多く消費します。
    # vi /etc/httpd/conf/httpd.confStartServers         2MaxClients         150MinSpareThreads     25MaxSpareThreads     75ThreadsPerChild     25MaxRequestsPerChild  0

    設定項目 説明
    StartServers 起動時のプロセス数。起動直後から多数のアクセスがある場合はプロセス数を増やします。
    MaxClients 処理可能な同時リクエスト数。worker MPM ではクライアントに応答できるスレッドの総数となります。待機スレッドはこの中に含まれない。
    MinSpareThreads 待機スレッドの最小数。下回った場合は待機スレッドを起動させます。
    MaxSpareThreads 待機スレッドの最大数。上回った場合は待機スレッドを終了させます。
    ThreadsPerChild 子プロセスで生成される スレッド数を設定します
    MaxRequestsPerChild 個々の子サーバプロセスが扱うことのできるリクエストの制限数。偶発的なメモリーリークが起こった場合にプロセスが消費するメモリの総量を制限できます。
↑

KeepAliveの設定

  • Apacheはリクエスト単位でTCP接続のオープン/クローズを行いますがKeepAliveを有効にすると、1つのTCP接続で複数の要求を処理する事が可能になり、TCP接続を確立のオーバヘッドが削減されます。
    # vi /etc/httpd/conf/httpd.confKeepAlive OnMaxKeepAliveRequests 10KeepAliveTimeout 15

    設定項目 説明
    KeepAlive KeepAliveの有効、無効を設定する
    MaxKeepAliveRequests 1つのTCP接続で処理できるリクエスト数
    KeepAliveTimeout 1つのTCP接続が保持される時間。時間を超えると切断される。
↑

不要モジュールの削除

  • 不要なモジュールは性能低下に繋がるため、httpd.confのLoadModuleで読み込まないようにします。
    # vi /etc/httpd/conf/httpd.conf##不要なモジュールはコメントにします。LoadModule auth_basic_module modules/mod_auth_basic.soLoadModule auth_digest_module modules/mod_auth_digest.so                             :                             :LoadModule version_module modules/mod_version.so
↑

tomcatのチューニング

↑

プロセスの設定

  • 多数のリクエストを同時処理できるよう、待ち受けプロセスに関する設定を見直します。
    一般的にプロセス数が多いほど性能はあがりますが、その分メモリを多く消費します。
    # vi /usr/local/tomcat/conf/server.xml   
↑

メモリ(ヒープ)サイズの設定

  • 起動時に環境変数 CATALINA_OPTS でメモリの割り当てを増やします。
    # vi /usr/local/tomcat/bin/catalina.shCATALINA_OPTS="-Xms128M -Xmx256M" 

    設定項目 説明
    -Xms メモリ初期使用量
    -Xmx メモリ最大使用量
このエントリーをはてなブックマークに追加
Last-modified: 2010-06-05 (土) 12:30:45   最終更新のRSS