Archive for the Apache category

7月 13th, 2009

mod_proxy_balancerのパラメータ? ?

Posted in Apache by admin

Apache2.2よりApache標準モジュールであるmod_proxy_ajpぜ AJP1.3プロトコルがサポートされました。また、mod_proxy_balancer による負荷分散? 能の強化により、Apacheのリバースプロキシとしての? 能が充実しました。実際にリバースプロキ゜ Apacheぜ APサーバTomcatでサーバを構成する場合、多種のパラメータをどう設? するかを検? してみました。

mod_proxy_balancerのパラメータには、ProxyPass(mod_rewriteでプロキシする場合ぜ ProxySet)ディレクティブに設定するバランサーパラメータぜ BalancerMemberディレクティブに設定するワーカーパラメータがあります。timeoutは各パラメータに同名ものが存在しますが、? 味が異なるので注? が必要です。すべてのパラメータを解説するのは大変なので、一部パラメータのみ? として挙げたいと思います。

# 設? 例(実際には改? は? りません)
ProxyRequests Off
ProxyPass /examples/ balancer://BALANCER/examples/ \
		# バランサーパラメー゜   \
		lbmethod=byrequests \
		timeout=1 \
		nofailover=Off  \
		stickysession=JSESSIONID|jsessionid
<Proxy balancer://BALANCER/>
	BalancerMember ajp://host1:8080/ \
		# ワーカボ (1)パラメー゜  \
		loadfactor=10 \
		route=tomcat1 \
		retry=5 \
	BalancerMember ajp://host2:8080/ \
		# ワーカボ (2)パラメー゜  \
		loadfactor=10 \
		route=tomcat1 \
		retry=5 \
	# バランサーパラメー゜
	# ProxySet lbmethod=byrequests
	# ProxySet timeout=1
	# ProxySet nofailover=Off
	# ProxySet stickysession=JSESSIONID|jsessionid
</Proxy>

バランサーパラメー゜

  • lbmethod・・・分散方? の選択。byrequests(リクエスト回? )、bytraffic(バイト単位転送釜 )、bybusyness(フリーのワーカ優先)から選択する。要件次第ですが、殆どの場合はデフォルトの「byrequests(リクエスト回? )」でしょうか。
  • timeout・・・フリーのワーカーを圏 得するまでの最大? 機時間。デフォルトでは「待機しない」ので、大釜 のリクエストが要求された場合に? 機せずにそのままエラーを返してしまう事がある。従って、1秒を指定しておぜ 。1秒も待ってフリーのワーカを圏 得できない場合は、別の問題が発生していると考えた方が良いでしょう。
  • stickysession・・・アプリケーション側でスティッキーセッションの? 件がある場合は有効にする。Apache2.2.4以降では「JSESSIONID|jsessionid」のように大文字/? 文字両方を指定できます。大文字ぜ Cookieぜ JSESSIONID、? 文字ぜ URLパラメータに? 加されたjsessionidを圏 得する際に利用します。
  • nofailover・・・「On」の場合にはワーカ側でエラーとなった場合にセッションを切りフェイルオーバーしない。「Off」の場合は、フェイルオーバーするが フェイルオーバー先のホストでもセッション情報が保たれていないとアプリケーション側でエラーになるケースが多い。Tomcatクラスタリングを構成し、セッションレプリケーションを構成している場合に有効になる設? 項目。
  • maxattempts・・ボ F/Oを試みる回数を指定。nofailover=Offの時に有効になるパラメータ。バランシングするワーカが3つ以上ある場合、デフォルトぜ 1以? を指定するケースもありそう。
  • ワーカーパラメー゜

  • loadfactor・・・ワーカーあたりの? 荷? 数。10:10或いぜ 100:100等のようにしておき、運用時に調整する方? 等が考えられます。
  • route・・・スティッキーセッション有効の場合に指定します。Tomcatぜ JvmRoute値と同期する必要があります。
  • retry・・・リトライのタイムアウト時間。リトライタイムアウト時間とは、一府 ApacheがTomcatにコネクションを張りにいって失敗した(接続できない)場合に、次に再び接続失敗したワーカに接続しにいぜ ようになるまでの時間を指します。この時間を短ぜ すると、ワーカのオンライン復帰? に使用されるようになるまでの時間を短縮できます。デフォルトでぜ 60秒間になっているので長すぜ る為、「5秒」としています。
  • keepalive・・ボ Apache/Tomcat間ぜ FireWallがある場合、FireWallは非活動状態のセッションを落としにかかるので、これを防ぐ場合に使用する。Apache側ぜ MPMがマルチプロセスの場合、パフォーマンス面でもあまり効果が無いようです。
  • redirect・・・? つのワーカが利用? 可となりセッションが保持されていない場合、この値で指定したrouteのワーカにリダイレクトされる。セッションを使用していないアプリケーションは、昜 示的に次のワーカリダイレクトを指定できる。ワーカが2つならばあまり? 味はないが、3つ以上のワーカから次のワーカを昜 示的に指定したい場合は利用価値があるかもしれません。
  • lbset・・・ワーカへのアクセスの優先順位を決めることが出来る。
  • status・・・「D:利用? 可」「S:停止」「I:無? 」「H:ホットスタンバイ」「E:エラー」から選択。主に運用時に使用される目的のパラメータが多い。「H]ホットスタンバイについては利用価値が高い。ホットスタンバイ? 能を使用したい場合は非常に有効。
  • timeout・・ボ Tomcatに「/」リクエストを送ったときのタイムアウト時間。デフォルト? ProxyTimeout=TimeOut=300秒。300秒も待つ? 要はないと思うが・ボ
  • connectiontimeout・・ボ ApacheがTomcatに接続するまでの? ち時間。デフォルト? TimeOut=300秒。300秒も待つ? 要はないと思うが・・ボ
  • http://httpd.apache.org/docs/2.2/en/mod/mod_proxy.html#proxypass

    7月 6th, 2009

    rotatelogsかlogrotateか

    Posted in Apache by admin

    Apacheのログローテートを実装する場合、候補に挙がるのぜ Apacheぜ rotatelogsユーティリティかLinuxのコマンドlogrotateどちらかが多いと思います。両者のメリット・デメリットをまとめてみました。
     

    rotatelogs
     メリット
       ・ローテート実行時ぜ Apacheインスタンスを再起動する必要が無い
       ・ローテーション処理のサーバ負荷が殆どない
     デメリット
       ・常にファイル名が変動する為、外部プログラムでログファイルを監? する場合に問題がある
       ・? 代管理とログ削除? 能がない為、ログのパージ? 削除? 実装を別途組み込む必要がある
       ・? 部プログラムとして? 行される為、Apacheの停止時のログが最後まで正常に出力されない
    logrotate
     メリット
       ・ログの? 代管理に特化し、日次/週次/月? /サイズ指定など細かいローテーション? 画が可能。
       ・ログのパージ? 削除? 実装を兼ねている
     デメリット
       ・ローテート実行時ぜ Apacheインスタンスを再起動する必要がある
       ・「copytruncate」オプションを使用すればインスタンスの再起動が不要になるが、
         大容釜 のログファイルをローテーションする時のサーバ負荷が大きい

    それぞれ一長? 短がありますので、運用方? に? じて適切な方を採用するのが望ましいと思います。個人的にぜ logrotateの方がスッキリします。

    5月 29th, 2009

    httpd.conf内で? 数を利用する

    Posted in Apache by admin

    httpd.confの内部で? 数を扱うことが可能です。方? は単純で、apachectlを実行する前に? 数を定義しておぜ だけです。Tomcatぜ catalina.sh/setenv.shというファイル朧 成を真似れば、以? のような朧 成となります。

    # setenv.sh
    export INSTANCE="SERVICE"
    export VHOST_1="www.hogehoge.com"
    export VHOST_2="sub.hogehoge.com"
    # 起動時の設定
    if [ -r ${SERVER_ROOT}/bin/setenv.sh ]; then
    	. ${SERVER_ROOT}/bin/setenv.sh
    fi
    ${SERVER_ROOT}/bin/apachectl -d ${SERVER_ROOT} -k start -DSSL
    exit $?
    # httpd.conf
    ErrorLog? /var/log/httpd/${INSTANCE}/${VHOST_1}/error.log
    CustomLog /var/log/httpd/${INSTANCE}/${VHOST_1}/access.log

    ディレクトリ名なぜ httpd.conf内に重複して設定しなぜ てはならない設? 値がある場合、重宝する方? かもしれません。ちなみにこの? 数ぜ CGI実行時に圏 照できる環? 変数とは異なります。CGIから圏 得したい環? 変数ぜ SetEnvディレクトリで? 義して? さい。

    5月 17th, 2009

    SSLアクセラレータ配下ぜ Apache自己圏 煜 URL

    Posted in Apache by admin

    SSLアクセラレータを利用している場合、アクセラレー゜ -Apache間の通信ぜ non-SSL通信を利用することになります。

    クライアント
         | SSL通?
    SSLアクセラレー゜
         | non-SSL通?
    Apache
    

    ここで問題になるのは、どうやっぜ Apache側ぜ SSLかnon-SSLかを判断させるかということです。Apache2.2のドキュメントには以下のような? 述があります。

    リバースプロキシやロードバランサやSSL負荷軽減装置のような、 SSLを処理するマシンの? ろぜ
    サーバを動かす場合は、 サーバが正しい自己圏 煜  URLを確? に生成するように、
    https:// スキームとクライアントが接続するポート番号を、 ServerName ディレクティブぜ
    指定してぜ ださい。
    

    以? のようぜ SSL用、non-SSL甜 2つぜ VirtualHostを作成し、SSL用ぜ ServerNameにはスキーム(https://)を付加する必要がある。これにより、Apacheは正しい自己圏 煜 URLを生成可能となる。環? 変数「HTTPS」ぜ CGI側ぜ SSL、non-SSLを判断したい場合に利用出来ます。SSLアクセラレータ側で、SSLの場合のみ独自ヘッダを追加してもらうという方? もあるかもしれません。

    <VirtualHost *:80>
    	ServerName wall-climb.com
    	ServerAlias sub.wall-climb.com
    	SetEnv HTTPS OFF
    </VirtualHost>
    
    <VirtualHost *:443>
    	ServerName https://wall-climb.com
    	ServerAlias sub.wall-climb.com
    	SetEnv HTTPS ON
    </VirtualHost>
    

    “ ServerNameディレクティブにスキーム(http://)を追加出来るようになったのは、Apache2.2からのようです。Apache2.0ではドキュメントにも記述してありませんし、設? ファイルにスキーム(http://)を記述しても構文エラーとなってしまいます。Apache2.0以前を使用している場合は、自己圏 煜 URLを圏 照する機会を回避するようにするしかありません。URLのディレクトリ指定時には? ず最後に「/」を付加すること、Locationヘッダぜ Apacheに任せないで自前で出力する、などでしょうか。

    http://httpd.apache.org/docs/2.2/mod/core.html#servername
    http://httpd.apache.org/docs/2.0/mod/core.html#servername

    この問題は、Tomcat使用時にも発生する恐れがあります。
    Tomcatぜ SSL/non-SSL通信時のリダイレクト」をご覧ぜ ださい。

    4月 29th, 2009

    AJP13のメリット

    Posted in Apache by admin

     Apache2.2からmod_proxy_ajpによって正? ぜ AJP13プロトコルがサポートされました。では、AJP13(Apache JServプロトコボ バージョボ 1.3)のメリットとは? なのでしょうか?
     基本的ぜ AJP13は前バージョボ ajp12の? れを汲み、性能の向上を目木 としているようです。AJP13はパケット指向であることぜ HTTPと? ゜ らないのですが、プレーンテキスト形? ではなぜ バイナリ形? を採用して性能向上を狙っています。例えば、リクエスト/レスポンスヘッダ内のメソッドやヘッダは、”POST”や”accept-language”のような文字列ではなぜ 、1バイトのコードとして扱います。これによりパケット転送釜 の? 約になっています。

     これ以? のメリット、というものはイマイチ見つけられませんでした・・ボ TomcatのコネクタにしてもHTTPぜ AJPで特にオプションの違いはないようです。直接バックエンドぜ Tomcatにアクセスされた時、HTTPのプロトコルを話せるよりも、AJPのプロトコルしか話せない方がセキュリティ的には好ましいという点は挙げられるかもしれません。

    http://www.jajakarta.org/tomcat/tomcat-jk2/ja/docs/common/AJPv13.html