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
動作確認
-
ブラウザで動作確認を行います
http://192.168.11.202/servlet/JDBC_Servlet
JDBCの確認(JSP)
確認用スクリプトの作成
- JSP確認用のjavaファイルを作成します。
動作確認
-
ブラウザで動作確認を行います
http://192.168.11.202/JDBC.jsp
チューニング
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.conf
StartServers 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 メモリ最大使用量