<?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>へびにっき &#187; Apache</title>
	<atom:link href="http://wp.serpere.info/archives/tag/apache/feed" rel="self" type="application/rss+xml" />
	<link>http://wp.serpere.info</link>
	<description>樹上で暮らすヘビのように生きたい</description>
	<lastBuildDate>Thu, 09 Feb 2012 11:35:51 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>mod_dosdetector-forkをApache 2.0で動かす</title>
		<link>http://wp.serpere.info/archives/2419</link>
		<comments>http://wp.serpere.info/archives/2419#comments</comments>
		<pubDate>Sat, 12 Nov 2011 01:57:30 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[mod_dosdetector]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=2419</guid>
		<description><![CDATA[今更ながら、mod_dosdetector-forkをApache 2.0で動かすための方法をまとめておく。少しだけソースコードを編集する必要がある。 必要なもの： mod_dosdetector-forkのapache-2.0ブランチ Apache 2.2 のソースコード Download &#8211; The Apache HTTP Server Project ソースコードを編集するためのエディタ（手動で編集する場合） Linux（他のUNIX系のOSでも動くかも） 一応、自動で編集するスクリプトも作ってみたが、先に手動で編集する場合の手順をざっと説明しておく。 手順1. mod_dosdetector.c をエディタで開き、/* code for apache 2.0 */ というコメントが書いてある部分に次の1行を書き加える。 #include &#34;apache20.h&#34; 手順2. Apache 2.2のソースを展開して srclib/apr/shmem/unix/shm.c をエディタで開き、関数apr_shm_removeの定義部分をコピーして、手順1で編集した部分の直後にペーストする。最終的にこんな感じになる。 /* code for apache 2.0 */ #include &#34;apache20.h&#34; APR_DECLARE&#40;apr_status_t&#41; apr_shm_remove&#40;const char *filename, apr_pool_t *pool&#41; &#123; //..略.. &#125; 以上で必要な編集作業は終わり。ここまでの手順を自動化するスクリプトがapache20.plという名前で入っているので、これを実行してもいい。 # 展開したApache 2.2のソースディレクトリを指定する perl [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F2419%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22mod_dosdetector-fork%E3%82%92Apache%202.0%E3%81%A7%E5%8B%95%E3%81%8B%E3%81%99%22%20%7D);"></div>
<p>
今更ながら、<a href="https://github.com/tkyk/mod_dosdetector-fork">mod_dosdetector-fork</a>をApache 2.0で動かすための方法をまとめておく。少しだけソースコードを編集する必要がある。
</p>
<p>
必要なもの：
</p>
<ul> 
<li>mod_dosdetector-forkの<a href="https://github.com/tkyk/mod_dosdetector-fork/tree/apache-2.0">apache-2.0ブランチ</a></li>
<li>Apache 2.2 のソースコード <a href="http://httpd.apache.org/download.cgi">Download &#8211; The Apache HTTP Server Project</a></li>
<li>ソースコードを編集するためのエディタ（手動で編集する場合）</li>
<li>Linux（他のUNIX系のOSでも動くかも）</li>
</ul>
<p>
一応、自動で編集するスクリプトも作ってみたが、先に手動で編集する場合の手順をざっと説明しておく。
</p>
<h3>手順1.</h3>
<p>
mod_dosdetector.c をエディタで開き、<code>/* code for apache 2.0 */</code> というコメントが書いてある部分に次の1行を書き加える。
</p>


<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &quot;apache20.h&quot;</span></pre></div></div>



<h3>手順2.</h3>
<p>
Apache 2.2のソースを展開して srclib/apr/shmem/unix/shm.c をエディタで開き、関数apr_shm_removeの定義部分をコピーして、手順1で編集した部分の直後にペーストする。最終的にこんな感じになる。
</p>


<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/* code for apache 2.0 */</span>
<span style="color: #339933;">#include &quot;apache20.h&quot;</span>
APR_DECLARE<span style="color: #009900;">&#40;</span>apr_status_t<span style="color: #009900;">&#41;</span> apr_shm_remove<span style="color: #009900;">&#40;</span><span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>filename<span style="color: #339933;">,</span>
                                         apr_pool_t <span style="color: #339933;">*</span>pool<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #666666; font-style: italic;">//..略..</span>
<span style="color: #009900;">&#125;</span></pre></div></div>



<p>
以上で必要な編集作業は終わり。ここまでの手順を自動化するスクリプトがapache20.plという名前で入っているので、これを実行してもいい。
</p>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># 展開したApache 2.2のソースディレクトリを指定する</span>
<span style="color: #c20cb9; font-weight: bold;">perl</span> apache20.pl path<span style="color: #000000; font-weight: bold;">/</span>to<span style="color: #000000; font-weight: bold;">/</span>httpd-<span style="color: #000000;">2.2</span>.x</pre></div></div>



<p>
あとは通常通りのインストール手順でOK。
</p>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#apxsが/usr/sbinに入っている場合</span>
<span style="color: #666666; font-style: italic;">#コンパイル</span>
<span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #007800;">PATH</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin:<span style="color: #007800;">$PATH</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#インストール</span>
<span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #007800;">PATH</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin:<span style="color: #007800;">$PATH</span> <span style="color: #c20cb9; font-weight: bold;">install</span></pre></div></div>



<p>
動作確認は次の環境で行った。
</p>
<ul>
<li>ソースコードのコピー元: Apache 2.2.21</li>
<li>動作: Apache 2.0.64 on CentOS 5</li>
<li>動作: Apache 2.0.52 on CentOS 4</li>
</ul>
<p>
今後どの程度メンテナンスを行っていくかは不明なので、そこは予めご了承いただきたい。あと2.2側のコード変更によっては自動化スクリプトは動かなくなる可能性があるので、そのときは適宜手動で対応のこと。
</p>
]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/2419/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>nginxでメンテナンス中画面を表示する</title>
		<link>http://wp.serpere.info/archives/2145</link>
		<comments>http://wp.serpere.info/archives/2145#comments</comments>
		<pubDate>Thu, 07 Apr 2011 14:48:26 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[サーバ管理]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=2145</guid>
		<description><![CDATA[どのURLにアクセスされてもステータスコード503を返して /home/www/maintenance.html を表示する設定。 server { server_name your.hostname; error_page 503 /maintenance.html; location / { return 503; } location = /maintenance.html { root /home/www; } } 同等の設定をApache(>=2.2)で書くと次のようになる。 &#60;VirtualHost *:80&#62; ServerName your.hostname DocumentRoot /home/www &#160; RewriteEngine On RewriteCond %{REQUEST_URI} !=/maintenance.html RewriteRule .* - [R=503] &#160; ErrorDocument 503 /maintenance.html &#60;/VirtualHost&#62;]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F2145%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22nginx%E3%81%A7%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9%E4%B8%AD%E7%94%BB%E9%9D%A2%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%22%20%7D);"></div>
<p>
どのURLにアクセスされてもステータスコード503を返して /home/www/maintenance.html を表示する設定。
</p>
<pre>
server {
    server_name  your.hostname; 
    error_page 503 /maintenance.html; 
    location / { 
        return 503;
    }
    location = /maintenance.html {
        root /home/www;
    }
}
</pre>
<p>
同等の設定をApache(>=2.2)で書くと次のようになる。
</p>


<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;">&lt;<span style="color: #000000; font-weight:bold;">VirtualHost</span> *:<span style="color: #ff0000;">80</span>&gt;
    <span style="color: #00007f;">ServerName</span> your.hostname
    <span style="color: #00007f;">DocumentRoot</span> /home/www
&nbsp;
    <span style="color: #00007f;">RewriteEngine</span> <span style="color: #0000ff;">On</span>
    <span style="color: #00007f;">RewriteCond</span> %{REQUEST_URI} !=/maintenance.html
    <span style="color: #00007f;">RewriteRule</span> .* - [R=<span style="color: #ff0000;">503</span>]
&nbsp;
    <span style="color: #00007f;">ErrorDocument</span> <span style="color: #ff0000;">503</span> /maintenance.html
&lt;/<span style="color: #000000; font-weight:bold;">VirtualHost</span>&gt;</pre></div></div>



]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/2145/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHPで特定のコントローラに対するBasic認証をApache側でかけようとしたが無理だった</title>
		<link>http://wp.serpere.info/archives/1883</link>
		<comments>http://wp.serpere.info/archives/1883#comments</comments>
		<pubDate>Tue, 16 Nov 2010 11:48:08 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Apache]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=1883</guid>
		<description><![CDATA[2010-11-17: 記事のタイトル・内容を修正しました。最終的に、Cakeの特定のコントローラにApache側で認証をかけることは不可能という結論に至りましたので、「なぜ不可能なのか」を説明する内容に差し替えました。コメント欄にて重要な指摘をくださったshin1x1さんに感謝します。 CakePHP 1.2/1.3 CakePHPで特定のコントローラ（URL）に対して、Apacheの機能を使ってBasic認証をかけようとして、実際にその方法を見つけたとして記事を公開したのですが、無理だということに気がつきました。 Cakeは最終的に $_GET['url'] しか見ていないので、一つでも認証無しでアクセス可能なコントローラ/アクションが存在すれば、 /controller/action?url=/protected というパラメータを使うことで任意のURL（上では /protected）に対して認証無しでアクセスできてしまいます。 以下に私が使おうとしていた .htaccess のコードを示しておきます。これは同じようなアイデアを思いついた人に対して、このような方法では無理だということを示すためのものなので、決して使用しないでください。 # Basic認証の設定 AuthType Basic AuthName "Members only" AuthUserFile /path/to/.htpasswd Require valid-user # 認証対象となるURLの指定 SetEnvIf Request_URI ".*" allowed SetEnvIf Request_URI "^/members" !allowed # !INSERTED! /index.php に直接アクセスするのを許可しない SetEnvIf Request_URI "^/index\.php" !allowed # 認証をバイパスさせるための設定 Order Deny,Allow Deny from all Allow from env=allowed Satisfy Any [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F1883%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22CakePHP%E3%81%A7%E7%89%B9%E5%AE%9A%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%81%AB%E5%AF%BE%E3%81%99%E3%82%8BBasic%E8%AA%8D%E8%A8%BC%E3%82%92Apache%E5%81%B4%E3%81%A7%E3%81%8B%E3%81%91%E3%82%88%E3%81%86%E3%81%A8%E3%81%97%E3%81%9F%E3%81%8C%E7%84%A1%E7%90%86%E3%81%A0%E3%81%A3%E3%81%9F%22%20%7D);"></div>
<p>
<strong>2010-11-17:</strong> 記事のタイトル・内容を修正しました。最終的に、Cakeの特定のコントローラにApache側で認証をかけることは<strong style="color:red">不可能</strong>という結論に至りましたので、「なぜ不可能なのか」を説明する内容に差し替えました。コメント欄にて重要な指摘をくださったshin1x1さんに感謝します。
</p>
<p>
CakePHP 1.2/1.3
</p>
<p>
CakePHPで特定のコントローラ（URL）に対して、Apacheの機能を使ってBasic認証をかけようとして、実際にその方法を見つけたとして記事を公開したのですが、無理だということに気がつきました。
</p>
<p>
Cakeは最終的に <code>$_GET['url']</code> しか見ていないので、一つでも認証無しでアクセス可能なコントローラ/アクションが存在すれば、
</p>
<pre>
/controller/action?url=/protected
</pre>
<p>
というパラメータを使うことで任意のURL（上では /protected）に対して認証無しでアクセスできてしまいます。
</p>
<p>
以下に私が使おうとしていた .htaccess のコードを示しておきます。これは同じようなアイデアを思いついた人に対して、<strong>このような方法では無理だ</strong>ということを示すためのものなので、決して使用しないでください。
</p>
<pre>
# Basic認証の設定
AuthType Basic
AuthName "Members only"
AuthUserFile /path/to/.htpasswd
Require valid-user
 
# 認証対象となるURLの指定
SetEnvIf Request_URI ".*" allowed
SetEnvIf Request_URI "^/members" !allowed
# !INSERTED! /index.php に直接アクセスするのを許可しない
SetEnvIf Request_URI "^/index\.php" !allowed
 
# 認証をバイパスさせるための設定
Order Deny,Allow
Deny from all
Allow from env=allowed
Satisfy Any
 
# 通常のCakeのrewrite設定
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</pre>
<p>
なおこの記事は以下のブログ記事を参考にして書きましたが、同様の問題が存在すると考えられますので注意してください。
</p>
<ul>
<li><a href="http://d.hatena.ne.jp/cakephper/20100224/1266998300">Cakephpで任意のコントローラにBASIC認証をApache側でかける &#8211; cakephperの日記</a></li>
<li><a href="http://d.hatena.ne.jp/u1tnk/20100610/1276231952">apacheでmod_rewrite+Basic認証時に特定パスのみ認証を解除する &#8211; u1tnk日記</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/1883/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>mod_rewriteを使ってドキュメントルートを分割する</title>
		<link>http://wp.serpere.info/archives/1312</link>
		<comments>http://wp.serpere.info/archives/1312#comments</comments>
		<pubDate>Fri, 04 Jun 2010 15:38:35 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[CakePHP]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=1312</guid>
		<description><![CDATA[（特にCakePHPに限定される話題ではありませんが、CakePHPの.htaccessを例に説明します） 通常、Webアプリケーションを構成するファイルは全てソースコード管理システムの管理下に置き、何らかのデプロイツールを用いて本番環境に転送します。本番環境でファイルを直接編集することはしません。 しかし時には一部の画像ファイルやCSSファイルを管理から除外して、自由に編集できるようにしたい場合があります。そういう場合は mod_rewrite を活用して、本来のドキュメントルートの他にもう一つ別のディレクトリを実質的なドキュメントルートとして割り当てることで、高い柔軟性を持たせることができます。 前提 CakePHPで構築したアプリケーションが /var/www/cake にあり、ドキュメントルートは /var/www/cake/app/webroot である。CakePHPデフォルトの .htaccess は次の通り。 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] やりたいこと /home/files/public に置いたファイルに対して、あたかもドキュメントルートに置いたかのようにアクセスさせたい。 例） /home/files/public/css/main.css に対して http://example.com/css/main.css でアクセスできる。 シンボリックリンクの作成とmod_rewriteの設定 まずドキュメントルート内に /home/files/public に対するシンボリックリンクを適当な名前で作成します。当該ディレクトリに対して Options FollowSymlinks の権限が必要です。 ln -s /home/files/public /var/www/cake/app/webroot/__files 次に mod_rewrite の設定を追加します。 RewriteEngine On RewriteCond %{DOCUMENT_ROOT}/__files/%{REQUEST_URI} -d [OR] RewriteCond %{DOCUMENT_ROOT}/__files/%{REQUEST_URI} -f RewriteRule [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F1312%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FamKZMm%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22mod_rewrite%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E3%83%AB%E3%83%BC%E3%83%88%E3%82%92%E5%88%86%E5%89%B2%E3%81%99%E3%82%8B%22%20%7D);"></div>
<p>
（特にCakePHPに限定される話題ではありませんが、CakePHPの.htaccessを例に説明します）
</p>
<p>
通常、Webアプリケーションを構成するファイルは全てソースコード管理システムの管理下に置き、何らかのデプロイツールを用いて本番環境に転送します。本番環境でファイルを直接編集することはしません。
</p>
<p>
しかし時には一部の画像ファイルやCSSファイルを管理から除外して、自由に編集できるようにしたい場合があります。そういう場合は mod_rewrite を活用して、本来のドキュメントルートの他にもう一つ別のディレクトリを実質的なドキュメントルートとして割り当てることで、高い柔軟性を持たせることができます。
</p>
<h3>前提</h3>
<p>
CakePHPで構築したアプリケーションが /var/www/cake にあり、ドキュメントルートは /var/www/cake/app/webroot である。CakePHPデフォルトの .htaccess は次の通り。
</p>


<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">RewriteCond</span> %{REQUEST_FILENAME} !-d
<span style="color: #00007f;">RewriteCond</span> %{REQUEST_FILENAME} !-f
<span style="color: #00007f;">RewriteRule</span> ^(.*)$ index.php?url=$1 [QSA,L]</pre></div></div>



<h3>やりたいこと</h3>
<p>
/home/files/public に置いたファイルに対して、あたかもドキュメントルートに置いたかのようにアクセスさせたい。<br />
例） /home/files/public/css/main.css に対して http://example.com/css/main.css でアクセスできる。
</p>
<h3>シンボリックリンクの作成とmod_rewriteの設定</h3>
<p>
まずドキュメントルート内に /home/files/public に対するシンボリックリンクを適当な名前で作成します。当該ディレクトリに対して Options FollowSymlinks の権限が必要です。
</p>


<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">ln -s /home/files/public /var/www/cake/app/webroot/__files</pre></div></div>



<p>
次に mod_rewrite の設定を追加します。
</p>


<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">RewriteEngine</span> <span style="color: #0000ff;">On</span>
<span style="color: #00007f;">RewriteCond</span> %{DOCUMENT_ROOT}/__files/%{REQUEST_URI} -d [OR]
<span style="color: #00007f;">RewriteCond</span> %{DOCUMENT_ROOT}/__files/%{REQUEST_URI} -f
<span style="color: #00007f;">RewriteRule</span> ^(.+)$  __files/$1 [QSA,L]
&nbsp;
<span style="color: #00007f;">RewriteCond</span> %{REQUEST_FILENAME} !-d
<span style="color: #00007f;">RewriteCond</span> %{REQUEST_FILENAME} !-f
<span style="color: #00007f;">RewriteRule</span> ^(.*)$ index.php?url=$1 [QSA,L]</pre></div></div>



<p>
この方法ではシンボリックリンクを使っていますが、mod_rewrite の設定を httpd.conf に書く場合は Alias を使って実現することもできます。
</p>
<p>
いずれにせよまず /home/files/public の検索が行われ、次に /var/www/cake/app/webroot の検索が行われます。パスの衝突には十分な注意が必要です。あらかじめ管理外とするパスを固定しておけるのであれば、それがベストなのは言うまでもありません。
</p>
]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/1312/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mod_rewriteとPHP_SELFの関係</title>
		<link>http://wp.serpere.info/archives/734</link>
		<comments>http://wp.serpere.info/archives/734#comments</comments>
		<pubDate>Tue, 25 Aug 2009 03:11:28 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=734</guid>
		<description><![CDATA[mod_rewrite でURLを書き換える場合の PHP_SELF の値は、RewriteRule を .htaccess に書くか httpd.conf に書くかによって違ってくる。http://example.com/foo/bar を http://example.com/index.php に書き換える場合について例示すると以下のようになる。 .htaccessに書く場合 RewriteRule ^foo/bar$ index.php index.php でアクセスできるPHP_SELFの値は /index.php になる。 httpd.confに書く場合 RewriteRule ^/foo/bar$ /index.php index.php でアクセスできるPHP_SELFの値は /foo/bar になる。 フレームワークの中には .htaccess で書き換えることを前提としてパス処理を行っているものがあり（CakePHP 1.2など）、httpd.confで書き換えをする場合には何らかの回避策をとる必要がある。 (1) PTオプションを使用する RewriteRule に passthrough&#124;PT オプションを指定する。 RewriteRule ^/foo/bar$ /index.php [PT] このオプションを指定した場合、書き換え後のURLに対してAliasやRedirectの適用が行われるようになることに注意（元々そういった用途に使うためのオプション）。 (2) フレームワークレベルで設定する CakePHP 1.2の場合はindex.php内Dispacherクラスのコンストラクタ第２引数で、PHP_SELFに替わる基準パスを指定できる。 $Dispatcher = new Dispatcher&#40;null, ''&#41;; //空文字列でルートを意味する …… 技術的に言うとこれはURL書き換え時に [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F734%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22mod_rewrite%E3%81%A8PHP_SELF%E3%81%AE%E9%96%A2%E4%BF%82%22%20%7D);"></div>
<p>mod_rewrite でURLを書き換える場合の PHP_SELF の値は、RewriteRule を .htaccess に書くか httpd.conf に書くかによって違ってくる。http://example.com/foo/bar を http://example.com/index.php に書き換える場合について例示すると以下のようになる。</p>
<h3>.htaccessに書く場合</h3>


<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">RewriteRule</span> ^foo/bar$ index.php</pre></div></div>



<p>index.php でアクセスできるPHP_SELFの値は /index.php になる。</p>
<h3>httpd.confに書く場合</h3>


<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">RewriteRule</span> ^/foo/bar$ /index.php</pre></div></div>



<p>index.php でアクセスできるPHP_SELFの値は /foo/bar になる。</p>
<p>フレームワークの中には .htaccess で書き換えることを前提としてパス処理を行っているものがあり（CakePHP 1.2など）、httpd.confで書き換えをする場合には何らかの回避策をとる必要がある。</p>
<h3>(1) PTオプションを使用する</h3>
<p>RewriteRule に passthrough|PT オプションを指定する。</p>


<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">RewriteRule</span> ^/foo/bar$ /index.php [PT]</pre></div></div>



<p>このオプションを指定した場合、書き換え後のURLに対してAliasやRedirectの適用が行われるようになることに注意（元々そういった用途に使うためのオプション）。</p>
<h3>(2) フレームワークレベルで設定する</h3>
<p>CakePHP 1.2の場合はindex.php内Dispacherクラスのコンストラクタ第２引数で、PHP_SELFに替わる基準パスを指定できる。</p>


<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$Dispatcher</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Dispatcher<span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//空文字列でルートを意味する</span></pre></div></div>



<p>……</p>
<p>技術的に言うとこれはURL書き換え時に request_rec 構造体の uri メンバを書き換えるか否かの違い。.htaccess でURLを書き換えた場合は書き換え後のURLに対して internal-redirect が発生するらしく、結果として handler の中から書き換え後の uri が見えるようだ（RewriteLogから推測）。</p>

]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/734/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mod_dosdetector 改造一段落</title>
		<link>http://wp.serpere.info/archives/499</link>
		<comments>http://wp.serpere.info/archives/499#comments</comments>
		<pubDate>Sun, 31 May 2009 04:36:33 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[mod_dosdetector]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=499</guid>
		<description><![CDATA[mod_dosdetectorの改造は、先日の共有メモリ処理の改善をもって一段落。今後は実際に運用しながらバグを取りつつ、ドキュメントでも書きつつ、またオリジナルの mod_dosdetector に対するフィードバックも考えていこうと思う。 やり残したこと。 ディレクティブ有効範囲の矛盾の解消 mod_dosdetector はクライアント情報を管理するのに共有メモリを使用している。共有メモリ・セグメントはサーバ中に唯一つしか存在しないので、DoS判定の閾値や継続時間などの設定値も当然サーバ中で唯一になっているべきである。ところが実際には、ディレクティブはどこにでも（.htaccessにでも）何度でも書くことができる。 この矛盾した状況を解消するには、設定は全て httpd.conf のグローバルスコープにしか書けないように変更すれば良い。しかし「設定は一箇所にまとめておいてね！」という紳士規定によって得られる「どこにでも設定を書くことができる」というメリットを捨ててまで、そうする価値があるかと言われると…よく分からない。 Apache 2.0 対応 参考：mod_dosdetector を Apache 2.0 系で動かすパッチ こちらは技術的には特に難しくない。しかしきちんとした配布物としてまとめようとすると、途端に面倒くさくなる。というのも、2.0 に足りていない一部の機能を 2.2 のソースコードからバックポートしてくる必要があるために、ライセンス/ファイル構成/アーキテクチャ判定の面で一気に複雑になってしまうからだ。機能の本質とは関係のない部分で、そういった複雑さを持ち込むのは、やはり気が進まない。 （この点、mod_fcgid は Apache License に違反しているのではないだろうか…） これらやり残したことは、いつか良いアイデアが浮かんだら、取り組むつもり。]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F499%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22mod_dosdetector%20%E6%94%B9%E9%80%A0%E4%B8%80%E6%AE%B5%E8%90%BD%22%20%7D);"></div>
<p><a href="http://github.com/tkyk/mod_dosdetector-fork/tree/master">mod_dosdetectorの改造</a>は、先日の共有メモリ処理の改善をもって一段落。今後は実際に運用しながらバグを取りつつ、ドキュメントでも書きつつ、またオリジナルの mod_dosdetector に対するフィードバックも考えていこうと思う。</p>
<p>やり残したこと。</p>
<h3>ディレクティブ有効範囲の矛盾の解消</h3>
<p>mod_dosdetector はクライアント情報を管理するのに共有メモリを使用している。共有メモリ・セグメントはサーバ中に唯一つしか存在しないので、DoS判定の閾値や継続時間などの設定値も当然サーバ中で唯一になっているべきである。ところが実際には、ディレクティブはどこにでも（.htaccessにでも）何度でも書くことができる。</p>
<p>この矛盾した状況を解消するには、設定は全て httpd.conf のグローバルスコープにしか書けないように変更すれば良い。しかし「設定は一箇所にまとめておいてね！」という紳士規定によって得られる「どこにでも設定を書くことができる」というメリットを捨ててまで、そうする価値があるかと言われると…よく分からない。</p>
<h3>Apache 2.0 対応</h3>
<p>参考：<a href="http://blog.mizzy.org/articles/2007/07/26/mod_dosdetector_for_apache_20">mod_dosdetector を Apache 2.0 系で動かすパッチ</a></p>
<p>こちらは技術的には特に難しくない。しかしきちんとした配布物としてまとめようとすると、途端に面倒くさくなる。というのも、2.0 に足りていない一部の機能を 2.2 のソースコードからバックポートしてくる必要があるために、ライセンス/ファイル構成/アーキテクチャ判定の面で一気に複雑になってしまうからだ。機能の本質とは関係のない部分で、そういった複雑さを持ち込むのは、やはり気が進まない。</p>
<p>（この点、<a href="http://sourceforge.net/projects/mod-fcgid">mod_fcgid</a> は Apache License に違反しているのではないだろうか…）</p>
<p>これらやり残したことは、いつか良いアイデアが浮かんだら、取り組むつもり。</p>

]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/499/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>APR 共有メモリの初期化処理</title>
		<link>http://wp.serpere.info/archives/494</link>
		<comments>http://wp.serpere.info/archives/494#comments</comments>
		<pubDate>Thu, 28 May 2009 12:53:49 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[mod_dosdetector]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=494</guid>
		<description><![CDATA[mod_dosdetector 改造版。共有メモリの初期化処理を改善した。かなり試行錯誤を繰り返すことになったが、自分なりに理解をした上で修正できたと思う。 共有メモリ機構においては、セグメントの「名前」が共有の鍵となる。名前の衝突にはくれぐれも注意しなければならない。 新たに共有メモリ・セグメントを作成する際、既にその名前が使用されていると、作成に失敗する 同じ名前を指定して attach すれば、どんなプロセスでも共有に参加できる。異なるソフトウェアに属する異なるプロセスが、異なる意図を持って同じメモリにアクセスすれば、メモリ内容は破壊されプロセスはクラッシュする 名前の衝突を防ぐための一つの工夫として、共有メモリ・セグメントの名前を”捨てて”しまう方法がある。名前を捨てることで、新たに別のプロセスが共有に参加することはできなくなる（既に共有に参加しているプロセスからは変わらずアクセスできる）。また名前を捨てた後なら、新たに同じ名前で共有メモリを作ることができるようになる。 APR では apr_shm_remove を使うことで名前を捨てることができる。上に挙げた2つの問題は、それぞれ次のようにして回避できる： apr_shm_create を実行する前に、その名前で apr_shm_remove を実行する 共有メモリの作成と初期化が終わった時点で apr_shm_remove を実行する （もちろん厳密に言えば remove と create の間で他のプロセスが create する可能性とか、remove を実行する前にプロセスがクラッシュする可能性とかも考えられるわけだが、大部分のトラブルは回避できるはずである）。 mod_dosdetector ではバージョン0.2からこれらの対策が施されたのだが、（多分古いコードの名残で？）remove/create を実行する前に、まず既存の共有メモリ・セグメントに attach を試みるコードが入っていた。これだと偶然に同じ名前のセグメントが存在した場合にクラッシュする危険性がある。 多分もともとは、Apache が不正終了するなどして共有メモリが破棄されなかった → 再起動の際の apr_shm_create が名前の衝突でコケる、という事態に備えてこのような手順を導入したのではないかと思う。しかし対策1と2によって名前衝突の危険性はほとんどなくなったはずなので、この処理はもう役目を終えたのではないか、と考える。 参考： 共有メモリをAPRで使用するには コンパクトに必要な情報がまとめられている apr_shm_attach() and APR_EEXIST apr_shm_remove が追加されるに至った議論]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F494%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22APR%20%E5%85%B1%E6%9C%89%E3%83%A1%E3%83%A2%E3%83%AA%E3%81%AE%E5%88%9D%E6%9C%9F%E5%8C%96%E5%87%A6%E7%90%86%22%20%7D);"></div>
<p><a href="http://github.com/tkyk/mod_dosdetector-fork/tree/master">mod_dosdetector 改造版</a>。共有メモリの初期化処理を改善した。かなり試行錯誤を繰り返すことになったが、自分なりに理解をした上で修正できたと思う。</p>
<p>共有メモリ機構においては、セグメントの「名前」が共有の鍵となる。名前の衝突にはくれぐれも注意しなければならない。</p>
<ol>
<li>新たに共有メモリ・セグメントを作成する際、既にその名前が使用されていると、作成に失敗する</li>
<li>同じ名前を指定して attach すれば、どんなプロセスでも共有に参加できる。異なるソフトウェアに属する異なるプロセスが、異なる意図を持って同じメモリにアクセスすれば、メモリ内容は破壊されプロセスはクラッシュする</li>
</ol>
<p>名前の衝突を防ぐための一つの工夫として、共有メモリ・セグメントの名前を”捨てて”しまう方法がある。名前を捨てることで、新たに別のプロセスが共有に参加することはできなくなる（既に共有に参加しているプロセスからは変わらずアクセスできる）。また名前を捨てた後なら、新たに同じ名前で共有メモリを作ることができるようになる。</p>
<p>APR では <a href="http://apr.apache.org/docs/apr/1.3/group__apr__shm.html#gee8b7d9b952ff6157ddbb00fabb477e0">apr_shm_remove</a> を使うことで名前を捨てることができる。上に挙げた2つの問題は、それぞれ次のようにして回避できる：</p>
<ol>
<li>apr_shm_create を実行する前に、その名前で apr_shm_remove を実行する</li>
<li>共有メモリの作成と初期化が終わった時点で apr_shm_remove を実行する</li>
</ol>
<p>（もちろん厳密に言えば remove と create の間で他のプロセスが create する可能性とか、remove を実行する前にプロセスがクラッシュする可能性とかも考えられるわけだが、大部分のトラブルは回避できるはずである）。</p>
<p>mod_dosdetector ではバージョン0.2からこれらの対策が施されたのだが、（多分古いコードの名残で？）remove/create を実行する前に、まず既存の共有メモリ・セグメントに attach を試みるコードが入っていた。これだと偶然に同じ名前のセグメントが存在した場合にクラッシュする危険性がある。</p>
<p>多分もともとは、Apache が不正終了するなどして共有メモリが破棄されなかった → 再起動の際の apr_shm_create が名前の衝突でコケる、という事態に備えてこのような手順を導入したのではないかと思う。しかし対策1と2によって名前衝突の危険性はほとんどなくなったはずなので、この処理はもう役目を終えたのではないか、と考える。</p>
<p>参考：</p>
<dl>
<dt><a href="http://nap-web.eng.kagawa-u.ac.jp/index.php?%B6%A6%CD%AD%A5%E1%A5%E2%A5%EA%A4%F2APR%A4%C7%BB%C8%CD%D1%A4%B9%A4%EB%A4%CB%A4%CF">共有メモリをAPRで使用するには</a></dt>
<dd>コンパクトに必要な情報がまとめられている</dd>
<dt><a href="http://qaix.com/apache-http-server/191-538-apr-shm-attach-and-apr-eexist-read.shtml">apr_shm_attach() and APR_EEXIST</a></dt>
<dd>apr_shm_remove が追加されるに至った議論</dd>
</dl>

]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/494/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mod_dosdetector 改造継続中</title>
		<link>http://wp.serpere.info/archives/487</link>
		<comments>http://wp.serpere.info/archives/487#comments</comments>
		<pubDate>Fri, 22 May 2009 14:43:51 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[mod_dosdetector]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=487</guid>
		<description><![CDATA[tkyk&#8217;s mod_dosdetector-fork at master &#8211; GitHub オリジナルに対して最小限の変更のみ加えたバージョンはcompat-2タグ まずバグ修正。前回エントリ時点でのmasterブランチおよびcompat-1タグには実にしょぼいバグがあった。「フラグの逆転」という初歩的なミスによって、DoSIgnoreContentType　の効果が逆転する状態になっていた……。C言語に不慣れなのがこういう形で露呈するとは。どうやら脳内で ! 演算子を論理 false のチェックだと見なしてしまうらしい。C言語の場合、! はあくまでも「ゼロかどうかを調べる」演算子だと肝に銘じておこう。 その後masterブランチでは、クライアントの管理処理を全部クリティカルセクションに押し込む、という修正を行った。それなりに大きな規模の修正になった。これで共有メモリに対する更新処理は全てロックの中に収まったはず。動作は全く変わっていないはず。「DoS攻撃の検出」と「検出結果に応じた処理」が綺麗に分離されて、コードの見通しはよくなったはず、である。]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F487%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22mod_dosdetector%20%E6%94%B9%E9%80%A0%E7%B6%99%E7%B6%9A%E4%B8%AD%22%20%7D);"></div>
<p><a href="http://github.com/tkyk/mod_dosdetector-fork/tree/master">tkyk&#8217;s mod_dosdetector-fork at master &#8211; GitHub</a><br />
オリジナルに対して最小限の変更のみ加えたバージョンは<a href="http://github.com/tkyk/mod_dosdetector-fork/tree/compat-2">compat-2</a>タグ</p>
<p>まずバグ修正。前回エントリ時点でのmasterブランチおよびcompat-1タグには実にしょぼいバグがあった。「フラグの逆転」という初歩的なミスによって、DoSIgnoreContentType　の効果が逆転する状態になっていた……。C言語に不慣れなのがこういう形で露呈するとは。どうやら脳内で ! 演算子を論理 false のチェックだと見なしてしまうらしい。C言語の場合、! はあくまでも「ゼロかどうかを調べる」演算子だと肝に銘じておこう。</p>
<p>その後masterブランチでは、クライアントの管理処理を全部クリティカルセクションに押し込む、という修正を行った。<a href="http://github.com/tkyk/mod_dosdetector-fork/commit/e3456ca1d3a9273caf6f47b7b5a523b9791d3bc0">それなりに大きな規模の修正</a>になった。これで共有メモリに対する更新処理は全てロックの中に収まったはず。動作は全く変わっていないはず。「DoS攻撃の検出」と「検出結果に応じた処理」が綺麗に分離されて、コードの見通しはよくなったはず、である。</p>

]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/487/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>改造版 mod_dosdetector</title>
		<link>http://wp.serpere.info/archives/483</link>
		<comments>http://wp.serpere.info/archives/483#comments</comments>
		<pubDate>Sun, 17 May 2009 12:58:04 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[mod_dosdetector]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=483</guid>
		<description><![CDATA[mod_dosdetector の改造版をgithubで公開した。元のライセンスに従ってMITライセンスとなっている。 今のところ、最大の違いは次の2点である： 無視するアクセスを環境変数「NoCheckDoS」で指定できるようになった DoSIgnoreContentTypeが指定されていない場合、サブリクエストの生成を行わないようにした 例えば画像/js/cssファイルに対するアクセスを無視するには、次のように SetEnvIf で指定する。DoSIgnoreContentType は指定しなくて良い。 SetEnvIf Request_URI &#34;\.(gif&#124;jpe?g&#124;ico&#124;js&#124;css&#124;png)$&#34; NoCheckDoS これで各アクセスごとのサブリクエストが行われなくなるので、パフォーマンスも改善されるはず。abを使った単純なテストでは、20%程度は効果があるようだ（並列20、合計10000アクセスで実験）。 Requests per second: 1638.03 [#/sec] (mean) Time per request: 12.210 [ms] (mean) Time per request: 0.610 [ms] (mean, across all concurrent requests) Requests per second: 2058.26 [#/sec] (mean) Time per request: 9.717 [ms] (mean) Time per request: 0.486 [ms] (mean, across [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F483%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%E6%94%B9%E9%80%A0%E7%89%88%20mod_dosdetector%22%20%7D);"></div>
<p><a href="http://sourceforge.net/projects/moddosdetector/">mod_dosdetector</a> の改造版を<a href="http://github.com/tkyk/mod_dosdetector-fork/tree/master">githubで公開</a>した。元のライセンスに従ってMITライセンスとなっている。</p>
<p>今のところ、最大の違いは次の2点である：</p>
<ul>
<li>無視するアクセスを環境変数「NoCheckDoS」で指定できるようになった</li>
<li>DoSIgnoreContentTypeが指定されていない場合、サブリクエストの生成を行わないようにした</li>
</ul>
<p>例えば画像/js/cssファイルに対するアクセスを無視するには、次のように SetEnvIf で指定する。DoSIgnoreContentType は指定しなくて良い。</p>


<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">SetEnvIf</span> Request_URI <span style="color: #7f007f;">&quot;<span style="color: #000099; font-weight: bold;">\.</span>(gif|jpe?g|ico|js|css|png)$&quot;</span> NoCheckDoS</pre></div></div>



<p>これで各アクセスごとのサブリクエストが行われなくなるので、パフォーマンスも改善されるはず。abを使った単純なテストでは、20%程度は効果があるようだ（並列20、合計10000アクセスで実験）。</p>
<pre>
Requests per second:    1638.03 [#/sec] (mean)
Time per request:       12.210 [ms] (mean)
Time per request:       0.610 [ms] (mean, across all concurrent requests)
</pre>
<pre>
Requests per second:    2058.26 [#/sec] (mean)
Time per request:       9.717 [ms] (mean)
Time per request:       0.486 [ms] (mean, across all concurrent requests)
</pre>
<p>もし上記の変更点「だけ」が欲しいという方は、<del datetime="2009-06-07T13:22:59+00:00">compat-1タグ</del> <a href="http://github.com/tkyk/mod_dosdetector-fork/tree/compat-2">compat-2 タグ</a>をチェックアウトしてほしい。今後masterブランチでは（既に取り掛かっているものも含め）</p>
<ul>
<li>共有メモリ処理と排他処理の整理</li>
<li>設定ディレクティブまわりの整理</li>
<li>Apache 2.0系への対応</li>
<li>諸々のコードのクリーンアップ</li>
</ul>
<p>といった課題にチャレンジしていくつもりである。</p>

]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/483/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mod_dosdetector 継続調査</title>
		<link>http://wp.serpere.info/archives/473</link>
		<comments>http://wp.serpere.info/archives/473#comments</comments>
		<pubDate>Thu, 14 May 2009 14:39:08 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[mod_dosdetector]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=473</guid>
		<description><![CDATA[先日 mod_dosdetector について調べて以来、Apache モジュールについて俄然興味が湧いてきた。もともとは mod_dosdetector の正確な動作を確かめたかっただけなのだが、処理の流れを追うために Apache のソースコードにまで手を出して読みふけっているうちに、夢中になってしまった。普段から馴染み深いソフトウェアだけに、動作の裏側が分かってくるとすごく面白い。勢い、この分野で定本と言われる『The Apache Modules Book』も買ってしまった。 とりあえず mod_dosdetector で気になっているのは 無視するアクセスを Content-Type で指定するのは適当か？Content-Type を取得するにはサブリクエストの生成を行う必要があるので、オーバーヘッドが大きい。URLを対象にした方が良いのではないか？ あるいは、無視するアクセスの選別自体は mod_setenvif などに任せて、mod_dosdetecotr 側では環境変数をチェックすれば済むのではないか？ 共有メモリに対してロックの外で更新操作を行っている箇所があるが、問題は無いのか？ C言語の勉強を兼ねてこれらの改造にチャレンジしてみよう。]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F473%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22mod_dosdetector%20%E7%B6%99%E7%B6%9A%E8%AA%BF%E6%9F%BB%22%20%7D);"></div>
<p><a href="http://www.amazon.co.jp/Apache-Modules-Book-Application-Development/dp/0132409674%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhebinikki09-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0132409674"><img class="alignleft" src="http://ecx.images-amazon.com/images/I/51sQph2MYyL._SL160_.jpg" alt="" width="121" height="160" /></a>先日 mod_dosdetector について調べて以来、Apache モジュールについて俄然興味が湧いてきた。もともとは mod_dosdetector の正確な動作を確かめたかっただけなのだが、処理の流れを追うために Apache のソースコードにまで手を出して読みふけっているうちに、夢中になってしまった。普段から馴染み深いソフトウェアだけに、動作の裏側が分かってくるとすごく面白い。勢い、この分野で定本と言われる『<a name="evtst|a|0132409674" href="http://www.amazon.co.jp/Apache-Modules-Book-Application-Development/dp/0132409674%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhebinikki09-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0132409674">The Apache Modules Book</a>』も買ってしまった。</p>
<p>とりあえず mod_dosdetector で気になっているのは</p>
<ul>
<li>無視するアクセスを Content-Type で指定するのは適当か？Content-Type を取得するにはサブリクエストの生成を行う必要があるので、オーバーヘッドが大きい。URLを対象にした方が良いのではないか？</li>
<li>あるいは、無視するアクセスの選別自体は mod_setenvif などに任せて、mod_dosdetecotr 側では環境変数をチェックすれば済むのではないか？</li>
<li>共有メモリに対してロックの外で更新操作を行っている箇所があるが、問題は無いのか？</li>
</ul>
<p>C言語の勉強を兼ねてこれらの改造にチャレンジしてみよう。</p>

]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/473/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

