パスワードを忘れた? アカウント作成
590827 journal

dsegの日記: 低速に応答するWebサーバを建てる

日記 by dseg

ということで前回エントリの続きをば。

やりたいこと: 低速に応答するWebサーバを建てる
目的: 納品コンテンツのQAテスト用。回線が細い環境での閲覧に支障がないかの検証(帯域 ≒ 36kbps)
使用するソフトウェア: ACME Laboratoriesthttpd

今回はデバッグ用途なので、
・既存の環境に影響を与えない
・導入、削除が簡単
・軽量
・限られた資源で慎ましやかに動く
という条件で検討し、結局thttpdをテストサーバに追加導入することにした。
thttpdには、設定ファイル「thttpd.throttle」で、ファイルの拡張子毎に使用する帯域を設定できるというとても便利な機能がある。
今回のコンテンツでは、.HTML/.XML/.MP3/.SWFの4種類を使うので、これらに対して使用帯域の上限を設定した。

テストサーバはRedHat系の『Trustix Secure Linux』という聞き慣れないディストリビューションだが、
テスト担当者が他のマシンでも同一の環境を構築できるよう、SPECファイルを書き、必要なファイルをSRPMにまとめた。
# ちなみに、TrustixはXレスのコンパクトなサーバ用ディストリビューションで、
# 無料版でも、swupというツールによって常に最新のソフトウェアに自動アップグレードできるのが特徴。

thttpdのおかげで、当初もくろんでいた目的はあっさり実現できたが、
もうひとつ困った問題が出てきた。
部のLAN内の全てのマシンはproxyを通してテストサーバと通信しているのだが、
proxyがかなり強力なため、一度アクセスしたコンテンツに再度アクセスしても、proxyがキャッシュの中身を返してきてしまうのだ。
つまり、2回目からは一瞬で読み込みが完了してしまう。ブラウザのリロードボタンを押しても全く効果がない。
おまけに、部内はNATを使っているので、あるテスト担当者がアクセスしたコンテンツにアクセスすると、一瞬で読み込みが完了…。
うーん。これでは話にならない。

しょうがないので、thttpdのソースにパッチを当てて、
proxyにキャッシュを一切しないよう指示してみた。
これで一件落着。

RPMのSPECファイルとSRPM:
thttpd.spec
thttpd.src.rpm

Trustixでは、

HTTPDサーバが利用するユーザ名/グループ名 => httpd/httpd
init.dの場所 => /etc/rc.d/init.d/

となっていた。
他のディストリビューションでRPMをビルドする場合は、
この部分を使用しているディストリビューションの対応するそれに(もし違えば)書き換えればいいと思う。

--
以下、個人用メモ。

thttpdの配布物に含まれるデフォルトのSPECファイルからビルドすると
http://example.com/~user/
というような、チルダ以下にユーザー名を付加すると//public_html
にマッピングされる仕組みが有効にならないので、設定ファイルにパッチを当てる。

+TILDE_MAP_2追加。
http://www.acme.com/software/thttpd/options.html#TILDE_MAP_2

+デフォルトキャラクタセットはなんとなくeuc-jpに。
+thttpd.throttleをソースファイルリストに追加。
+キャッシュ無効化オプション(nocache)が指定されたときに、HTTPヘッダに

Cache-Control: no-cache,no-store,must-revalidate

を出力するようソースにパッチを当てた。
*CGIはデフォルトで無効だが、そのままに。

# TILDE_MAP_2を定義したのに、http://example.com/~user/ にアクセスしても、404エラーになってしまい途方に暮れたが、
# /etc/thttpd.confのchrootオプションを切ったら無事にアクセスできるようになった。
# よく考えてみたらchrootしたら、ユーザのホームには当然アクセスできないよな。
# 深く反省。
# 45分のロス。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

目つきのヤバい少年がナイフをシュッ・シュッと振り回しながら街を徘徊している情景が目に浮かんだ -- あるセキュリティ専門家

読み込み中...