結果 Oh! Life

懲りずに書いてみたりする結果オーライな日記



20104月04

サーバー負荷・トラフィックをとことん軽減する

サイト運営日誌 エイジ 04:44

LEDネタ、いつ書くんだろう。。。(汗)

ただいま仕事そっちのけでサーバーいじってます(汗)
だって試用期限が決まってるし、サーバー費用は生活にも支障をきたしますから(曝)

ちなみに当サイトは、ちょうど2年前から専用サーバーで運用しています。ひぃぃぃ。
で、契約当初は一番安いプランでしたが、その後すぐにアップアップで2番目のプランへ移行(笑)、そして今回ついに最上位プランの扉を叩きました。開けたくないけど(汗)

さて、今回はサーバーの負荷やトラフィック軽減のため、以下の3項目について徹底的に対策をおこないました。

  1. プレーンなテキストファイルを gzip 圧縮でレスポンス
  2. ファイルへ有効期限を付加し、キャッシュを促す
  3. ETag ヘッダを削除して、サーバー負荷を減らす

僕自体、サーバー関係は超ビギナーなので、今回はこれらを判りやすく .htaccess への記述で実現する方法を、備忘録的に紹介しておきます。トラフィックにお悩みのウェブマスターにもお役に立てれば幸いです。
もちろん、慣れた方なら直接 httpd.conf へ記述した方が良いでしょうね。
ちなみに僕は昨日、下手にいじってたら httpd.conf 吹っ飛びました・・・(涙目)
慣れないことはするもんじゃないねぇ。。。

1. プレーンなテキストファイルを gzip 圧縮してレスポンスさせる

これは昨年11月からも一部適用していましたが、今回画像以外の全てのファイルを対象に gzip 圧縮レスポンスを適用することにしました。
お使いのサーバーの Apache のバージョンが 2.x 系 ならmod_deflate モジュールにより以下のように .htaccess に書くことができます。

SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|zip)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary

gzip 未対応の古いブラウザ等の除外判定が入ってるため、なんかややこしい構文です。詳しくは apache のサイトを参照のこと。

これで、ブラウザには以下のようなヘッダが返されます。

Content-Encoding: gzip

実際の圧縮例としては、例えば当サイトのトップページの index.css は27.6KB4.6KB になり、またトップページ全体(CSS、JS、画像すべて含め)では、488.4KB311.3KB と言う感じになりました。ブロードバンド時代とは言え、まだまだ重いなぁ。。。

2. ファイルへ有効期限を付加し、キャッシュを促す

これは、レスポンスヘッダに Expires (有効期限)を付加することによって、ブラウザのキャッシュを促そうと言うものです。
上の gzip と同様、.htaccess へ以下のように記述します。

ExpiresActive On
ExpiresByType text/css "access plus 3 days"
ExpiresByType text/javascript "access plus 3 days"
ExpiresByType application/x-javascript "access plus 3 days"
ExpiresByType image/gif "access plus 30 days"
ExpiresByType image/jpeg "access plus 30 days"
ExpiresByType image/png "access plus 30 days"
ExpiresByType image/vnd.microsoft.icon "access plus 30 days"
ExpiresByType image/x-icon "access plus 30 days"
ExpiresByType application/x-shockwave-flash "access plus 30 days"
ExpiresByType video/x-flv "access plus 30 days"
ExpiresByType video/mp4 "access plus 30 days"

これによりヘッダには、例えば以下のように返されます。

Expires: Thu, 01 May 2010 00:00:00 GMT

各ファイルと有効期限はお好みでどうぞ。

うちの場合は、テキストファイルは更新頻度が高いので短めに、画像関係は更新することはほとんど無いので30日にしてみました。
また、ブラウザをリロードすれば強制的にキャッシュが更新されるようなので、特に不便はなさそうかな?

3. ETag ヘッダを削除して、サーバー負荷を減らす

ETag ってなんだ?
あまり意識したことの無いヘッダです。。。
調べてみたら、どうもこれもブラウザのキャッシュに関係しているらしい。

通常、キャッシュはURLで管理されますが、それだと同一URLでPCと携帯のソースを分岐している場合(うちとか)は、それらの区別ができませんよね? そこで、更にそれらへ固有のIDを関連付けることで、それらの識別を可能にしているようです。それがこの ETag だとか(合ってるかな?)

しかし、サーバーの設定によっては画像でもなんでもかんでも ETag を付加しちゃう場合があって、その度にサーバーはブラウザのリクエストを検証しなきゃならなくて、必然的に仕事が増えて大忙しに。。。自業自得じゃん(苦笑)
なので、ETag の必要のないファイルには ETag を付けさせないように設定しましょ、と言うことらしいです。

で、記述はこんな感じ。
上が設定対象、下が除外対象です。
ファイルの選定はサイトの状況に合わせてご検討ください。

<Files ~ "\.(css|js|html|xml)$">
FileETag MTime Size
</Files>

<Files ~ "\.(gif|jpe?g|png|flv|mp4)$">
FileETag None
</Files>

以上で一通りの設定が完了です。

さあ、これでどのくらいサックサクになったのか?
いざチェックです。
計測には、Google の Page Speed と、Yahoo! の YSlow を使いました。
どちらも事前に Firefox の Firebug と言うアドオンが必要です。

結果は・・・

サクサク度チェック 施工前 施工後 備考
Google Page Speed 78/100 85/100 100点満点での評価
Yahoo! YSlow Grade (E) Grade (C) A~Fの6段階評価 (Aが優秀)

うーん。。。思ったほど改善してないような。。。
これ以上、どないせぇと?
もう少し研究が必要みたい。。。

このエントリーをはてなブックマークに追加

こちらのエントリーもどうぞ♪


コメントとトラックバック

  1. 1. takuro 2010/04/04 07:43

    おはようございます。
    ご苦労様です。
    バナー広告を成功報酬?%とかワンクリックいくら上限いくらまでとかという方式で募集したらどうでしょう?
    今の無料で配信しているのは弱小ショップにとってはありがたいでしょうが、もう一歩進めて広告出したいところもこれだけのアクセスがあるのですから興味を持つところもあるような気がします。
    まぁエイジさんが判断して大丈夫なお店がベストですが・・・。
    人気ブログランキング等に広告出しているところにメール送って当たってみたらいかがでしょうか?

  2. 2. エイジ 2010/04/04 23:03

    こんばんわございます。

    今利用しているGoogle広告の関係で、他の同型の広告(クリック保障等)とかは利用できないらしいですね。楽天のアフィリみたいなのは良いらしいけど、下手なことして広告契約を破棄されたら困る(汗)ので、とりあえず広告系は今はやらない方針です。多少なりとも今の広告収入がサーバー維持費の足しになってるので。

    でもバナー枠を月極めで提供と言うのは、いずれやりたいと考えてます。
    但し、成功報酬とかクリック単位の広告はシステムから必要なので、どのみち却下です。作るの大変だし。。。

    また、基本的に関連ショップさんはなるべく無償で応援してあげたいので、リンク程度ならお金は取らないです。儲からない業界ですから(汗)

    応援市場への出店については、何社か打診してましたが、様々な理由で実現できていません。また、商品をある程度吟味してるので、僕がホントに良いと思えなかったものは、ご依頼を辞退しています。ホントに申し訳ないのだけど。。。
    なかなか「良いもの」ってないですねぇ(汗)

  3. 3. ゆーいち 2010/04/05 09:58

    いっそ自宅でサーバー!
    ってこっちの方が維持費かかるかしら(;´Д`)
    最初のサーバー購入費も掛かるし
    夏場は確実にエアコン代が増えるだろうし・・
    メンテも面倒だろうし
    セキュリティとか・・

  4. 4. エイジ 2010/04/06 14:01

    スキル不足が一番の敬遠の理由ですが、仮に自前でサーバーを立てるとしても、以下の問題があります。

    ・無停電設備
    ・回線速度、帯域確保
    ・空調管理
    ・保守、メンテナンス
    ・旅行に行けない(汗)

    多少高くても安定したサービスを提供しようと思えば、今のサーバー維持費も安いもんです。高いけど(曝)

  5. 5. ゆーいち 2010/04/06 14:45

    確かに自前のサーバーはお遊びなら簡単ですが
    こういったでかいサイトになると
    色々と不安要素が出てきちゃいますよね~

    ところで
    メール行きました?w

  6. 6. A Way of Life 2010/04/20 00:01

    YSlow: “Configure entity tags (ETags)” に関する設定

    YSlowのスコアを決める大きな要因の1つに、Configure entity tags (ETags)という項目があります。 ETagsとは、簡単に言えば、ブラウザがファイルの同一性を識別するためのタグ(符号)のことで…

  7. 7. シメサバ 2010/07/22 12:36

    >3. ETag ヘッダを削除して、サーバー負荷を減らす
    とありますが、そもそもETagの生成コストって高いんでしょうか?

  8. 8. エイジ 2010/07/22 22:36

    コメントありがとうございます。

    ETag自体はあくまでもサーバーが動的に付加している、と言う点では、静的データを返すよりも負荷としては大きい、と言うことではないでしょうか?

コメントフォーム



コンテンツ

スペクトラ LEDスペクトラ解説