前回まで
さくらでExpires headersを考えてみる
さくらでphpを使ってExpires headersその2(覚書きメモ)
三回目だからといって、何か進展がある訳じゃないです(^_^;
逆に、「これで完全に諦めがつきました」って感じ。

今回参考にしたリンク

Apache1系でもできるキャッシュコントロールによる負荷対策法
Speed Up your Sites by Caching! [Archive] -CodingForums.com
HTMLHelp Forums > Speed up Sites with.htaccess
▲上記のようなサイトを発見し、
「お、やっぱりApache1.3系でもhtaccessでExpires header出来るじゃん!」
と意気揚々と.htaccessを設定するのですが、、、動かず。

ダメな原因を調べる

色々調べた結果、「さくらインターネット 質問にマジレスするスレPart19」(既にDat落ち)の925レス目あたりに、この方法はさくらのApache/1.3系では使えない事が書いてあった。

  「さくらはモジュールの絡みでApache1.3系を使ってる  Headerは使えない」

やっぱさくらのレン鯖じゃHeader set Cache-Controlは無理なのかねぃ。

そのほかにも

「さくらインターネット 質問にマジレスするスレ」良いですね。スゲー勉強になります。

  • 「さくらのレン鯖は状況にもよるがユニーク1~3万超えたら制限を発動し、9割は503を返すようになる。 」
  • 「スタンダードだろうがプレミアムだろうがビジネスプロだろうが503の頻度はほとんどかわらんよ 上でも書かれてるが転送量はさほど問題じゃない 503はもはやsakuraの華なので、人気サイトならマネージドか専鯖、もしくは他社の鯖でも借りるべき」
  • 「スタンダードプランで同時接続数が300~1000ぐらいのサイトしってるけど まったく503でないな正直503はようわからん」

などの文面発見。

現在、1日のユニークは平均すると2万。混雑する時間帯にBotやダウンローダーが高速巡回を始めると503出るようになってるんで、それを回避したいのだけれど、、、無理なのかな(´・ω・`)

そしてそして。ウチのサイトは現在、一見すると全然大丈夫に見えるけど、実はギリギリの所まできているっぽい。今より2~3割アクセスが増えた頃に503頻発状態になりそう。。。

一番ガクブルなカキコミ

  • 「過去に.htaccessでごちゃごちゃやってた人が鯖のVer.upでエラー頻発するようになって ひどい目にあったって報告あったような。
    共有鯖では、凝らないで運用するのが無難。」

ああ、今の私だ('Α`)
.htaccessをいじりすぎると、サーバー仕様変更の時が怖いな。
昨年の4月にphp-cgiがバージョンアップした時もこのサイトは12時間くらい接続不能だったし。

サーバーのお引っ越し、もしくは複数サーバーでの運用を考える時期に来てしまったのか。。。

今回試したディレクティブ

話を元に戻して、今回拾ったディレクティブは以下。

# 1 YEAR
<FilesMatch "\.(ico|pdf|flv)$">
Header set Cache-Control "max-age=29030400, public"
</FilesMatch>
# 1 WEEK
<FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
# 2 DAYS
<FilesMatch "\.(xml|txt|css|js)$">
Header set Cache-Control "max-age=172800, proxy-revalidate"
</FilesMatch>
# 1 MIN
<FilesMatch "\.(html|htm|php)$">
Header set Cache-Control "max-age=60, private, proxy-revalidate"
</FilesMatch>
http://hain.jp/index.php/tech-j/2007/12/17/.htaccess%E3%81%A0%E3%81%91%E3%81%A7%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB

ExpiresActive On
#every filetype not listed below gets cached 300
ExpiresDefault A300
# YEAR
ExpiresByType image/x-icon A29030400
# MONTH
ExpiresByType video/x-flv A2419200
ExpiresByType application/pdf A2419200
# WEEK
ExpiresByType image/gif A604800
ExpiresByType image/png A604800
ExpiresByType image/jpeg A604800
ExpiresByType application/x-shockwave-flash A604800
#hour
ExpiresByType application/x-javascript A3600
ExpiresByType application/xml A3600
ExpiresByType text/css A3600
ExpiresByType text/plain A3600
#5 minutes
ExpiresByType text/html A300
http://www.codingforums.com/archive/index.php/t-105355.html

Example 1
# YEAR
<FilesMatch "\.(ico)$">
Header set Cache-Control "max-age=29030400, public"
</FilesMatch>
# MONTH
<FilesMatch "\.(flv|pdf)$">
Header set Cache-Control "max-age=2419200, public"
</FilesMatch>
# WEEK
<FilesMatch "\.(swf|css)$">
Header set Cache-Control "max-age=604800, private, must-revalidate"
</FilesMatch>
# NEVER CACHE
<FilesMatch "\.(html|cgi|php|htm)$">
Header set Expires "Fri, 04 Aug 1978 12:00:00 GMT"
Header set Cache-Control "no-cache, no-store, must-revalidate,max-age=0, proxy-revalidate, no-transform"
Header set Pragma "no-cache"
</FilesMatch>
Example 2
<FilesMatch "\.(flv|ico)$">
Header set Cache-Control "max-age=29030400, public"
</FilesMatch>
<FilesMatch "\.(pdf|swf)$">
Header set Cache-Control "max-age=3600, public"
</FilesMatch>
<FilesMatch "\.(html)$">
Header set Expires "Fri, 04 Aug 1978 12:00:00 GMT"
Header set Cache-Control "no-cache, no-store, must-revalidate,max-age=0, proxy-revalidate, no-transform"
Header set Pragma "no-cache"
</FilesMatch>
<FilesMatch "\.(js|css|xml)$">
Header set Cache-Control "max-age=3600, private, must-revalidate"
</FilesMatch>
<FilesMatch "\.(jpg|jpeg|png|txt|gif)$">
Header set Cache-Control "max-age=3600, public"
</FilesMatch>

This solution is the best, a hybrid utilizing both modules
# Turn on Expires and set default to 0
ExpiresActive On
ExpiresDefault A0

# Set up caching on media files for 1 year (forever?)
<FilesMatch "\.(ico|flv|pdf|mov|mp3|wmv|ppt)$">
ExpiresDefault A29030400
Header append Cache-Control "public"
</FilesMatch>

# Set up caching on media files for 1 week
<FilesMatch "\.(gif|jpg|jpeg|png|swf)$">
ExpiresDefault A604800
Header append Cache-Control "public, proxy-revalidate"
</FilesMatch>

# Set up 2 Hour caching on commonly updated files
<FilesMatch "\.(xml|txt|html|js|css)$">
ExpiresDefault A7200
Header append Cache-Control "private, proxy-revalidate, must-revalidate"
</FilesMatch>

# Force no caching for dynamic files
<FilesMatch "\.(php|cgi|pl|htm)$">
ExpiresDefault A0
Header set Cache-Control "no-cache, no-store, must-revalidate,max-age=0, proxy-revalidate, no-transform"
Header set Pragma "no-cache"
</FilesMatch>
http://www.codingforums.com/archive/index.php/t-105355.html

ExpiresActive On
ExpiresDefault A300
ExpiresByType image/x-icon A2592000
ExpiresByType application/x-javascript A2592000
ExpiresByType text/css A2592000
ExpiresByType image/gif A604800
ExpiresByType image/png A604800
ExpiresByType image/jpeg A604800
ExpiresByType text/plain A604800
ExpiresByType application/x-shockwave-flash A604800
ExpiresByType video/x-flv A604800
ExpiresByType application/pdf A604800
ExpiresByType text/html A300


#CODE
# YEAR
<FilesMatch "\.(flv|gif|ico)$">
   Header set Cache-Control "max-age=2592000"
</FilesMatch>

# WEEK
<FilesMatch "\.(pdf|swf|js|css)$">
   Header set Cache-Control "max-age=604800"
</FilesMatch>

# NEVER CACHE
<FilesMatch "\.(html|cgi|php|htm)$">
   Header set Expires "Thu, 01 Dec 2003 16:00:00 GMT"
   Header set Cache-Control "no-store, no-cache,must-revalidate"
   Header set Pragma "no-cache"
</FilesMatch>
http://forums.htmlhelp.com/lofiversion/index.php/t1768.html

▲これらは本来なら1.3系でも動くらしい。
でもさくらでは無理でした。

あとがき

サーバー設定、奥が深いw

自宅サーバとか立てて設定に夢中になっちゃう人の気持ちが少しずつ解りかけてきた今日この頃。サーバーって、設定によってこんなに個性が出るものなんだと実感中。