モロモロ工事中です

さくらVPSとnginxリバースプロクシで最速WordPressブログを作る方法(ベンチマーク付き)

未分類 — さくら @ 2011/09/07 15:07

負荷的に厳しくなってきたので sakuratan.biz を Apache(さくらスタンダード)から nginx(さくら VPS 512)に移転しました。
頻発していた 503 もほとんど出なくなって快適です。

Apache から VPS の nginx へ WordPress を移転したいと考えている人もいるかなーと思いましたので、さくら VPS で nginx リバースプロクシを使った WordPress ブログの構築する方法をがっつり書いていきたいと思います。

結構長文になってしまいましたので、先に索引を載せときます。

  1. nginx とは
  2. nginx が速い理由
  3. リバースプロクシ
  4. さくら VPS にインストールするシステム構成
  5. EPEL パッケージリポジトリのインストール
  6. MySQL のインストール
  7. PHP のインストール
  8. nginx のインストール
  9. nginx と PHP FastCGI の設定
  10. WordPress のインストール
  11. Nginx Proxy Cache Purge WordPress プラグインのインストール
  12. ベンチマーク
  13. 参考サイト

nginx が速い速いとだけ言われてもいまいち腑に落ちない方もいらっしゃるかと思いましたので、最初の方の章は nginx 自体の説明にしました。前置きは置いといてとりあえずインストール方法を知りたい方は、『さくら VPS にインストールするシステム構成』あたりからどうぞ。ちなみにさくら VPS は CentOS ですので、他のレン鯖でも OS が同じなら同じ手順でインスコできると思います。

サンプルのファイルをまとめた zip を nginx-examples.zip に置いてますので、とりあえずファイルだけ欲しいって人はこちらをどうぞ。

あと、なんとなくあった方が良いかなーと思いまして Apache と nginx のベンチマークもしてみました。結果の方は最後の方に載せてますが、結論だけ言えば nginx は多い日も安心のロリエセーフティロング高性能です。

nginx とは

まず最初に nginx の wiki から引用します。

Nginxはその高いパフォーマンスと安定性、豊富な機能、設定の容易さ、消費リソースの低さで知られています。

NginxはC10K問題に取り組むべく開発された一握りのサーバのうちの一つです。従来のサーバとは異なり、Nginxはリクエストの処理をスレッドに依存していません。その代わりにもっとスケーラブルな(非同期の)イベント駆動アーキテクチャを使用しています。このアーキテクチャはメモリ使用量が少ないだけでなく、最も重要な事として、稼働時のメモリ使用量が予測可能であるということです。

http://wiki.nginx.org/NginxJa

C10K問題とは、ハードウェアは安くなって大量のクライアントを同時処理できるようになったけど、OS やサーバプログラムの実装がボトルネックになってて1万(=10K)クライアント以上は処理できない(*´・ω・)(・ω・`*)ネー、という問題です。(Web2.0の先にあるC10K問題 - @IT の説明が分かりやすいと思いますので詳しく知りたい方はどうぞ。)

上の概要に書いてますが、nginx はC10K問題を解決すべく作られた新しいウェブサーバですので、Apache 等の従来からあるウェブサーバと比べて本質的にスケーラブルなシステムとなっています。

nginx が速い理由

開発されてる方でしたら、nginx が速いと言う話をどこかで聞いた事があるかと思います。

実際のところ nginx が速いと言うよりも、nginx は Apache などの従来のサーバと比べ少ないリソースで複数の HTTP リクエストを処理できるように設計されているため、サーバが負荷の高い状態になっても性能が劣化しにくい、と言うのがより正確だと思います。

ということで、nginx が高負荷状態に強い仕組みについて簡単に説明しようと思います。


nginx では外部からのネットワークコネクションを受け付けるプロセスをマスタープロセス、HTTP リクエストに対するレスポンスを返すプロセスをワーカープロセスと呼びます。マスタープロセスはコネクションを受け取ると稼働中のワーカープロセスのいずれかに HTTP レスポンスを返す処理を行うよう指示します。(マスター/ワーカープロセス構成自体は TCP/IP ベースの Unix daemon の一般的な構成ですので速い理由と関係ありません。)

nginx のワーカープロセスは(kqueue (FreeBSD 4.1以降)/epoll (Linux 2.6以降) などのカーネルによって異なる)非同期 I/O 通知メソッドを使い、複数のリクエスト/レスポンスを一つのプロセスで平行して同時に処理します。


一方、Apache などの従来のウェブサーバでは、リクエストを応答す