わかってきた事

On 2009年10月28日, in Apache, by タカ

今現在、以下の3パターンでロードアベレージなどを調べています。

  1. Apache+mod_phpのみ
  2. 静的コンテンツはwokerのApache,動的コンテンツはApache+mod_php
  3. 静的コンテンツはwokerのApache+mod_cache,動的コンテンツはApache+mod_php

仮想で2CPUで検証中。

最初は、どれも大して差がありません。
むしろ、分けている方がロードアベレージ高いです。

ただ、負荷が上がってくるとだんだんmod_php+Apacheが悲鳴をあげてきます。

ある時を境に、1のmod_php+Apacheが突然落ちます。(ログに出ないけどtopから消えてJMeterが止まる)

同じ負荷でも、2はちゃんとアクセスをさばいています。(若干重くなってはいるが表示はされる)

3はまだ検証していません。

ここらへんの結果から、静的コンテンツと動的コンテンツで分ける手法は
同一サーバ内でも有効だという仮説が立ちます。

負荷を軽減するというよりは、マシンパワーを余すことなく使いしっかりとアクセスをさばいている感じです。

ここはもう少し深堀していきます。

余裕が出たらJMeterの使い方や負荷テストの手順とかも書きたいなぁ。

Tagged with:  

※ProxyPreserveHost Onを設定すると発生しない??

リクエストをプロキシされる側で問題が発生する場合がある。

今回遭遇したのは、$_SERVERに関する部分。

プロキシ:example.jpの80番ポート
APサーバ:example.jpの30080番ポート

とすると、
APサーバにて、$_SERVER['HTTP_HOST']を表示させると

example.jp:30080

となっている。
普通に考えればこれは当然なんだけど、

example.jp:80

になって欲しい。
他にも、 $_SERVER['REMOTE_ADDR']と$_SERVER['SERVER_NAME']も
APサーバ側の情報になる。

そんな時の対処法としては、

$_SERVER['HTTP_HOST'] = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST']:$_SERVER['HTTP_HOST'];
$_SERVER['REMOTE_ADDR'] = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR']:$_SERVER['REMOTE_ADDR'];
$_SERVER['SERVER_NAME'] = isset($_SERVER['HTTP_X_FORWARDED_SERVER']) ? $_SERVER['HTTP_X_FORWARDED_SERVER']:$_SERVER['SERVER_NAME'];

という感じで、HTTP_X_FORWARDED系の情報を使い、プロキシ側に書き換えます。

これを使って、mojaviとかも上手く動くようになりました。

※グローバル変数を書き換えるのは危険な気もするけど…。

Tagged with: