<?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/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>cloudrop &#187; apache</title>
	<atom:link href="http://cloudrop.jp/tag/apache/feed" rel="self" type="application/rss+xml" />
	<link>http://cloudrop.jp</link>
	<description>クラウド使ったインターネットサービスの技術支援、ウェブサービスの開発</description>
	<lastBuildDate>Thu, 09 Sep 2010 15:20:19 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://cloudrop.jp/tag/apache/feed" />
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>さくらのVPSにMongoDB+PHP+Apacheをインストールしたメモ</title>
		<link>http://cloudrop.jp/labs/install_memo_on_sakuravps?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=install_memo_on_sakuravps</link>
		<comments>http://cloudrop.jp/labs/install_memo_on_sakuravps#comments</comments>
		<pubDate>Thu, 19 Aug 2010 03:02:43 +0000</pubDate>
		<dc:creator>sekine</dc:creator>
				<category><![CDATA[実験・研究]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[PHP5.3]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[Twitter Streaming API]]></category>
		<category><![CDATA[さくらのVPS]]></category>

		<guid isPermaLink="false">http://cloudrop.jp/?p=493</guid>
		<description><![CDATA[Twitter Client Ranking by Streaming APIの構成は、
PHP5.3.3(with APC) + MongoDB1.6.1 + Apache2.2.3で、フレームワークにsyfmony1 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://tr.labs.cloudrop.jp/">Twitter Client Ranking by Streaming API</a>の構成は、<br />
PHP5.3.3(with APC) + MongoDB1.6.1 + Apache2.2.3で、フレームワークにsyfmony1.4.6を利用しています。この構成が動く最低限の環境を構築した際のメモです。<br />
さくらのVPSはサービスはほとんど入っていませんでしたが、gccやautoconfは既に入っていました。</p>
<pre class="terminal">
<span style="color:#0F0;">#Apache</span>
sudo yum install httpd.x86_64

<span style="color:#0F0;">#PHPのコンパイルに必要（パラメータによる）</span>
sudo yum install httpd-devel.x86_64
sudo yum install libxml2-devel.x86_64
sudo yum install openssl-devel.x86_64
sudo yum install curl-devel.x86_64

<span style="color:#0F0;">#最新版PHP取得→コンパイル→インストール</span>
wget http://ve2.php.net/get/php-5.3.3.tar.gz/from/jp2.php.net/mirror
tar vfxz php-5.3.3.tar.gz
cd php-5.3.3
./configure \
--enable-mbstring \
--with-apxs2=/usr/sbin/apxs \
--with-curl \
--with-openssl \
--with-config-file-path=/etc  \
--enable-dom \
--with-libdir=lib64
meke
sudo make install

<span style="color:#0F0;">#symfonyのインストール</span>
sudo pear channel-discover pear.symfony-project.com
sudo pear install symfony/symfony

<span style="color:#0F0;">#PHP拡張のインストール</span>
sudo pecl install apc
sudo pecl install mongo

<span style="color:#0F0;">#PHP拡張の反映</span>
sudo vi /etc/php.ini

extension = mongo.so
extension = apc.so
apc.enabled=1
</pre>
<p>PHPも<a href="http://rpms.famillecollet.com/">Remi</a>のリポジトリを利用すると簡単に最新版がインストールできますが、cli版が<strong>バックグラウンドで実行できない不具合</strong>があるのでソース版を利用しました。</p>
<h4 id="toc-">参考</h4>
<ul>
<li><a href="http://memorandum.yamasnet.com/archives/Post-165.html">CentOS 5.2上でPHP 5.2.6にアップグレード</a></li>
<li><a href="http://a98.jugem.jp/?eid=371">CentOS 5.3 に php-5.2.9, mysql-5.1.35 をインストール(remi レポジットリより)</a></li>
</ul>
<h3 id="toc-mongodb">MongoDBをインストール</h3>
<p>下記URLを参考にMongoDBのリポジトリを設定してインストールします。<br />
参考：<a href="http://www.mongodb.org/display/DOCS/CentOS+and+Fedora+Packages">CentOS and Fedora Packages</a></p>
<pre class="terminal">
sudo vi /etc/yum.repos.d/10gen.repo 

[10gen]
name=10gen Repository
baseurl=http://downloads.mongodb.org/distros/centos/5.4/os/x86_64/
gpgcheck=0

sudo yum install mongo-stable* --enablerepo=10gen
</pre>
<p>最新のstableバージョン1.6.1がインストールされます（2010年8月19日現在）。デフォルトの設定は以下の通りです。<br />
設定ファイル：/etc/mongod.conf<br />
ログファイル：/var/log/mongo/mongod.log<br />
データディレクトリ：/var/lib/mongo/</p>
<p>起動は起動スクリプトでOK</p>
<pre class="terminal">
sudo /etc/init.d/mongod start
</pre>
]]></content:encoded>
			<wfw:commentRss>http://cloudrop.jp/labs/install_memo_on_sakuravps/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://cloudrop.jp/labs/install_memo_on_sakuravps" />
	</item>
		<item>
		<title>Google Analyticsで正確な数字をとるための設定</title>
		<link>http://cloudrop.jp/access_analytics/setting?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=setting</link>
		<comments>http://cloudrop.jp/access_analytics/setting#comments</comments>
		<pubDate>Thu, 29 Oct 2009 10:00:55 +0000</pubDate>
		<dc:creator>sekine</dc:creator>
				<category><![CDATA[アクセス解析]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[Google Analytics]]></category>

		<guid isPermaLink="false">http://cloudrop.jp/?p=94</guid>
		<description><![CDATA[

アクセス解析の実態
Google Analyticsで測る
内部アクセスの排除

フィルタ マネージャを設定する
IPアドレスで除外する
クッキーで除外する
番外編：Apacheのアクセスログで応用する




アク [...]]]></description>
			<content:encoded><![CDATA[<div class="toc">
<ol>
<li><a href="http://cloudrop.jp/access_analytics/setting#toc-">アクセス解析の実態</a></li>
<li><a href="http://cloudrop.jp/access_analytics/setting#toc-google-analytics">Google Analyticsで測る</a></li>
<li><a href="http://cloudrop.jp/access_analytics/setting#toc-1">内部アクセスの排除</a>
<ol>
<li><a href="http://cloudrop.jp/access_analytics/setting#toc--">フィルタ マネージャを設定する</a></li>
<li><a href="http://cloudrop.jp/access_analytics/setting#toc-ip">IPアドレスで除外する</a></li>
<li><a href="http://cloudrop.jp/access_analytics/setting#toc-2">クッキーで除外する</a></li>
<li><a href="http://cloudrop.jp/access_analytics/setting#toc-apache">番外編：Apacheのアクセスログで応用する</a></li>
</ol>
</li>
</ol>
</div>
<h3 id="toc-">アクセス解析の実態</h3>
<p>ネット業界では、ページビュー数（以下PV）やユニークユーザー数が企業やサービスの指標にされる一方で、そのアクセスを計測する方法が業界内で統一されておらず、ロボットやRSSへのアクセスもPVに加える上場企業があったり、酷いところでは画像やCSSのロード（アクセス）までをもPVに加えて水増し、バリューがあるかのように見せかけてるケースもあります（気をつけて！）。</p>
<h3 id="toc-google-analytics">Google Analyticsで測る</h3>
<p>そんな中、Google Analyticsは導入が簡単・高性能、しかも無料ということでPCサイトのアクセス解析ではもはや業界標準になっていると思います。多くの人が使っているということは、例え計測方法がブラックボックスだったとしても「Google Analyticsで計測した値」同士を比較することで、相対的な数字として信頼のできる結果を導くことができます。</p>
<h3 id="toc-1">内部アクセスの排除</h3>
<p>ところが、簡単に導入できる反面Google Analyticsでも設定を行わないと正確な値を取ることができません。それは、自分たちの内部アクセスを排除する設定です。</p>
<p>設定を知らないのか、少しでもPVを稼ぎたいのか、内部アクセスを含めてしまっているケースを多々見かけるので、啓蒙を兼ねて設定方法を書きたいと思います。</p>
<p>正しい戦略は正しい数字から。正しい数字は正しい設定から。</p>
<p><strong>参考サイト</strong></p>
<ul>
<li> <a href="https://www.google.com/support/googleanalytics/bin/answer.py?answer=55481&amp;hl=ja_JP&amp;utm_id=ad">社内からのアクセスを除外するにはどうすればよいですか？ &#8211; Analytics ヘルプ</a></li>
</ul>
<p>上記参考サイトの通りなのですが、ヘルプなのに全然優しくないのがGoogleっぽいです。</p>
<h4 id="toc--">フィルタ マネージャを設定する</h4>
<p>Google Analyticsで解析方法をカスタマイズするには、フィルタ マネージャでフィルタを設定します。トップページ右下の「フィルタ マネージャ」をクリックします。（クリックで拡大）<br />
<a href="http://cloudrop.jp/wp-content/uploads/2009/10/ga_setting01.png"><img class="alignnone size-large wp-image-322" title="ga_setting01" src="http://cloudrop.jp/wp-content/uploads/2009/10/ga_setting01-1024x769.png" alt="ga_setting01" width="500" height="375" /></a></p>
<p>次に「フィルタを追加」をクリックします。（クリックで拡大）<br />
<a href="http://cloudrop.jp/wp-content/uploads/2009/10/ga_setting02.png"><img class="alignnone size-large wp-image-319" title="ga_setting02" src="http://cloudrop.jp/wp-content/uploads/2009/10/ga_setting02-1024x561.png" alt="ga_setting02" width="500" height="274" /></a></p>
<p>以下、順次フィルタ追加画面でフィルタを設定していきます。</p>
<h4 id="toc-ip">IPアドレスで除外する</h4>
<p>社内からなどの内部アクセス元のIPアドレスが固定の場合や、開発環境・テスト環境のアクセス元IP<br />
アドレスがあらかじめ分かっている場合に設定しておく方法です。</p>
<p>既定のフィルタ ＞ IPアドレスからのトラフィック を設定します（クリックで拡大）<br />
<a href="http://cloudrop.jp/wp-content/uploads/2009/10/ga_setting03.png"><img class="alignnone size-large wp-image-321" title="ga_setting03" src="http://cloudrop.jp/wp-content/uploads/2009/10/ga_setting03-1024x597.png" alt="ga_setting03" width="500" height="293" /></a></p>
<p>上の設定画面ではIPアドレスをサブネットマスクなどを使って範囲で指定することができないので、その場合はカスタムフィルタ（ユーザーのIPアドレス）を使って正規表現で頑張る必要があります。</p>
<p>例えばアクセス元のIPアドレスが192.168.0.0/24だった場合は、<br />
^192\.168\.0\.([1-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-4]))$<br />
となります。</p>
<p>この正規表現を生成してくれるツールはGoogleのヘルプにあるので、それを利用しましょう。</p>
<ul>
<li><a href="http://www.google.com/support/googleanalytics/bin/answer.py?answer=55572&#038;cbid=ku8145ufakfi&#038;src=cb&#038;lev=answer">IP アドレスの範囲を指定して、そこからのトラフィックを除外するにはどうしたらよいですか？</a></li>
</ul>
<p>カスタムフィルタ ＞ ユーザーのIPアドレス を設定します（クリックで拡大）<br />
<a href="http://cloudrop.jp/wp-content/uploads/2009/10/ga_setting05.png"><img class="alignnone size-large wp-image-343" title="ga_setting05" src="http://cloudrop.jp/wp-content/uploads/2009/10/ga_setting05-1024x769.png" alt="ga_setting05" width="500" height="375" /></a></p>
<blockquote><p>
開発環境やテスト環境でのアクセスを除外する方法は、IPアドレス以外にもドメイン名でルールを決めたり（テスト環境のホスト名にはtest.example.comなどのように必ずtest.を付けるとか）、アプリケーション内でGoogle Analyticsコードを出力しないようにプログラマーが頑張ったりする方法もありますが、Google Analyticsを管理する部門と開発部門が同じとも限りませんし、変更が少なく管理が分離しやすいアクセス元IPアドレスで処理する方法がいいと思います。
</p></blockquote>
<h4 id="toc-2">クッキーで除外する</h4>
<p>これは管理が煩雑でお勧めはできません。<br />
アクセス元IPアドレスで除外しきれいないアクセス数が全体から見て無視できる程少なければ、IP<br />
アドレスだけでいいと思います。</p>
<p>完璧主義の人や、出先の無線LANスポットやイーモバイル、iPhoneなどから無視できない程頻繁に中の人がアクセスする場合は、クッキーを利用して除外します。</p>
<p>原理としては、除外したいクライアント（ブラウザー）に目印となる保存期間の長いクッキーを送信しておき、そのクッキーを持っているクライアントからアクセスがあった場合に除外をします。</p>
<p>まず目印となるキーワードを「ユーザー定義」というフィールドに設定しておきます。ここではキーワードを「self_access」としておきます。（クリックで拡大）<br />
<a href="http://cloudrop.jp/wp-content/uploads/2009/10/ga_setting04.png"><img class="alignnone size-large wp-image-320" title="ga_setting04" src="http://cloudrop.jp/wp-content/uploads/2009/10/ga_setting04-1024x770.png" alt="ga_setting04" width="500" height="376" /></a></p>
<p>次にクッキーを送信する方法を用意します。</p>
<p>Googleのヘルプには、</p>
<pre class="terminal">
&lt;body onLoad=&quot;javascript:pageTracker._setVar('self_access');&quot;&gt;
</pre>
<p>とbodyタグにJavascriptを埋め込んだコードを書き、除外対象と同じドメインにアップロードしてアクセスするように説明があります。</p>
<p>要は解析用のコードで実行している_gat._getTracker()で取り出したオブジェクト「pageTracker」内の_setVar()にキーワードを渡して実行すると、setCookie()が実行される仕組みです。<br />
ちなみにこのクッキーは「__utmv」という名前で2年間の有効期限で発行されます。</p>
<p>管理が大変だというのは、除外対象のドメインごとにクッキーを発行する仕組みを用意して、さらにクライアントにアクセスさせないといけないというところです。</p>
<p>実践しようしたら、中の人が必ずアクセスする管理ページなどにiframeで除外対象の各ドメインにおいてあるクッキーを発行するURLを読み込ませるなどの力技になってしまいそうです。</p>
<p>間違って一般のユーザーがアクセスできるページでこのクッキーを発行してしまうと、アクセス数がゼロになるので慎重に。</p>
<h4 id="toc-apache">番外編：Apacheのアクセスログで応用する</h4>
<p>アクセス元IPアドレスやクッキーで解析結果から除外する方法は、Apacheのアクセスログにも応用できます。</p>
<p>この設定をすることで、access_logには内部アクセスのログは書き込まれず、内部アクセスのログはlocal_access_logへ書き出されるようになります。</p>
<pre class="terminal">
# 必要なモジュール
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule log_config_module modules/mod_log_config.so

&lt;IfModule setenvif_module&gt;
    # アクセス元IPアドレスで判断
    SetEnvIf Remote_Addr 127.0.0.1 local_log no_log
    SetEnvIf Remote_Addr 192.168.0. local_log no_log

    # Google Analyticsで設定したCookieで判断
    SetEnvIf Cookie &quot;__utmv=[0-9]+\.self_access&quot; local_log no_log

    # （番外）ロボット系もこの程度の設定でだいぶ省けるんですけどね
    SetEnvIf User-Agent &quot;[bB]ot&quot; no_log
    SetEnvIf User-Agent &quot;[sS]pider&quot; no_log
    SetEnvIf User-Agent &quot;[cC]rawler&quot; no_log
    SetEnvIf User-Agent &quot;[rR][sS][sS]&quot; no_log
    SetEnvIf User-Agent &quot;[fF]eed&quot; no_log
&lt;/IfModule&gt;

&lt;IfModule log_config_module&gt;
    CustomLog logs/access_log combined env=!no_log
    CustomLog logs/local_access_log combined env=local_log
&lt;/IfModule&gt;
</pre>
<p>サーバーのログを見ることが多い方はこっちの方が効果です。</p>
]]></content:encoded>
			<wfw:commentRss>http://cloudrop.jp/access_analytics/setting/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://cloudrop.jp/access_analytics/setting" />
	</item>
		<item>
		<title>クラウド環境でのApacheの設定</title>
		<link>http://cloudrop.jp/cloud/apache_setting?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=apache_setting</link>
		<comments>http://cloudrop.jp/cloud/apache_setting#comments</comments>
		<pubDate>Sat, 12 Sep 2009 09:42:22 +0000</pubDate>
		<dc:creator>sekine</dc:creator>
				<category><![CDATA[クラウド]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[ETag]]></category>
		<category><![CDATA[mod_deflate]]></category>
		<category><![CDATA[mod_expires]]></category>

		<guid isPermaLink="false">http://cloudrop.jp/?p=177</guid>
		<description><![CDATA[クラウドのホスティングサービスは、一定リソースの時間極課金＋通信トラフィックの従量課金が一般的です。
CPUやメモリなどのリソースは、1%しか使わなくても100％使っても時間内の料金は同じです。
一方で通信料は使った分だ [...]]]></description>
			<content:encoded><![CDATA[<p>クラウドのホスティングサービスは、一定リソースの時間極課金＋通信トラフィックの従量課金が一般的です。</p>
<p>CPUやメモリなどのリソースは、1%しか使わなくても100％使っても時間内の料金は同じです。<br />
一方で通信料は使った分だけGB単位などで段階的に課金される仕組みです。</p>
<p>この料金体系では、なるべくリソースを使い切って、且つ通信料を抑えることが最も費用対効果のある利用方法となります。</p>
<p>サーバーからクライアントへのレスポンス、特にブラウザーのロードとレンダリングを高速化させるために、Yahoo!のYSlowやGoogleのPage Speedを使ってチューニングを行うのと同じようなアプローチで、なるべくCPUに仕事をさせて、トラフィックを減らしてみたいと思います。</p>
<div class="toc">
<ol>
<li><a href="http://cloudrop.jp/cloud/apache_setting#toc-">キャッシュ機能を最大限利用する</a></p>
<ol>
<li><a href="http://cloudrop.jp/cloud/apache_setting#toc-expires">Expires</a></li>
<li><a href="http://cloudrop.jp/cloud/apache_setting#toc-last-modifiedetag">Last-Modified、Etag</a></li>
</ol>
</li>
<li><a href="http://cloudrop.jp/cloud/apache_setting#toc-1">コンテンツは基本、圧縮</a></li>
<li><a href="http://cloudrop.jp/cloud/apache_setting#toc-2">使える外部リソースを使う</a></li>
</ol>
</div>
<h3 id="toc-">キャッシュ機能を最大限利用する</h3>
<h4 id="toc-expires">Expires</h4>
<p>Apacheの<a href="httpd.apache.org/docs/2.2/ja/mod/mod_expires.html ">mod_expires</a>を有効にすることで、レスポンスヘッダーにExpiresフィールドが出力され、最初のアクセス以降設定した期間が経過するまでブラウザーはローカルのキャッシュを利用し続けます。<br />
この設定は強力で、ローカルのキャッシュがなくなるか、強制リロードをしない限り、サーバーへアクセスすらしません。<br />
（逆に、更新をかける余地のあるファイルには設定しない方がいい項目です。）</p>
<pre class="terminal">LoadModule expires_module     modules/mod_expires.so
ExpiresActive On
ExpiresByType application/javascript "access plus 1 days"
ExpiresByType application/x-javascript "access plus 1 days"
ExpiresByType text/javascript "access plus 1 days"
ExpiresByType text/css "access plus 1 days"
ExpiresByType image/jpeg "access plus 3 days"
ExpiresByType image/png "access plus 3 days"
ExpiresByType image/gif "access plus 3 days"
ExpiresByType image/x-icon "access plus 3 days"</pre>
<p>有効期間の設定には以下の単位も利用できます。</p>
<ul>
<li>years</li>
<li>months</li>
<li>weeks</li>
<li>days</li>
<li>hours</li>
<li>minutes</li>
<li>seconds</li>
</ul>
<h4 id="toc-last-modifiedetag">Last-Modified、Etag</h4>
<p>次に、キャッシュが切れていよいよブラウザーがアクセスをしてきた時のための設定を施しておきます。</p>
<p>特段設定をしないとApacheは<strong>Last-Modified</strong>と<strong>Etag</strong>フィールドをセットしたヘッダーを送信します。<br />
この値を受け取っているブラウザーは、Last-Modifiedの値を<strong>If-Modified-Since</strong>に、Etagの値を<strong>If-None-Match</strong>に含めてリクエストを送信します。<br />
受け取ったサーバーは値を比較して変更が無ければコンテンツの中身は返さず、<strong>304 Not Modified</strong>を応答します。</p>
<p>コンテンツを返さない分トラフィックは抑えられるわけですが、この二つのフィールドはコンテンツを返すか、返さないかを判断するという意味では同じで、解釈の仕様によって動きが変わってきます。</p>
<p>Apacheにおいては、If-Modified-SinceよりもIf-None-Matchが優先されます。<br />
If-Modified-SinceはIf-None-Matchがない場合にだけ利用され、If-Modified-Sinceの値が同じでも、If-None-Matchの値が変更されていた場合には、コンテンツを返します。</p>
<p>これだけ優先されるIf-None-Matchなので、ETagの値を間違ってセットするとサーバーが毎回コンテンツを返してしまいます。<br />
この辺りでよく問題にされるのは、負荷分散環境下で複数のサーバーが同一コンテンツを返しているような場合です。<br />
クラウドのホスティングサービスを選択するようなケースでは、スケールアウトする仕組みが期待されることが多いので、あらかじめ設定しておくべき項目です。</p>
<p>Apacheがデフォルトで出力するETagが「ファイルの inode番号、ファイルサイズ、更新時刻」を元に生成するので、inode番号がサーバーによって変わってしまう環境では、せっかくIf-None-Matchを送っていても受け取るサーバーごとで比較するETagが違い、毎回無駄にコンテンツを返してしまいます。</p>
<p>以下のサイトに解説や実例があります。</p>
<ul>
<li><a href="http://blog.livedoor.jp/nipotan/archives/51186026.htmlhttp://blog.livedoor.jp/nipotan/archives/51186026.html">堀愚霊瑠の指摘で気付いた、はてなスターの静的ファイルとか想像以上にアレな件 &#8211; にぽたん研究所</a></li>
<li><a href="http://www.inter-office.co.jp/contents/193/">Webサイトの高速化 ルール13　ETagを正しく設定する! (Yahoo! developer netoworkより翻訳) | 株式会社インターオフィス | インターオフィス</a></li>
<li><a href="http://dsas.blog.klab.org/archives/50602499.html">DSAS開発者の部屋:負荷分散環境でブラウザキャッシュが効かないときは &#8211; ETagの解説 -</a></li>
</ul>
<p>これを回避するために、ETag自体を出力しない方法と、ETagの生成にinode番号を利用しないようにする方法と2通りあります。</p>
<p><strong>ETag自体の出力をしない</strong></p>
<pre class="terminal">FileETag None</pre>
<p><strong>ETagの生成にinode番号を利用しない</strong></p>
<pre class="terminal">FileETag MTime Size</pre>
<p>どちらにせよ、これらの設定では「最終更新日」が重要な要素になってきます。<br />
ETagを出力しない場合はLast-Modified（最終更新日）での判定が有効になり、inode番号を利用しない場合はファイルサイズと最終更新日がベースとなったEtagでの判定になるからです。</p>
<p>最終更新日が全てのサーバーで同じになるように、ファイルをコピーする時、<strong>同じタイムスタンプになるように注意してコピー</strong>しなければなりません。rsyncであれば-tオプションを付けてコピーします。</p>
<p>ETagを出力しない場合は、内容に変更があったファイルでもタイムスタンプが同じであれば同一ファイルと見なされるリスクがあります。<br />
inode番号を利用しないでETagを出力した場合は、その分リクエスト・レスポンスヘッダーともに微増し、トラフィックに若干影響があります。</p>
<p>トラフィックを抑えることが最優先であれば出力しない、ファイルの管理を厳密に行いたいのであれば出力する、ETagの設定をどちらにするかは状況によって変わってくると思います。<br />
今回の趣旨では、ETagは出力しない方がいいということになります。</p>
<h3 id="toc-1">コンテンツは基本、圧縮</h3>
<p><a href="httpd.apache.org/docs/2.0/ja/mod/mod_deflate.html">mod_deflate</a>モジュールを有効にすると、設定に従ってレスポンスをgzipで圧縮して送信してくれます。<br />
Deflateによる圧縮はCPUに働かせ、トラフィックを減らす、クラウド環境にもってこいの設定です。</p>
<pre class="terminal">LoadModule deflate_module modules/mod_deflate.so
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/javascript</pre>
<p>Webで利用される画像フォーマットはそもそも圧縮されている場合が多いので、圧縮効率の高いテキストファイルを対象にします。（WordPressの場合、WP Super Cacheを使うことで、記事自体もgzip圧縮して送信できるようになります。）</p>
<h3 id="toc-2">使える外部リソースを使う</h3>
<p>これは番外編です。<br />
RSS、各種APIなどのWebサービスからOpenIDやOAuthなどのリモート認証、Webは外部のリソースと協調する方向へと進んでいますから、利用できるリソースをどんどん活用するのもトラフィック節約になります。<br />
<a href="http://www.flickr.com/">flickr</a>や<a href="http://www.youtube.com/">YouTube</a>などをホスティング的に利用するのはもちろん、JavaScriptのライブラリはGoogleの<a href="http://code.google.com/intl/ja/apis/ajaxlibs/">AJAX Libraries API</a>、アバターアイコンは<a href="http://ja.gravatar.com/">Gravatar</a>など、目的に合わせて使える外部リソースを使っていきましょう。</p>
<p>もちろん外部リソースに依存することはリスクでもあるので、いい面ばかりでもありません。1ページに複数ドメインへのリソースがあると、名前解決に時間がかかりページのロードが遅くなるなどの問題もあります。</p>
<p>ご利用は計画的に。</p>
]]></content:encoded>
			<wfw:commentRss>http://cloudrop.jp/cloud/apache_setting/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://cloudrop.jp/cloud/apache_setting" />
	</item>
	</channel>
</rss>
