WordPress をマルチサイトで使用していると、画像のURLが以下のような感じになると思います。

http://hoge.example.com/files/2011/05/fuga.jpg

しかし、実際にはサーバ上には /files/2011/05/fuga.jpg ってファイルは存在してません。
WordPress が、どうやってこのファイルを処理しているかというと

  1. wp-includes/rewrite.php の WP_Rewrite クラスで wp-includes/ms-files.php?file=2011/05/fuga.jpg に書き換え
  2. wp-includes/ms-files.php で、/wp-content/blogs.dir/{blog ID}/files/2011/05/fuga.jpg を読み込んで出力

つまり、静的ファイルにアクセスするためにわざわざ WordPress のプロセスを起動してるわけですね。
これでは、画像をいっぱい張ってある場合、非常に重たくなります。

てなわけで、以下のように設定してやれば wp-includes/ms-files.php を経由しないで、直接 Web サーバに応答させることができるのでは無いの?ってな按配です。

Apache .htaccess に書いちゃう例

Web サーバとして Apache を採用していて、子サイトのサイト名が hoge.example.com で、ブログIDが2の場合。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^hoge\.example\.com$
RewriteRule ^(/files/.+) %{HTTP_HOST}$1 [C]
RewriteRule ^hoge\.example\.com(/files/.*) /wp-content/blogs.dir/2$1 [L]

※未検証です、多分ちゃんと動くと思うけど

nginx を使用している場合の nginx.conf に書いちゃう例

Web サーバとして nginx を採用していて、WordPress のインストールディレクトリが /path.to で、子サイトのサイト名が hoge.example.com、ブログIDが2の場合。

server {
	listen 80;
	server_name hoge.example.com;
	:
	location /files {
		root    /path.to/wp-content/blogs.dir/2;
		index   index.html;
		access_log  off;
		expires 30d;
		break;
	}
	:
}

これで、静的ファイル出力時に WordPress プロセスを起動しなくても Web サーバが応答してくれますね。
無駄な CPU パワーを使わずに、とてもエコだと思われます。
ただし、子サイトが増えるたびに追記してあげないとなので、注意が必要です。

トラックバック & ピンバック » 表示する

コメント

  • Japan Windows Google Chrome 2011年9月6日 火曜日 7:05 PM

    Googleからお邪魔しました。私もマルチサイトを運営しているのですが、後から考えると構成上マルチにする必要がなかったかなぁと反省しております。
    マルチサイトの高速化は素晴らしいアイデアだと思います。ちなみに教えていただきたいのですが、Apacheでサブドメイン方式で無い場合、どのように
    記述すればよいのでしょうか?
    一見さんで申し訳ないのですが、もし宜しければ教えて下さい。

    • Japan Mac OS Mozilla Firefox 2011年9月28日 水曜日 10:50 PM

      teppeikawaguchi さん、はじめまして。

      こんな感じすかね?

      RewriteEngine On
      RewriteCond %{HTTP_HOST} ^example\.com$
      RewriteRule ^(/hoge/files/.+) %{HTTP_HOST}$1 [C]
      RewriteRule ^example\.com(/hoge/files/.*) /wp-content/blogs.dir/2$1 [L]

      ※未検証です。

  • hatena bookmark 2011年8月19日 金曜日 8:59 AM

    Reader

  • twitter 2011年6月29日 水曜日 9:30 PM

    「WordPress マルチサイト版の高速化アイデア」 http://j.mp/lbk1Hw 少し前の記事ですが。試しにやってみたところ、こうか は ばつぐん だ !

  • delicious 2011年6月10日 金曜日 8:19 PM

    画像リソースのURLリライトをmod_rewriteにやらせる

  • twitter 2011年5月27日 金曜日 11:05 AM

    WordPress マルチサイト版の高速化アイデア : dogmap.jp http://htn.to/hyuqd6

  • twitter 2011年5月18日 水曜日 12:49 AM

    WordPress マルチサイト版の高速化アイデア!!
    http://dogmap.jp/2011/05/06/wordpress-マルチサイト版の高速化アイデア/

  • hatena bookmark 2011年5月8日 日曜日 10:34 PM

    見てる:

  • twitter 2011年5月8日 日曜日 10:34 PM

    見てる: 『WordPress マルチサイト版の高速化アイデア : dogmap.jp』 http://bit.ly/jaaFqZ

  • twitter 2011年5月7日 土曜日 11:26 PM

    WordPress マルチサイト版の高速化アイデア : dogmap.jp http://htn.to/r3vN5z

コメントする

入力いただいたメールアドレスから Gravatar に登録されているアイコンを表示します。
(メールアドレスは公開されません)

改行と段落タグは自動で挿入されます。メールアドレスは表示されません。

:mrgreen: :-P :-D :-) ;-) :-o :-| :-( 8-O :-? 8-) :twisted: :evil: :oops: :roll: :cry: :lol: :-x more »