<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Groove Labo &#187; Webサーバー</title>
	<atom:link href="http://labo.opengroove.com/blog/category/web-server/feed/" rel="self" type="application/rss+xml" />
	<link>http://labo.opengroove.com/blog</link>
	<description>株式会社オープングルーヴの開発者のブログ</description>
	<lastBuildDate>Wed, 25 Aug 2010 06:55:36 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>mod_dosdetector でDoS対策</title>
		<link>http://labo.opengroove.com/blog/2009/11/18/mod_dosdetector-%e3%81%a7dos%e5%af%be%e7%ad%96/</link>
		<comments>http://labo.opengroove.com/blog/2009/11/18/mod_dosdetector-%e3%81%a7dos%e5%af%be%e7%ad%96/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 04:27:39 +0000</pubDate>
		<dc:creator>sugimoto</dc:creator>
				<category><![CDATA[Apache]]></category>

		<guid isPermaLink="false">http://labo.opengroove.com/blog/?p=436</guid>
		<description><![CDATA[sugimotoです。

Apache のDoS対策として mod_dosdetector を使ったのでメモです。

1. mod_dosdetector の設定


インストールの方法などは「dos対策のmod_dosdetectorで特定のContentTypeは、対象外にする方法」というBlogがあったので参考にしました。



設定の書き方もいろいろなサイトに載っていましたが、静的ファイルをアクセス回数の対象外にする方法が正しくないところが多いようです。



静的ファイルの除外は DoSIgnoreContentType ディレクティブで設定しますが、



&#60;IfModule dosdetector_module&#62;
    ... 省略 ...
    DoSIgnoreContentType .(js&#124;png&#124;jpe?g&#124;gif&#124;css&#124;ico)
&#60;/IfModule&#62;



のような設定をしてテストしたところ、設定追加前と同じ回数でDoS判定されてしまいました。



このディレクティブは名前の通り Content-Type を設定するのが正しいので、次のように静的ファイルの Content-Type を設定すると正しく認識されました。



&#60;IfModule dosdetector_module&#62;
    ... 省略 ...
    DoSIgnoreContentType ^(image/&#124;application/&#124;text/javascript&#124;text/css)
&#60;/IfModule&#62;


2. 利用可能なディレクティブ


利用可能なすべてのディレクティブは以下の通りです。



    DoSDetection
        DoS判定をする/しないのフラグ(On/Off)
    DoSThreshold
   [...]]]></description>
			<content:encoded><![CDATA[<p>sugimotoです。</p>

<p>Apache のDoS対策として <a href="http://sourceforge.net/projects/moddosdetector/">mod_dosdetector</a> を使ったのでメモです。</p>

<h3>1. mod_dosdetector の設定</h3>

<p>
インストールの方法などは「<a href="http://d.hatena.ne.jp/zenpou/20080923/1222185231">dos対策のmod_dosdetectorで特定のContentTypeは、対象外にする方法</a>」というBlogがあったので参考にしました。
</p>

<p>
設定の書き方もいろいろなサイトに載っていましたが、静的ファイルをアクセス回数の対象外にする方法が正しくないところが多いようです。
</p>

<p>
静的ファイルの除外は DoSIgnoreContentType ディレクティブで設定しますが、
</p>

<pre>
&lt;IfModule dosdetector_module&gt;
    ... 省略 ...
    DoSIgnoreContentType .(js|png|jpe?g|gif|css|ico)
&lt;/IfModule&gt;
</pre>

<p>
のような設定をしてテストしたところ、設定追加前と同じ回数でDoS判定されてしまいました。
</p>

<p>
このディレクティブは名前の通り Content-Type を設定するのが正しいので、次のように静的ファイルの Content-Type を設定すると正しく認識されました。
</p>

<pre>
&lt;IfModule dosdetector_module&gt;
    ... 省略 ...
    DoSIgnoreContentType ^(image/|application/|text/javascript|text/css)
&lt;/IfModule&gt;
</pre>

<h3>2. 利用可能なディレクティブ</h3>

<p>
利用可能なすべてのディレクティブは以下の通りです。
</p>

<dl>
    <dt>DoSDetection</dt>
        <dd>DoS判定をする/しないのフラグ(On/Off)</dd>
    <dt>DoSThreshold</dt>
        <dd>判定の閾値 &#8211; 注意レベル(回)</dd>
    <dt>DoSHardThreshold</dt>
        <dd>判定の閾値 &#8211; 警告レベル(回)</dd>
    <dt>DoSPeriod</dt>
        <dd>DoS判定をする基準時間(秒)</dd>
    <dt>DoSBanPeriod</dt>
        <dd>DoS認定したクライアントを再度開放するまでの時間(秒)</dd>
    <dt>DoSShmemName</dt>
        <dd>クライアントを保存するために保持するシェアードメモリの名前</dd>
    <dt>DoSTableSize</dt>
        <dd>クライアントを保存するためのテーブルのサイズ</dd>
    <dt>DoSIgnoreContentType</dt>
        <dd>アクセス回数としてカウントしないContent-Typeの指定</dd>
</dl>

<h3>3. DoS認定されたクライアントの処理を追加する</h3>

<p>
Apache の設定ファイルに以下の設定を追加して、DoS認定(警告レベル)となったクライアントを「403 (FORBIDDEN)」にします
</p>

<pre>
    RewriteEngine On
    RewriteCond %{ENV:SuspectHardDoS} .+
    RewriteCond %{REMOTE_ADDR} !^192\.168\.1\. # ローカルネットワークからのアクセスは無視
    RewriteCond %{REMOTE_ADDR} !^xxx\.xxx\.xxx\.xxx$ # テストユーザーからのアクセスは無視
    RewriteCond %{HTTP_USER_AGENT} !Googlebot
    RewriteCond %{HTTP_USER_AGENT} !Yahoo
    RewriteRule .* – [F,L]
</pre>

<p>
なお、以下の場合はDoS判定しないように設定しています
</p>

<ol>
    <li>192.168.1.* : ローカルネットワークからのアクセスは監視サーバーなどの自動アクセスがあるため除外</li>
    <li>xxx.xxx.xxx.xxx : 自社オフィスなどのIPアドレスからのアクセスはテストなどで頻繁にアクセスすることがあるため、除外しました</li>
    <li>Googlebot : Googleはインデックスされないと困るので。。。除外</li>
    <li>Yahoo : Yahooもインデックスされないと困るので。。。</li>
</ol>

<h3>4. DoS対策のテスト</h3>

<p>
設定のテストは Apache Bench を使うと簡単に実行できます。
</p>

<pre>
> ab -n 1000 -c 3 -k http://xxxx.ciklone.com/xxxx
</pre>

<ul>
    <li>-n 1000 : 1000アクセスする負荷テストを実行</li>
    <li>-c 3 : 同時アクセス数を 3 に設定</li>
</ul>

<h3>5. その他の負荷対策モジュール</h3>

<p>
最後にその他の負荷対策モジュールについても書いておきます。
</p>

<ul>
    <li>mod_cband : 帯域と同時接続の制限
        <ul class="normal">
            <li><a href="http://www.kamakura-lin.info/2008/08/mod_cband.php">mod_cband (LIN Networks)</a></li>
        </ul>
    </li>

    <li>mod_limitipconn : 同一IPからの同時接続を制限する
        <ul class="normal">
            <li><a href="http://dominia.org/djao/limitipconn2.html">mod_limitipconn.c</a></li>
            <li><a href="http://www.atmarkit.co.jp/flinux/rensai/apache2_08/apache08d.html">接続数／帯域制限で無法なダウンローダを撃退（4/4） － ＠IT</a></li>
            <li><a href="http://paranoids.sakura.ne.jp/kaworu/2009-07-05-1.php">Apache mod_limitipconnでIPの最大接続数制限をする</a></li>
        </ul>
    </li>
    <li>mod_bwshare : 同一IPの帯域、接続数を制限する
        <ul class="normal">
            <li>活動してるのか･･･.. =&gt; <a href="http://www.netnice.org/pukiwiki.php?mod_bwshare">http://www.netnice.org/pukiwiki.php?mod_bwshare</a></li>
            <li><a href="http://www.atmarkit.co.jp/flinux/rensai/apache2_08/apache08c.html">接続数／帯域制限で無法なダウンローダを撃退（3/4） － ＠IT</a></li>
            <li><a href="http://tomo.ac/goodstream/server/apache/tips/bwshare.html">トラフィック制御する方法（bwshare）</a></li>
        </ul>
    </li>
    <li>mod_access_limit : 全アクセス数を制限?? &#8211; 活動していないかも。。
        <ul class="normal">
            <li><a href="http://www.apache.jp/pipermail/apache-users/2002-January/000883.html">Apache-Users 880 mod_access_limit (アクセスリミットモジュール)</a></li>
        </ul>
    </li>
</ul>

<h3><span style="color: #999999;">ソフトウェアエンジニアのためのバグトラッキングシステム : Ciklone</span></h3>

<p><a title="ソフトウェアエンジニアのためのバグトラッキングシステム" href="http://ciklone.com/"><img class="alignnone" title="ソフトウェアエンジニアのためのバグトラッキングシステム" src="http://www.opengroove.com/images/ciklone-banner.png" alt="ソフトウェアエンジニアのためのバグトラッキングシステム" width="224" height="50" /></a></p>

<p><a style="color: #999999;" href="http://ciklone.com/" title="ソフトウェアエンジニアのためのバグトラッキングシステム">ソフトウェアエンジニアのためのバグトラッキングシステム</a></p>
]]></content:encoded>
			<wfw:commentRss>http://labo.opengroove.com/blog/2009/11/18/mod_dosdetector-%e3%81%a7dos%e5%af%be%e7%ad%96/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>負荷試験の考え方（お客様へ説明すべきこと）</title>
		<link>http://labo.opengroove.com/blog/2009/08/17/%e8%b2%a0%e8%8d%b7%e8%a9%a6%e9%a8%93%e3%81%ae%e8%80%83%e3%81%88%e6%96%b9%ef%bc%88%e3%81%8a%e5%ae%a2%e6%a7%98%e3%81%b8%e8%aa%ac%e6%98%8e%e3%81%99%e3%81%b9%e3%81%8d%e3%81%93%e3%81%a8%ef%bc%89/</link>
		<comments>http://labo.opengroove.com/blog/2009/08/17/%e8%b2%a0%e8%8d%b7%e8%a9%a6%e9%a8%93%e3%81%ae%e8%80%83%e3%81%88%e6%96%b9%ef%bc%88%e3%81%8a%e5%ae%a2%e6%a7%98%e3%81%b8%e8%aa%ac%e6%98%8e%e3%81%99%e3%81%b9%e3%81%8d%e3%81%93%e3%81%a8%ef%bc%89/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 11:22:53 +0000</pubDate>
		<dc:creator>syoji</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[ソフトウェア開発]]></category>
		<category><![CDATA[テスト]]></category>

		<guid isPermaLink="false">http://labo.opengroove.com/blog/?p=358</guid>
		<description><![CDATA[Webアプリケーションやクライアントサーバ型のシステム開発の中で性能要件を満たすために負荷試験やロード試験といわれる工程がある。

重要な工程として考えているが、スケジュールの厳しいプロジェクトなどでは後回しにされることがあった。
特に、開発が遅れている場合、要件を満たすための開発が重視されることは理解しているが、負荷試験を実施することは同じくらい大切な工程である。試験で起こることは当然、本番環境でも起こり、あとで痛い目をみないためにも必須の工程である。

負荷試験を設計する上での考え方をまとめてみたいと思う。 以下のサイトが参考になる。


    理論的・計画的なWebアプリケーションのテストの実現：第4回　テストを設計するには（その2） (1/2) &#8211; ITmedia エンタープライズ


負荷試験とは

構築するシステムがどの程度の負荷に耐えられるかを測定し、システムの信頼性と耐用範囲を明確にする。ウェブアプリケーションの場合、同時アクセスユーザ数をどれだけ処理出来るか、閾値を越えた場合のシステムの振る舞いを検証する試験である。

負荷試験で使われる試験環境は本番環境と同一であることが望ましい。しかし、実際には機器調達が難しいことが多い（例えば、想定している分だけのクライアントマシンを用意する等）。機器が準備できない場合、サーバに負荷を発生させるツール等を使用し、高負荷、過負荷を与え、システムの振舞いについて検証する。

負荷試験の計画（設計）に必要なこと
負荷試験を計画するときに最低限、考えなければいけないことを説明したい。

前提条件

試験を実施するときの試験環境について、サーバの役割、台数、クライアント数、負荷をかける時間等の環境について条件を明確化しておく必要がある。

監視ポイント

例えば、Webアプリケーションの場合、クライアントがアクセスしトップページが表示されるまでの時間。など要件を満たすために必要な監視ポイントを明確にしておく必要がある。サーバサイドではDBに対する大量のI/O（書込、読み出し等）がそれにあたると思われる。

目的と対象範囲

負荷試験でクリアしなければいけない要件、ユーザ数などの試験の目的と対象範囲/ハード情報(各サーバのOS情報/CPU/DISK IO/MEMORY/NETWORK)、過負荷時の測定範囲を明確にする。

性能要件（目標値）

想定されるクライアント数から性能要件を予測し、定義する。レスポンス時間等の試験項目から測定可能な数値を予測する。
例えば年に1度のみ過負荷が発生するといった事象に合わせてシステムを組んだ場合、性能要件は十分であるが、コスト面で満足するものにはならない場合がある。そのため、要件にあった目標値を設定することは重要である。

想定シナリオ

構築するシステムの利用シーンを考えたシナリオを作成する。試験実施はそのシナリオに沿って行われるべきである。
例えば、メールクライアントの場合、社員が出社する時間(09:00頃)が大量のアクセスが発生する、など。その利用シーンをシナリオに組み込む。

実施方法

市販のツールを利用する、自作ツールを利用する、など目標値を達成するためには過負荷状態を作らなければいけない。疑似的に過負荷状態を作り出す必要がある。Webアプリケーションに限定されるが無料ですばらしいツールが多く提供されている。


    ＠IT：JMeterによるWebサーバ性能評価の勘所（1/3）
    The Jakarta Site &#8211; The Jakarta Project &#8212; Java Related Products
    JMeter(高機能/フリーなテストツール)第1回：JMeterの基本


試験結果

負荷試験計画時の「目的と対象範囲」を達成したかどうか、
実測値が予測値より悪い場合や、目標値ギリギリの場合、チューニングを実施することになる。
問題点の原因については、計測データなどを使って


     トランザクション数/クライアント数が増加しているとき、スループットの増加傾向が変化した時点
     レスポンスタイムが急速に遅くなった点


分析するポイントとして、システムの測定値が急激に変化したとき、関連するモジュールがボトルネックと考えられる。
チューニングについては、そのようなボトルネックと予測されるモジュールから優先的に検証する必要がある。

以上のような点について、負荷試験の計画フェーズで考えておけば良いのではないかと考える。
負荷試験が実施されるのはシステムが構築され、結合試験も終わった以降になる。一番忙しいフェーズであるが
負荷試験の重要性を説明し、しっかりと計画をして実施していきたいと思う。
]]></description>
			<content:encoded><![CDATA[<p>Webアプリケーションやクライアントサーバ型のシステム開発の中で性能要件を満たすために負荷試験やロード試験といわれる工程がある。</p>

<p>重要な工程として考えているが、スケジュールの厳しいプロジェクトなどでは後回しにされることがあった。
特に、開発が遅れている場合、要件を満たすための開発が重視されることは理解しているが、負荷試験を実施することは同じくらい大切な工程である。試験で起こることは当然、本番環境でも起こり、あとで痛い目をみないためにも必須の工程である。</p>

<p>負荷試験を設計する上での考え方をまとめてみたいと思う。 以下のサイトが参考になる。</p>

<ul>
    <li><a title="理論的・計画的なWebアプリケーションのテストの実現：第4回　テストを設計するには" href="http://www.itmedia.co.jp/enterprise/articles/0502/24/news070.html">理論的・計画的なWebアプリケーションのテストの実現：第4回　テストを設計するには（その2） (1/2) &#8211; ITmedia エンタープライズ</a></li>
</ul>

<h3>負荷試験とは</h3>

<p>構築するシステムがどの程度の負荷に耐えられるかを測定し、システムの信頼性と耐用範囲を明確にする。ウェブアプリケーションの場合、同時アクセスユーザ数をどれだけ処理出来るか、閾値を越えた場合のシステムの振る舞いを検証する試験である。</p>

<p>負荷試験で使われる試験環境は本番環境と同一であることが望ましい。しかし、実際には機器調達が難しいことが多い（例えば、想定している分だけのクライアントマシンを用意する等）。機器が準備できない場合、サーバに負荷を発生させるツール等を使用し、高負荷、過負荷を与え、システムの振舞いについて検証する。</p>

<p>負荷試験の計画（設計）に必要なこと
負荷試験を計画するときに最低限、考えなければいけないことを説明したい。</p>

<h4>前提条件</h4>

<p>試験を実施するときの試験環境について、サーバの役割、台数、クライアント数、負荷をかける時間等の環境について条件を明確化しておく必要がある。</p>

<h4>監視ポイント</h4>

<p>例えば、Webアプリケーションの場合、クライアントがアクセスしトップページが表示されるまでの時間。など要件を満たすために必要な監視ポイントを明確にしておく必要がある。サーバサイドではDBに対する大量のI/O（書込、読み出し等）がそれにあたると思われる。</p>

<h4>目的と対象範囲</h4>

<p>負荷試験でクリアしなければいけない要件、ユーザ数などの試験の目的と対象範囲/ハード情報(各サーバのOS情報/CPU/DISK IO/MEMORY/NETWORK)、過負荷時の測定範囲を明確にする。</p>

<h4>性能要件（目標値）</h4>

<p>想定されるクライアント数から性能要件を予測し、定義する。レスポンス時間等の試験項目から測定可能な数値を予測する。
例えば年に1度のみ過負荷が発生するといった事象に合わせてシステムを組んだ場合、性能要件は十分であるが、コスト面で満足するものにはならない場合がある。そのため、要件にあった目標値を設定することは重要である。</p>

<h4>想定シナリオ</h4>

<p>構築するシステムの利用シーンを考えたシナリオを作成する。試験実施はそのシナリオに沿って行われるべきである。
例えば、メールクライアントの場合、社員が出社する時間(09:00頃)が大量のアクセスが発生する、など。その利用シーンをシナリオに組み込む。</p>

<h4>実施方法</h4>

<p>市販のツールを利用する、自作ツールを利用する、など目標値を達成するためには過負荷状態を作らなければいけない。疑似的に過負荷状態を作り出す必要がある。Webアプリケーションに限定されるが無料ですばらしいツールが多く提供されている。</p>

<ul>
    <li><a title="＠IT：JMeterによるWebサーバ性能評価の勘所（1/3）" href="http://www.atmarkit.co.jp/flinux/rensai/apache2_02/apache02a.html">＠IT：JMeterによるWebサーバ性能評価の勘所（1/3）</a></li>
    <li><a title="The Jakarta Site - The Jakarta Project" href="http://jakarta.apache.org/">The Jakarta Site &#8211; The Jakarta Project &#8212; Java Related Products</a></li>
    <li><a title="JMeter(高機能/フリーなテストツール)第1回：JMeterの基本" href="http://www.stackasterisk.jp/tech/engineer/jmeter01_01.jsp">JMeter(高機能/フリーなテストツール)第1回：JMeterの基本</a></li>
</ul>

<h4>試験結果</h4>

<p>負荷試験計画時の「目的と対象範囲」を達成したかどうか、
実測値が予測値より悪い場合や、目標値ギリギリの場合、チューニングを実施することになる。
問題点の原因については、計測データなどを使って</p>

<ul>
    <li> トランザクション数/クライアント数が増加しているとき、スループットの増加傾向が変化した時点</li>
    <li> レスポンスタイムが急速に遅くなった点</li>
</ul>

<p>分析するポイントとして、システムの測定値が急激に変化したとき、関連するモジュールがボトルネックと考えられる。
チューニングについては、そのようなボトルネックと予測されるモジュールから優先的に検証する必要がある。</p>

<p>以上のような点について、負荷試験の計画フェーズで考えておけば良いのではないかと考える。
負荷試験が実施されるのはシステムが構築され、結合試験も終わった以降になる。一番忙しいフェーズであるが
負荷試験の重要性を説明し、しっかりと計画をして実施していきたいと思う。</p>
]]></content:encoded>
			<wfw:commentRss>http://labo.opengroove.com/blog/2009/08/17/%e8%b2%a0%e8%8d%b7%e8%a9%a6%e9%a8%93%e3%81%ae%e8%80%83%e3%81%88%e6%96%b9%ef%bc%88%e3%81%8a%e5%ae%a2%e6%a7%98%e3%81%b8%e8%aa%ac%e6%98%8e%e3%81%99%e3%81%b9%e3%81%8d%e3%81%93%e3%81%a8%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>プロキシサーバー pound を使うときに注意すること</title>
		<link>http://labo.opengroove.com/blog/2008/10/15/%e3%83%97%e3%83%ad%e3%82%ad%e3%82%b7%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc-pound-%e3%82%92%e4%bd%bf%e3%81%86%e3%81%a8%e3%81%8d%e3%81%ab%e6%b3%a8%e6%84%8f%e3%81%99%e3%82%8b%e3%81%93%e3%81%a8/</link>
		<comments>http://labo.opengroove.com/blog/2008/10/15/%e3%83%97%e3%83%ad%e3%82%ad%e3%82%b7%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc-pound-%e3%82%92%e4%bd%bf%e3%81%86%e3%81%a8%e3%81%8d%e3%81%ab%e6%b3%a8%e6%84%8f%e3%81%99%e3%82%8b%e3%81%93%e3%81%a8/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 03:06:28 +0000</pubDate>
		<dc:creator>sugimoto</dc:creator>
				<category><![CDATA[pound]]></category>
		<category><![CDATA[proxy]]></category>

		<guid isPermaLink="false">http://labo.opengroove.com/blog/index.php/2008/10/15/%e3%83%97%e3%83%ad%e3%82%ad%e3%82%b7%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc-pound-%e3%82%92%e4%bd%bf%e3%81%86%e3%81%a8%e3%81%8d%e3%81%ab%e6%b3%a8%e6%84%8f%e3%81%99%e3%82%8b%e3%81%93%e3%81%a8/</guid>
		<description><![CDATA[とあるプロジェクトで、オープンソースのプロキシサーバ「pound」を使いました。

その中で、気になったことなどをメモしておきます。

設定は簡単

特にSSLの設定は非常に楽です。
設定ファイルの書き方も明快でわかりやすいのでメンテナンス上も良いです。

バックエンドのWebサーバーはクライアントIPアドレスが変わる

バックエンドではクライアントIPアドレスがプロキシサーバーのアドレスとなるため、バックエンドのウェブサーバー(今回はapache)でログのフォーマットを修正する必要がありました。
X-Forwarded-For にクライアントIPアドレスは渡されるため、Webサーバーではこの値をログするように変更しました。

ログの出力方法によってパフォーマンスに影響がある

Poundのログはdefaultでsyslogに出力することができます。ただ、この設定をするとパフォーマンスが目に見えて悪くなりました。
LogFacilityを &#8211; に設定するとログは標準出力なります。
 1. ログ出力なし
 2. 標準出力
 3. syslogに出力
上記の3つの設定では3番の方法で極端にパフォーマンスの低下が見られました。

そのため、今回はPoundのログは標準出力にしました。

クライアントIPアドレスでのフィルタはできない

プロキシサーバーを使う前は、特定のIPアドレスに対してapacheでDenyの設定をしていましたが、この方法は使えなくなりました。
 &#8211; iptables で設定
 &#8211; アプリケーションで設定

と考えられましたが、今回はアプリケーションに実装する予定です。

設定ファイルのリロードはできない

設定ファイルを書き換えた場合、反映するためにはreload ではなく、 restartが必要となります。(reloadは無い)
今回のシステムでは瞬間的な停止は許容範囲のため、そのまま運用しています。

導入までの手間は非常に少なかったのですが、細かい設定ができないのでした。
]]></description>
			<content:encoded><![CDATA[<p>とあるプロジェクトで、オープンソースのプロキシサーバ「<a href="http://www.apsis.ch/pound/">pound</a>」を使いました。</p>

<p>その中で、気になったことなどをメモしておきます。</p>

<h3>設定は簡単</h3>

<p>特にSSLの設定は非常に楽です。
設定ファイルの書き方も明快でわかりやすいのでメンテナンス上も良いです。</p>

<h3>バックエンドのWebサーバーはクライアントIPアドレスが変わる</h3>

<p>バックエンドではクライアントIPアドレスがプロキシサーバーのアドレスとなるため、バックエンドのウェブサーバー(今回はapache)でログのフォーマットを修正する必要がありました。
X-Forwarded-For にクライアントIPアドレスは渡されるため、Webサーバーではこの値をログするように変更しました。</p>

<h3>ログの出力方法によってパフォーマンスに影響がある</h3>

<p>Poundのログはdefaultでsyslogに出力することができます。ただ、この設定をするとパフォーマンスが目に見えて悪くなりました。
LogFacilityを &#8211; に設定するとログは標準出力なります。
 1. ログ出力なし
 2. 標準出力
 3. syslogに出力
上記の3つの設定では3番の方法で極端にパフォーマンスの低下が見られました。</p>

<p>そのため、今回はPoundのログは標準出力にしました。</p>

<h3>クライアントIPアドレスでのフィルタはできない</h3>

<p>プロキシサーバーを使う前は、特定のIPアドレスに対してapacheでDenyの設定をしていましたが、この方法は使えなくなりました。
 &#8211; iptables で設定
 &#8211; アプリケーションで設定</p>

<p>と考えられましたが、今回はアプリケーションに実装する予定です。</p>

<h3>設定ファイルのリロードはできない</h3>

<p>設定ファイルを書き換えた場合、反映するためにはreload ではなく、 restartが必要となります。(reloadは無い)
今回のシステムでは瞬間的な停止は許容範囲のため、そのまま運用しています。</p>

<p>導入までの手間は非常に少なかったのですが、細かい設定ができないのでした。</p>
]]></content:encoded>
			<wfw:commentRss>http://labo.opengroove.com/blog/2008/10/15/%e3%83%97%e3%83%ad%e3%82%ad%e3%82%b7%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc-pound-%e3%82%92%e4%bd%bf%e3%81%86%e3%81%a8%e3%81%8d%e3%81%ab%e6%b3%a8%e6%84%8f%e3%81%99%e3%82%8b%e3%81%93%e3%81%a8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CouchDBのproxy serverにlighttpdを使う。</title>
		<link>http://labo.opengroove.com/blog/2008/03/04/couchdb%e3%81%aeproxy-server%e3%81%ablighttpd%e3%82%92%e4%bd%bf%e3%81%86%e3%80%82/</link>
		<comments>http://labo.opengroove.com/blog/2008/03/04/couchdb%e3%81%aeproxy-server%e3%81%ablighttpd%e3%82%92%e4%bd%bf%e3%81%86%e3%80%82/#comments</comments>
		<pubDate>Tue, 04 Mar 2008 05:46:56 +0000</pubDate>
		<dc:creator>sugimoto</dc:creator>
				<category><![CDATA[couchdb]]></category>
		<category><![CDATA[lighttpd]]></category>

		<guid isPermaLink="false">http://labo.opengroove.com/blog/index.php/2008/03/04/couchdb%e3%81%aeproxy-server%e3%81%ablighttpd%e3%82%92%e4%bd%bf%e3%81%86%e3%80%82/</guid>
		<description><![CDATA[はじめまして、sugimotoです。

このBlogの初めての記事になります。
何を書こうか迷ったのですが、今回は最近使っているCouchDBをlighttpdをproxy serverとして設定したときの手順のメモを書きます。
Apache をproxyにした場合の設定はCouchDBのインストール方法にあります。

自分の環境はDebianだったので、Debianでの設定となります。

1. lighttpdのインストール

インストールチュートリアルにある通り、yum, apt-getのようなパッケージマネージャでインストールできます。

日本語のチュートリアルも検索するとたくさんあり、参考になります。

インストールが終わったら、http://localhost/ でlighttpdのトップページが見えるか確認します。

2. CouchDBのインストール

こちらも、チュートリアルにあるとおり apt-get できます。
インストールすると、全てのファイルが /usr/local/ 以下にできてしまうので、log を /var/log/ に移したいときは設定を変更します。

CouchDB用のlog directoryを作成

&#62; sudo mkdir /var/log/couchdb
&#62; chown couchdb /var/log/couchdb

couch_httpd.conf を変更

ErrorLog /var/log/couchdb/http_error.log  # 作成したdirectoryに変更
TransferLog /var/log/couchdb/http_access.log # 作成したdirectoryに変更

couch.ini を変更

LogFile=/var/log/couchdb/couch.log    ; 作成したdirectoryに変更

CouchDBがインストールできたら、トップページ画面 http://localhost:5984/ にアクセスしてインストールを確認します。

{"couchdb": "Welcome", "version": "0.7.2"}

とJSON形式のwelcomeメッセージとversionが表示されました。

3. データベースの作成

今回設定するデータベースを作成します。

ToDoリストを作ろうと思ったので、管理画面 http://localhost:5984/_utils/ から todo というデータベースを作りました。

4. lighttpd.conf の設定

http://localhost/todo/ でCouchDBにアクセスするため、lighttpd.conf でproxyの設定をします。
xxx.xxx.xxx.xxx はサーバのIPアドレスです

$HTTP["url"] =~ "^/todo/" {
   [...]]]></description>
			<content:encoded><![CDATA[<p>はじめまして、sugimotoです。</p>

<p>このBlogの初めての記事になります。
何を書こうか迷ったのですが、今回は最近使っているCouchDBをlighttpdをproxy serverとして設定したときの手順のメモを書きます。
Apache をproxyにした場合の設定は<a href="http://www.couchdbwiki.com/index.php?title=Installation">CouchDBのインストール方法</a>にあります。</p>

<p>自分の環境はDebianだったので、Debianでの設定となります。</p>

<h3>1. lighttpdのインストール</h3>

<p><a href="http://trac.lighttpd.net/trac/wiki/TutorialInstallation">インストールチュートリアル</a>にある通り、yum, apt-getのようなパッケージマネージャでインストールできます。</p>

<p>日本語のチュートリアルも検索するとたくさんあり、参考になります。</p>

<p>インストールが終わったら、http://localhost/ でlighttpdのトップページが見えるか確認します。</p>

<h3>2. CouchDBのインストール</h3>

<p>こちらも、<a href="http://www.couchdbwiki.com/index.php?title=Installation">チュートリアル</a>にあるとおり apt-get できます。
インストールすると、全てのファイルが /usr/local/ 以下にできてしまうので、log を /var/log/ に移したいときは設定を変更します。</p>

<p>CouchDB用のlog directoryを作成</p>

<pre>&gt; sudo mkdir /var/log/couchdb
&gt; chown couchdb /var/log/couchdb</pre>

<p>couch_httpd.conf を変更</p>

<pre>ErrorLog /var/log/couchdb/http_error.log  # 作成したdirectoryに変更
TransferLog /var/log/couchdb/http_access.log # 作成したdirectoryに変更</pre>

<p>couch.ini を変更</p>

<pre>LogFile=/var/log/couchdb/couch.log    ; 作成したdirectoryに変更</pre>

<p>CouchDBがインストールできたら、トップページ画面 http://localhost:5984/ にアクセスしてインストールを確認します。</p>

<pre>{"couchdb": "Welcome", "version": "0.7.2"}</pre>

<p>とJSON形式のwelcomeメッセージとversionが表示されました。</p>

<h3>3. データベースの作成</h3>

<p>今回設定するデータベースを作成します。</p>

<p>ToDoリストを作ろうと思ったので、管理画面 http://localhost:5984/_utils/ から todo というデータベースを作りました。</p>

<h3>4. lighttpd.conf の設定</h3>

<p>http://localhost/todo/ でCouchDBにアクセスするため、lighttpd.conf でproxyの設定をします。
xxx.xxx.xxx.xxx はサーバのIPアドレスです</p>

<pre>$HTTP["url"] =~ "^/todo/" {
    proxy.server = ( "" =&gt; (( 
        "host" =&gt; "xxx.xxx.xxx.xxx", 
        "port" =&gt; 5984 )))
}</pre>

<h3>5. 確認</h3>

<p>最後に http://localhost/todo/ を表示して、設定の確認。</p>

<pre>{"db_name": "todo", "doc_count":0, "update_seq":0}</pre>

<p>こちらもJSON形式でデータが表示されました。</p>

<p>参考リンク:</p>

<ul>
    <li>CouchDB : <a href="http://www.couchdb.com/">プロジェクトのホームページ</a></li>
    <li>lighttpd : <a href="http://www.lighttpd.net/">プロジェクトのホームページ</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://labo.opengroove.com/blog/2008/03/04/couchdb%e3%81%aeproxy-server%e3%81%ablighttpd%e3%82%92%e4%bd%bf%e3%81%86%e3%80%82/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
