<?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/"
	>

<channel>
	<title>さくらたんどっとびーず &#187; nginx</title>
	<atom:link href="http://sakuratan.biz/archives/category/nginx/feed" rel="self" type="application/rss+xml" />
	<link>http://sakuratan.biz</link>
	<description>モロモロ工事中です</description>
	<lastBuildDate>Sun, 25 Jun 2023 12:51:51 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>さくらVPSとnginxリバースプロクシで最速WordPressブログを作る方法（ベンチマーク付き）</title>
		<link>http://sakuratan.biz/archives/4582</link>
		<comments>http://sakuratan.biz/archives/4582#comments</comments>
		<pubDate>Wed, 07 Sep 2011 06:07:01 +0000</pubDate>
		<dc:creator>さくら</dc:creator>
				<category><![CDATA[nginx]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://sakuratan.biz/?p=4582</guid>
		<description><![CDATA[負荷的に厳しくなってきたので sakuratan.biz を Apache（さくらスタンダード）から nginx（さくら VPS 512）に移転しました。 頻発していた 503 もほとんど出なくなって快適です。 Apache から VPS の nginx へ WordPress を移転したいと考えている人もいるかなーと思いましたので、さくら VPS で nginx リバースプロクシを使った Wor... <div style="margin-top:1ex"><a href="http://sakuratan.biz/archives/4582">(続きを読む)</a></div>]]></description>
			<content:encoded><![CDATA[<p>負荷的に厳しくなってきたので sakuratan.biz を Apache（さくらスタンダード）から nginx（さくら VPS 512）に移転しました。<br />
頻発していた 503 もほとんど出なくなって快適です。</p>
<p>Apache から VPS の nginx へ WordPress を移転したいと考えている人もいるかなーと思いましたので、<a href="http://vps.sakura.ad.jp/">さくら VPS</a> で nginx リバースプロクシを使った WordPress ブログの構築する方法をがっつり書いていきたいと思います。</p>
<p style="margin:2em 0 3em;padding-left:4em"><img src="http://sakuratan.biz/blog/wp-content/uploads/2011/09/logos.png" alt="" title="WordPress / NGiNX" width="434" height="138" class="aligncenter size-full wp-image-4745" /></p>
<p>結構長文になってしまいましたので、先に索引を載せときます。</p>
<ol>
<li>nginx とは</li>
<li>nginx が速い理由</li>
<li>リバースプロクシ</li>
<li>さくら VPS にインストールするシステム構成</li>
<li>EPEL パッケージリポジトリのインストール</li>
<li>MySQL のインストール</li>
<li>PHP のインストール</li>
<li>nginx のインストール</li>
<li>nginx と PHP FastCGI の設定</li>
<li>WordPress のインストール</li>
<li>Nginx Proxy Cache Purge WordPress プラグインのインストール</li>
<li>ベンチマーク</li>
<li>参考サイト</li>
</ol>
<p>nginx が速い速いとだけ言われてもいまいち腑に落ちない方もいらっしゃるかと思いましたので、最初の方の章は nginx 自体の説明にしました。前置きは置いといてとりあえずインストール方法を知りたい方は、『さくら VPS にインストールするシステム構成』あたりからどうぞ。ちなみにさくら VPS は CentOS ですので、他のレン鯖でも OS が同じなら同じ手順でインスコできると思います。</p>
<p>サンプルのファイルをまとめた zip を <a href="/nginx/nginx-examples.zip">nginx-examples.zip</a> に置いてますので、とりあえずファイルだけ欲しいって人はこちらをどうぞ。</p>
<p>あと、なんとなくあった方が良いかなーと思いまして Apache と nginx のベンチマークもしてみました。結果の方は最後の方に載せてますが、結論だけ言えば nginx は多い日も安心の<strike>ロリエセーフティロング</strike>高性能です。</p>
<h3>nginx とは</h3>
<p>まず最初に <a href="http://wiki.nginx.org/NginxJa">nginx の wiki</a> から引用します。</p>
<blockquote><p>
Nginxはその高いパフォーマンスと安定性、豊富な機能、設定の容易さ、消費リソースの低さで知られています。</p>
<p>Nginxは<a href="http://www.kegel.com/c10k.html">C10K問題</a>に取り組むべく開発された一握りのサーバのうちの一つです。従来のサーバとは異なり、Nginxはリクエストの処理をスレッドに依存していません。その代わりにもっとスケーラブルな（非同期の）イベント駆動アーキテクチャを使用しています。このアーキテクチャはメモリ使用量が少ないだけでなく、最も重要な事として、稼働時のメモリ使用量が予測可能であるということです。</p>
<p><cite><a href="http://wiki.nginx.org/NginxJa">http://wiki.nginx.org/NginxJa</a></cite>
</p></blockquote>
<p>C10K問題とは、ハードウェアは安くなって大量のクライアントを同時処理できるようになったけど、OS やサーバプログラムの実装がボトルネックになってて1万（=10K）クライアント以上は処理できない(*´・ω・)(・ω・｀*)ﾈｰ、という問題です。（<a href="http://www.atmarkit.co.jp/news/analysis/200701/09/c10k.html">Web2.0の先にあるC10K問題 － ＠IT</a> の説明が分かりやすいと思いますので詳しく知りたい方はどうぞ。）</p>
<p>上の概要に書いてますが、nginx はC10K問題を解決すべく作られた新しいウェブサーバですので、Apache 等の従来からあるウェブサーバと比べて本質的にスケーラブルなシステムとなっています。</p>
<h3>nginx が速い理由</h3>
<p>開発されてる方でしたら、nginx が速いと言う話をどこかで聞いた事があるかと思います。</p>
<p>実際のところ nginx が速いと言うよりも、nginx は Apache などの従来のサーバと比べ少ないリソースで複数の HTTP リクエストを処理できるように設計されているため、サーバが負荷の高い状態になっても性能が劣化しにくい、と言うのがより正確だと思います。</p>
<p>ということで、nginx が高負荷状態に強い仕組みについて簡単に説明しようと思います。</p>
<hr class="linebreak" />
<p>nginx では外部からのネットワークコネクションを受け付けるプロセスをマスタープロセス、HTTP リクエストに対するレスポンスを返すプロセスをワーカープロセスと呼びます。マスタープロセスはコネクションを受け取ると稼働中のワーカープロセスのいずれかに HTTP レスポンスを返す処理を行うよう指示します。（マスター／ワーカープロセス構成自体は TCP/IP ベースの Unix daemon の一般的な構成ですので速い理由と関係ありません。）</p>
<p>nginx のワーカープロセスは（kqueue (FreeBSD 4.1以降)／epoll (Linux 2.6以降) などのカーネルによって異なる）非同期 I/O 通知メソッドを使い、複数のリクエスト／レスポンスを一つのプロセスで平行して同時に処理します。</p>
<div style="border:solid 1px #eee;padding 0 1em">
<img src="http://sakuratan.biz/blog/wp-content/uploads/2011/08/f2.png" alt="" title="nginx" width="511" height="199" class="aligncenter size-full wp-image-4634" />
</div>
<hr class="thin-linebreak" />
<p>一方、Apache などの従来のウェブサーバでは、リクエストを応答するプロセスは同期 I/O を使います。同期 I/O を使うと一つのワーカープロセスは複数の HTTP リクエストを同時に処理することができません。複数の HTTP リクエストを処理する場合は、先行するリクエストが完了するのを待って順次処理していきます。</p>
<div style="border:solid 1px #eee;padding 0 1em">
<img src="http://sakuratan.biz/blog/wp-content/uploads/2011/08/f1.png" alt="" title="Apache" width="528" height="196" class="aligncenter size-full wp-image-4633" />
</div>
<hr class="thin-linebreak" />
<p>Apache の場合、サーバにアクセスが集中し応答すべきリクエストが増えてきて、既に起動しているワーカープロセスだけでは処理が追いつかなくなると、新しいワーカープロセスを起動したり／新しいワーカープロセスを起動できない場合応答中のレスポンスの完了を待ってからリクエスト処理を開始することになります。</p>
<p>ワーカープロセスはそれぞれある程度のメモリを使用しますので、システムリソースから決まる同時応答可能な上限を越えると（スラッシングが発生するなどの原因で）ウェブサーバ全体の性能が急激に悪化します。（MPM worker を使って Apache をマルチスレッドで動かす場合も、1スレッドに対してそれなりのシステムリソースが必要となりますので、高負荷状態においてこの問題はそれほど改善しないです。）</p>
<p>それに対して nginx の場合、非同期 I/O を使って一つ（設定により増やせますがあくまで少数）のワーカープロセスですべてのリクエストを処理するよう設計されいます。必要なシステムリソースが少ないので、Apache では性能が悪化する局面でも極端に性能が悪化しません。なので nginx は速い、ということになります。</p>
<hr class="linebreak" />
<p>ちなみにワーカープロセスが行うレスポンス処理については Apache と nginx で特に性能に差がある訳ではありませんので、1リクエスト当たりの実処理時間はだいたい同じです。（一部のベンチマークではレスポンス自体は nginx の方が遅いという数字が出ていますが、自分のサイトで測った限りでは意味のある差はでませんでした。いずれにしても今時のサーバだと、ワーカープロセスの性能の優劣は特に気にする必要はないと思います。）</p>
<hr class="linebreak" />
<div style="padding:0 2em">
<div class="AA2" style="margin-bottom:2em"> 　_______________________<br />
 　　　　　＜○√　　くそっもうだめか・・!!<br />
 　　　　　 くく　　　リクエストが多すぎる、Apacheでは処理しきれない・・・ </div>
<div class="AA2" style="margin-bottom:2em"> 　________________________________<br />
 　　　　　　　　~|<br />
 　　　　　　　　　＼○　　　　大丈夫か？BOY<br />
 　　　　　 　 　　　 ∥＼<br />
 　　　<○>　　　　 ∥／<br />
 　　　 ∥　　　　／ |<br />
 　　 　>>　　　　＼ |<br />
 　nginxさん！！</div>
</div>
<h3>リバースプロクシ</h3>
<p>リバースプロクシとは、ざっくり言いますとウェブサーバをまるごとキャッシュする機能です。</p>
<p>WordPress などを動かす場合、アプリケーションを実行する部分がウェブサーバのボトルネックとなります。このボトルネックを解消するために、<a href="http://wordpress.org/extend/plugins/wp-super-cache/">WP Super Cache</a> などのアプリケーションレベルでのキャッシュや <a href="http://httpd.apache.org/docs/2.2/ja/mod/mod_cache.html">mod_cache</a> などのウェブサーバレベルでのキャッシュがありますがウェブサーバと別にリバースプロクシサーバを用意しプロクシサーバがキャッシュを行うという解決方法もあります。</p>
<hr class="linebreak" />
<p>リバースプロクシを加えたウェブサーバの処理は下図のようになります。</p>
<p><img src="http://sakuratan.biz/blog/wp-content/uploads/2011/09/rp.png" alt="" title="リバースプロクシ" width="500" height="275" class="aligncenter size-full wp-image-4937" style="padding:1em;border: solid 1px #ccc" /></p>
<p>リバースプロクシサーバがフロントエンドとなり、80 番ポートで外部からの HTTP リクエストを受け取ります。<br />
リクエストされた URL がキャッシュされていれば、プロクシサーバはキャッシュ済みのレスポンスを返します。<br />
キャッシュされていなければウェブサーバへリクエストを転送し、レスポンスをキャッシュして返します。</p>
<p>プロクシサーバには PHP スクリプトを実行する機能などは不要ですので、通常ウェブサーバよりも高速に動くよう実装されています。システム構成にリバースプロクシを加えることで全体での処理能力が高くなります。</p>
<p>nginx をリバースプロクシにする場合、リバースプロクシの設定が簡単なので（一つの設定ファイルにフロントエンドのプロクシサーバとバックエンドのウェブサーバの設定を記述できます）、とりあえずリバースプロクシも立てとけって感じです。</p>
<hr class="linebreak" />
<p>ちなみに、nginx をリバースプロクシに、バックエンドのウェブサーバは元から動いていた Apache そのまま、といった構成も可能です。VPS（特にさくら VPS 512）ではメモリサイズ的にこの構成は少し厳しいと思いますが、リソースにある程度余裕がある状況では費用対効果の高い性能改善策になると思います。</p>
<h3>さくら VPS にインストールするシステム構成</h3>
<p>ということで、nginx 自体の説明はこの辺にして、さくら VPS で nginx リバースプロクシを有効にした WordPress ブログのインストール方法について説明していきたいと思います。</p>
<p>まずさくら VPS のデフォルト OS は CentOS でして、OS はそのまま使う設定で話を進めます（VPS に Debian 入れたりする人は nginx の How To 記事なんか見なくても自分で設定できると思いますし）。CentOS ならさくら VPS 以外のサーバでもだいたい同じような手順でインスコできると思います（プレインストールされている yum パッケージの構成やバージョンが違う場合、一部異なる手順になるかもしれませんが）。</p>
<hr class="linebreak" />
<p>インストールするシステム構成はこんな感じです。リバースプロクシ／ウェブサーバともに nginx を使います。nginx には PHP を実行する機能がありませんので、FastCGI サーバとして PHP を実行します。</p>
<ul>
<li>nginx 1.0.6 + Cache Purge plugin</li>
<li>PHP 5.3.3 + FastCGI + eAccelerator</li>
<li>MySQL 5.0.77</li>
<li>WordPress 3.2.1-ja</li>
</ul>
<p>MySQL は yum のパッケージから普通にインスコします。</p>
<p>PHP は最近 yum に追加されたっぽい php53 パッケージを使います。eAccelerator があった方が良いのですが、php53 系列には eAccelerator のパッケージが無いのでこれだけソースからインスコします。</p>
<p>nginx はソースからビルドしてインスコします。nginx のパッケージが EPEL リポジトリにあるのですが、WordPress を動かす場合パッケージ版の nginx には含まれていない Cache Purge プラグインが欲しいので、パッケージは使いません。（nginx にプラグインを追加する場合はビルド時に組み込む必要があります。）</p>
<hr class="linebreak" />
<p>以下、EPEL のインスコ、MySQL インスコ／起動、PHP インスコ、nginx インスコ、nginx / PHP FastCGI の設定、WordPress インスコ…みたいな順番で書いてます。知ってるところは適当に読み飛ばしてください。</p>
<p>特に明記しない場合すべて root で作業を行う前提で書いています。まずサーバにログインして su するか sudo してください。</p>
<h3>EPEL パッケージリポジトリのインストール</h3>
<p>最初に EPEL パッケージをインスコします。<a href="https://fedoraproject.org/wiki/EPEL">EPEL の公式サイト</a> から <a href="http://download.fedoraproject.org/pub/epel/6/i386/epel-release-5-4.noarch.rpm">epel-release-5-4.noarch.rpm</a> をダウンロードして rpm コマンドでインスコします。（EPEL 6 系列は CentOS にはインストールできませんので epel-release-5-4.noarch.rpm もしくはバージョン 5 系列の最新版をインストールしてください。）</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>download.fedoraproject.org<span style="color: #000000; font-weight: bold;">/</span>pub<span style="color: #000000; font-weight: bold;">/</span>epel<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">6</span><span style="color: #000000; font-weight: bold;">/</span>i386<span style="color: #000000; font-weight: bold;">/</span>epel-release-<span style="color: #000000;">5</span>-<span style="color: #000000;">4</span>.noarch.rpm<br />
rpm <span style="color: #660033;">-Uvh</span> epel-release-<span style="color: #000000;">5</span>-<span style="color: #000000;">4</span>.noarch.rpm</div></div>
<p>EPEL パッケージのインスコ方法も含めて、yum 関係で VPS を借りたら最初にしといた方が良い作業が <a href="http://tanaka.sakura.ad.jp/2011/05/centos-linux-apache-php-perl-mysql-lamp.html">ウェブ開発者のための、1時間でできるLAMP環境構築術（CentOS編） &#8211; さくらインターネット創業日記</a>に書かれてますので、よく分からない人はまずはこちらをご覧ください。</p>
<h3>MySQL のインストール</h3>
<p>MySQL は yum パッケージをインスコします。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">yum install</span> mysql mysql-server</div></div>
<p>インスコしたらサーバを起動し、chkconfig でリブート時に MySQL サーバが立ち上がるように設定します。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>mysqld start<br />
<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>chkconfig <span style="color: #660033;">--level</span> <span style="color: #000000;">345</span> mysqld on</div></div>
<h3>PHP のインストール</h3>
<p>yum から php53 パッケージをインスコし、eAccellaretor だけソースからビルドします。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">yum install</span> php53 php53-cli php53-xml php53-mysql php53-mbstring php53-devel</div></div>
<p>php53-xml は要らないような気もしますが検証するの忘れてましたのでとりあえずインストールするということで。</p>
<p>PHP をインスコできたら、eAccellaretor のソースコードを <a href="http://sourceforge.net/projects/eaccelerator/">SourceForge</a> からダウンロードして展開します。（eAccellaretor のビルド作業については、make install 以外は一般ユーザーで作業しても問題ないです。）</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>downloads.sourceforge.net<span style="color: #000000; font-weight: bold;">/</span>sourceforge<span style="color: #000000; font-weight: bold;">/</span>eaccelerator<span style="color: #000000; font-weight: bold;">/</span>eaccelerator-0.9.6.1.zip<br />
<span style="color: #c20cb9; font-weight: bold;">unzip</span> eaccelerator-0.9.6.1.zip</div></div>
<p>ビルドしてインスコします。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #7a0874; font-weight: bold;">cd</span> eaccelerator-0.9.6.1<br />
phpize<br />
.<span style="color: #000000; font-weight: bold;">/</span>configure <span style="color: #660033;">--enable-eaccelerator</span><br />
<span style="color: #c20cb9; font-weight: bold;">make</span><br />
<span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span></div></div>
<p>make install で /usr/lib64/php/modules に eaccelerator.so がコピーされますので、/etc/php.ini の extension に eaccelerator.so を追加します。</p>
<div class="codecolorer-container ini dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">;;;;;;;;;;;;;;;;;;;;;;</span><br />
<span style="color: #666666; font-style: italic;">; Dynamic Extensions ;</span><br />
<span style="color: #666666; font-style: italic;">;;;;;;;;;;;;;;;;;;;;;;</span><br />
<br />
<span style="color: #000099;">extension</span><span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">eaccelerator.so</span></div></div>
<p>デフォルトでは eaccelerator.cache_dir が /tmp/eaccelerator になっていますが個人的に /var/tmp 以下にしたいので、php.ini の末尾に以下の設定を加えます。デフォルトで問題ない場合はそのままでどうぞ。</p>
<div class="codecolorer-container ini dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>eAccelerator<span style="">&#93;</span></span><br />
eaccelerator.cache_dir <span style="color: #000066; font-weight:bold;">=</span> <span style="color: #933;">&quot;/var/tmp/eaccelerator&quot;</span></div></div>
<p>eaccelerator.cache_dir を作ります。パーミッションはサーバによって適当に変えてください。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #660033;">-p</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>eaccelerator<br />
<span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #000000;">777</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>eaccelerator</div></div>
<h3>nginx のインストール</h3>
<p>nginx をソースからビルドするため、ビルドと実行に必要な yum パッケージをインスコします。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">yum</span> <span style="color: #660033;">--enablerepo</span>=epel <span style="color: #c20cb9; font-weight: bold;">install</span> <span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">automake</span> <span style="color: #c20cb9; font-weight: bold;">gcc</span> gcc-c++ rpm-build spawn-fcgi \<br />
pcre-devel zlib-devel openssl-devel libxslt-devel GeoIP-devel gd-devel</div></div>
<p>スクラッチからビルドすると init.d のスクリプト等を用意しないといけないので、nginx のソースパッケージ (SRPM) をダウンロードしてから、最新版の nginx を Cache Purge Plugin 付きでビルドするように nginx.spec を書き換えます。</p>
<p>まず EPEL 配布サイトから nginx の SRPM <a href="http://download.fedora.redhat.com/pub/epel/5/SRPMS/nginx-0.8.54-1.el5.src.rpm">nginx-0.8.54-1.el5.src.rpm</a> をダウンロードします。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>download.fedora.redhat.com<span style="color: #000000; font-weight: bold;">/</span>pub<span style="color: #000000; font-weight: bold;">/</span>epel<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">5</span><span style="color: #000000; font-weight: bold;">/</span>SRPMS<span style="color: #000000; font-weight: bold;">/</span>nginx-0.8.54-<span style="color: #000000;">1</span>.el5.src.rpm</div></div>
<p>SRPM は rpm コマンドでインスコします。/usr/src/redhat/SPEC に nginx.conf が、/usr/src/redhat/SOURCES に SRPM に含まれるファイルが展開されます。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">rpm <span style="color: #660033;">-ivh</span> nginx-0.8.54-<span style="color: #000000;">1</span>.el5.src.rpm</div></div>
<p>rpm -ivh を実行する際に mockbuild ユーザーが存在しないためワーニングが出ますが無視して問題ないです。</p>
<p>SRPM をインスコできたら、/usr/src/redhat/SOURCES に最新版の nginx と Cache Purge plugin をダウンロードします。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>redhat<span style="color: #000000; font-weight: bold;">/</span>SOURCES<br />
<span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>nginx.org<span style="color: #000000; font-weight: bold;">/</span>download<span style="color: #000000; font-weight: bold;">/</span>nginx-1.0.6.tar.gz<br />
<span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>labs.frickle.com<span style="color: #000000; font-weight: bold;">/</span>files<span style="color: #000000; font-weight: bold;">/</span>ngx_cache_purge-<span style="color: #000000;">1.3</span>.tar.gz</div></div>
<p>nginx-1.0.6 で Cache Purge を有効にした nginx.spec を <a href="/nginx/nginx.spec">nginx.spec</a> に置いてますので /usr/src/redhat/SPECS ディレクトリにダウンロードしてからビルドします。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>redhat<span style="color: #000000; font-weight: bold;">/</span>SPECS<br />
<span style="color: #c20cb9; font-weight: bold;">mv</span> nginx.spec nginx.spec.orig<br />
<span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>sakuratan.biz<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>nginx.spec<br />
rpmbuild <span style="color: #660033;">-bb</span> nginx.spec</div></div>
<p>ビルドが終われば /usr/src/redhat/RPMS/x86_64 に nginx-1.0.6-1.x86_64.rpm が作成されますので rpm コマンドでインスコします。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">rpm <span style="color: #660033;">-Uvh</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>redhat<span style="color: #000000; font-weight: bold;">/</span>RPMS<span style="color: #000000; font-weight: bold;">/</span>x86_64<span style="color: #000000; font-weight: bold;">/</span>nginx-1.0.6-<span style="color: #000000;">1</span>.x86_64.rpm</div></div>
<h3>nginx と PHP FastCGI の設定</h3>
<p>必要なものがインスコできたら nginx の設定をしていきます。</p>
<hr class="thin-linebreak" />
<h4>PHP FastCGI サーバ起動用スクリプトの作成</h4>
<p>FastCGI サーバとして PHP を起動するためのスクリプトを <a href="/nginx/php-fastcgi">php-fastcgi</a> に置いていますので、ダウンロードしてから /etc/init.d に置きます。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>sakuratan.biz<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>php-fastcgi<br />
<span style="color: #c20cb9; font-weight: bold;">mv</span> php-fastcgi <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<br />
<span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #000000;">755</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>php-fastcgi</div></div>
<p>PHP FastCGI サーバの実行ユーザー等を変更する場合は、php-fastcgi スクリプトの以下の箇所を変更してください。なお、以下の説明では 9000 番ポート上で PHP FastCGI サーバを起動する設定で例示しています。また、FastCGI サーバとの通信に TCP/IP ではなく Unix ドメインソケットを使用したい場合は php-fastcgi  の spawn-fcgi の起動方法を変更してください（変更方法は各自で調べてください）。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">user</span>=nginx<br />
<span style="color: #007800;">group</span>=nginx<br />
<span style="color: #007800;">host</span>=127.0.0.1<br />
<span style="color: #007800;">port</span>=<span style="color: #000000;">9000</span><br />
<span style="color: #007800;">pidfile</span>=<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>run<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>php-fastcgi.pid<br />
<span style="color: #007800;">numclients</span>=<span style="color: #000000;">5</span></div></div>
<p>pidfile を作成するディレクトリは、PHP FastCGI サーバの実行ユーザー（変更しなければ nginx）から書き込める必要がありますので、php-fastcgi スクリプトをデフォルトのまま使う場合は予め /var/run/nginx ディレクトリを作成する必要があります。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>run<span style="color: #000000; font-weight: bold;">/</span>nginx<br />
<span style="color: #c20cb9; font-weight: bold;">chown</span> nginx:nginx <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>run<span style="color: #000000; font-weight: bold;">/</span>nginx</div></div>
<p>以上の作業が終われば、とりあえず php-fastcgi を起動してみます。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>php-fastcgi start</div></div>
<p>エラーが出る場合は設定を確認してください。</p>
<hr class="thin-linebreak" />
<h4>nginx.conf の修正</h4>
<p>/etc/nginx/nginx.conf にリバースプロクシとバックエンドウェブサーバと PHP FastCGI サーバの設定を追加します。ちょっと長いですが全部貼ります。サーバにファイルを置いてますのでコピペして使いたい方は <a href="/nginx/nginx.conf">nginx.conf</a> をどうぞ。</p>
<div class="codecolorer-container ini dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">user &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;nginx<span style="color: #666666; font-style: italic;">;</span><br />
worker_processes &nbsp;<span style="">1</span><span style="color: #666666; font-style: italic;">;</span><br />
<br />
error_log &nbsp;/var/log/nginx/error.log<span style="color: #666666; font-style: italic;">;</span><br />
#error_log &nbsp;/var/log/nginx/error.log &nbsp;notice<span style="color: #666666; font-style: italic;">;</span><br />
#error_log &nbsp;/var/log/nginx/error.log &nbsp;info<span style="color: #666666; font-style: italic;">;</span><br />
<br />
pid &nbsp; &nbsp; &nbsp; &nbsp;/var/run/nginx.pid<span style="color: #666666; font-style: italic;">;</span><br />
<br />
events <span style="">&#123;</span><br />
&nbsp; &nbsp; worker_connections &nbsp;<span style="">1024</span><span style="color: #666666; font-style: italic;">;</span><br />
<span style="">&#125;</span><br />
<br />
http <span style="">&#123;</span><br />
&nbsp; &nbsp; include &nbsp; &nbsp; &nbsp; /etc/nginx/mime.types<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; default_type &nbsp;application/octet-stream<span style="color: #666666; font-style: italic;">;</span><br />
<br />
&nbsp; &nbsp; log_format &nbsp;main &nbsp;'$remote_addr - $remote_user <span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>$time_local<span style="">&#93;</span></span> <span style="color: #933;">&quot;$request&quot;</span> '<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '$status $body_bytes_sent <span style="color: #933;">&quot;$http_referer&quot;</span> '<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '<span style="color: #933;">&quot;$http_user_agent&quot;</span> <span style="color: #933;">&quot;$http_x_forwarded_for&quot;</span>'<span style="color: #666666; font-style: italic;">;</span><br />
<br />
&nbsp; &nbsp; access_log &nbsp;/var/log/nginx/access.log &nbsp;main<span style="color: #666666; font-style: italic;">;</span><br />
<br />
&nbsp; &nbsp; sendfile &nbsp; &nbsp; &nbsp; &nbsp;on<span style="color: #666666; font-style: italic;">;</span><br />
<br />
&nbsp; &nbsp; keepalive_timeout &nbsp;<span style="">5</span><span style="color: #666666; font-style: italic;">;</span><br />
<br />
&nbsp; &nbsp; gzip &nbsp;on<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; gzip_disable <span style="color: #933;">&quot;MSIE [1-6]\.&quot;</span><span style="color: #666666; font-style: italic;">;</span><br />
<br />
&nbsp; &nbsp; proxy_cache_path &nbsp;/var/cache/nginx levels<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">1:2 keys_zone=czone:4m max_size=50m inactive=120m</span><span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; proxy_temp_path &nbsp; /var/tmp/nginx<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; proxy_cache_key &nbsp; <span style="color: #933;">&quot;$scheme://$host$request_uri&quot;</span><span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; proxy_set_header &nbsp;Host &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $host<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; proxy_set_header &nbsp;X-Real-IP &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$remote_addr<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; proxy_set_header &nbsp;X-Forwarded-Host &nbsp; $host<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; proxy_set_header &nbsp;X-Forwarded-Server $host<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; proxy_set_header &nbsp;X-Forwarded-For &nbsp; &nbsp;$proxy_add_x_forwarded_for<span style="color: #666666; font-style: italic;">;</span><br />
<br />
&nbsp; &nbsp; upstream backend <span style="">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; ip_hash<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; server 127.0.0.1:<span style="">8080</span><span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; <span style="">&#125;</span><br />
<br />
&nbsp; &nbsp; server <span style="">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; listen &nbsp; &nbsp; &nbsp; <span style="">80</span><span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; server_name &nbsp;example.com<span style="color: #666666; font-style: italic;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; location / <span style="">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span style="">&#40;</span>$http_user_agent ~* '<span style="">&#40;</span>DoCoMo|J-PHONE|Vodafone|MOT-|UP\.Browser|DDIPOCKET|ASTEL|PDXGW|Palmscape|Xiino|sharp pda browser|Windows CE|L-mode|WILLCOM|SoftBank|Semulator|Vemulator|J-EMULATOR|emobile|mixi-mobile-converter<span style="">&#41;</span>'<span style="">&#41;</span> <span style="">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set $mobile <span style="">1</span><span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span style="">&#40;</span>$http_user_agent ~* '<span style="">&#40;</span>iPhone|iPod|Opera Mini|Android.*Mobile|NetFront|PSP|BlackBerry<span style="">&#41;</span>'<span style="">&#41;</span> <span style="">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set $mobile <span style="">2</span><span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span style="">&#40;</span>$http_cookie ~* <span style="color: #933;">&quot;comment_author_[^=]*=([^%]+)%7C|wordpress_logged_in_[^=]*=([^%]+)%7C&quot;</span><span style="">&#41;</span> <span style="">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set $do_not_cache <span style="">1</span><span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_no_cache &nbsp; &nbsp; $do_not_cache<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_cache_bypass $do_not_cache<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_cache czone<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_cache_key <span style="color: #933;">&quot;$scheme://$host$request_uri$is_args$args$mobile&quot;</span><span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_cache_valid &nbsp;<span style="">200</span> <span style="">301</span> <span style="">302</span> 10m<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_cache_valid &nbsp;<span style="">404</span> 5m<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_cache_use_stale &nbsp;error timeout invalid_header updating<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;http_500 http_502 http_503 http_504<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_pass http://backend<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_redirect http://example.com:<span style="">8080</span>/ /<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; location ~ /purge<span style="">&#40;</span>/.*<span style="">&#41;</span> <span style="">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; allow 127.0.0.1<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; allow 192.0.2.1<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; deny all<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_cache_purge czone <span style="color: #933;">&quot;$scheme://$host$1$is_args$args$mobile&quot;</span><span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="">&#125;</span><br />
&nbsp; &nbsp; <span style="">&#125;</span><br />
<br />
&nbsp; &nbsp; server <span style="">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; listen &nbsp; &nbsp; &nbsp; <span style="">8080</span><span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; server_name &nbsp;example.com<span style="color: #666666; font-style: italic;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; location / <span style="">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; root &nbsp; /var/www/html<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; index &nbsp;index.html index.htm index.php<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; error_page &nbsp;<span style="">404</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/<span style="">404</span>.html<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000099;">location</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> /404.html <span style="">&#123;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; root &nbsp; /usr/share/nginx/html<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; error_page &nbsp; <span style="">500</span> <span style="">502</span> <span style="">503</span> <span style="">504</span> &nbsp;/50x.html<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000099;">location</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> /50x.html <span style="">&#123;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; root &nbsp; /usr/share/nginx/html<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; location ~ \.php$ <span style="">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fastcgi_pass &nbsp; 127.0.0.1:<span style="">9000</span><span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fastcgi_index &nbsp;index.php<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fastcgi_param &nbsp;SCRIPT_FILENAME &nbsp;/var/www/html$fastcgi_script_name<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; include &nbsp; &nbsp; &nbsp; &nbsp;fastcgi_params<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; location ~ /\.ht <span style="">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; deny &nbsp;all<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="">&#125;</span><br />
&nbsp; &nbsp; <span style="">&#125;</span><br />
<br />
&nbsp; &nbsp; # Load config files from the /etc/nginx/conf.d directory<br />
&nbsp; &nbsp; include /etc/nginx/conf.d/*.conf<span style="color: #666666; font-style: italic;">;</span><br />
<span style="">&#125;</span></div></div>
<p>この設定ファイルは以下のサーバ環境用に設定しています。サーバ環境に応じて適宜修正してください。</p>
<ul>
<li>サーバの IP アドレス: 192.0.2.1</li>
<li>ホスト名: example.com</il>
<li>HTML ドキュメントルート: /var/www/html</li>
<li>リバースプロクシのポート: 80</li>
<li>バックエンドウェブサーバのポート: 8080</li>
<li>PHP FastCGI サーバのポート: 9000</li>
</ul>
<p>ドキュメントルートに対して nginx ユーザーから読み込み権限が必要になります。WordPress を使用する場合ウェブディレクトリに対して書き込み権限も必要ですので、ドキュメントルートのオーナーを nginx ユーザー（FastCGI の実行ユーザー）に変更しておく方が良いかもしれません。</p>
<hr class="linebreak" />
<p>リバースプロクシのキャッシュを PC と携帯とスマートフォンで切り替える設定を入れています。不要な方は location / の設定を以下のように変更してください。<a href="http://wppluginsj.sourceforge.jp/ktai_style/">Ktai Style</a> や <a href="http://wordpress.org/extend/plugins/wptouch/">WPTouch</a> を使う場合はそのままで。</p>
<div class="codecolorer-container ini dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; &nbsp; &nbsp; location / <span style="">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_no_cache &nbsp; &nbsp; $do_not_cache<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_cache_bypass $do_not_cache<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_cache czone<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_cache_key <span style="color: #933;">&quot;$scheme://$host$request_uri$is_args$args&quot;</span><span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_cache_valid &nbsp;<span style="">200</span> <span style="">301</span> <span style="">302</span> 10m<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_cache_valid &nbsp;<span style="">404</span> 5m<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_cache_use_stale &nbsp;error timeout invalid_header updating<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;http_500 http_502 http_503 http_504<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_pass http://backend<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_redirect http://example.com:<span style="">8080</span>/ /<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="">&#125;</span></div></div>
<hr class="linebreak" />
<p>設定ファイルを自分の環境用に書き換えたら nginx を動かします。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>nginx start</div></div>
<p>この状態でブラウザからホストにアクセスすると 403 Forbidden が表示されると思います。</p>
<p>ドキュメントルートに空のファイルを作成し、ブラウザでアクセスできるか確認します。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>html<span style="color: #000000; font-weight: bold;">/</span>index.html</div></div>
<p>同じく phpinfo を実行するスクリプトを作成し、ブラウザでアクセスできるか確認します。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">'&lt;?php phpinfo() ?&gt;'</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>html<span style="color: #000000; font-weight: bold;">/</span>phpinfo.php</div></div>
<p>動作が確認できたら index.html と phpinfo.php を削除し（残してても良いですけど）、chkconfig を実行してリブート時に nginx と PHP FastCGI サーバが起動するように設定します。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>chkconfig <span style="color: #660033;">--level</span> <span style="color: #000000;">345</span> nginx on<br />
<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>chkconfig <span style="color: #660033;">--level</span> <span style="color: #000000;">345</span> php-fastcgi on</div></div>
<h3>WordPress のインストール</h3>
<p>PHP の動作が確認できれば、WordPress のインストール自体は Apache の場合とそれほど違いません。</p>
<p>まず VPS ですので mysql コマンドでデータベースを作ります。</p>
<div class="codecolorer-container sql dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">DATABASE</span> wordpress <span style="color: #993333; font-weight: bold;">DEFAULT</span> charset utf8;<br />
<span style="color: #993333; font-weight: bold;">GRANT</span> <span style="color: #993333; font-weight: bold;">ALL</span> <span style="color: #993333; font-weight: bold;">ON</span> wordpress<span style="color: #66cc66;">.*</span> <span style="color: #993333; font-weight: bold;">TO</span> <span style="color: #ff0000;">'wpuser'</span>@<span style="color: #ff0000;">'localhost'</span> <span style="color: #993333; font-weight: bold;">IDENTIFIED</span> <span style="color: #993333; font-weight: bold;">BY</span> <span style="color: #ff0000;">'password'</span>;</div></div>
<p>ja.wordpress.org から<a href="http://ja.wordpress.org/latest-ja.zip">最新版の WordPress</a> をダウンロードして /var/www/nginx に展開します。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>nginx<br />
<span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>ja.wordpress.org<span style="color: #000000; font-weight: bold;">/</span>latest-ja.zip<br />
<span style="color: #c20cb9; font-weight: bold;">unzip</span> <span style="color: #000000; font-weight: bold;">/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>latest-ja.zip<br />
<span style="color: #c20cb9; font-weight: bold;">chown</span> <span style="color: #660033;">-R</span> nginx:nginx wordpress</div></div>
<p>wordpress ディレクトリの wp-config-sample.php を wp-config.php にコピーし、</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #7a0874; font-weight: bold;">cd</span> wordpress<br />
<span style="color: #c20cb9; font-weight: bold;">cp</span> wp-config-sample.php wp-config.php</div></div>
<p>wp-config.php にデータベース設定と FS_METHOD を追加します。FS_METHOD を direct にすると、WordPress プラグインなどのダウンロード時に ftp を使用せず PHP スクリプトから直接ダウンロードするようになります。必須ではありませんが、VPS で ftp の設定をわざわざするのも面倒なので付けてます。</p>
<div class="codecolorer-container php dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'DB_NAME'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'wordpress'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'DB_USER'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'wpuser'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'DB_PASSWORD'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'password'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'FS_METHOD'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'direct'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<hr class="linebreak" />
<p>WordPress の設定が終わったら、ブラウザでアクセスする前に、/wordpress/wp-admin へのアクセスをキャッシュしないよう nginx.conf のリバースプロクシの設定を変更します。（この修正を入れた nginx.conf を <a href="/nginx/nginx-wordpress.conf">nginx-wordpress.conf</a> に置いています。）</p>
<div class="codecolorer-container ini dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; server <span style="">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; listen &nbsp; &nbsp; &nbsp; <span style="">80</span><span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; server_name &nbsp;example.com<span style="color: #666666; font-style: italic;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; location /wordpress/wp-admin/ <span style="">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_pass http://backend<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; location / <span style="">&#123;</span></div></div>
<p>nginx.conf を修正したらリブートします。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>nginx restart</div></div>
<p>これでブラウザから http://example.com/wordpress/ などのインストールした URL にアクセスすると WordPress のインストーラが立ち上がります。</p>
<hr class="thin-linebreak" />
<h4>パーマリンクの変更</h4>
<p>パーマリンクを /wordpress/archives/1 等の形式に変更する場合、WordPress の設定を変える前に nginx.conf のバックエンドサーバの設定を変更する必要があります。</p>
<p>WordPress のインストール先が /wordpress/ で、/wordpress/ 以下のみを WordPress として運用する場合（トップページを WordPress に割り当てない）は、以下のように nginx.conf の location / に if (!-f $request_filename) { } を加え、location /wordpress を加えます。</p>
<div class="codecolorer-container ini dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; server <span style="">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; listen &nbsp; &nbsp; &nbsp; <span style="">8080</span><span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; server_name &nbsp;example.com<span style="color: #666666; font-style: italic;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; location / <span style="">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; root &nbsp; /var/www/nginx<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; index &nbsp;index.html index.htm index.php<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span style="">&#40;</span>-f $request_filename<span style="">&#41;</span> <span style="">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; location /wordpress <span style="">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; root &nbsp; /var/www/nginx<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; index &nbsp;index.html index.htm index.php<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span style="">&#40;</span>!-e $request_filename<span style="">&#41;</span> <span style="">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rewrite ^<span style="">&#40;</span>.+<span style="">&#41;</span>$ &nbsp;/wordpress/index.php?q<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">$1 last</span><span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="">&#125;</span></div></div>
<p>設定を変更したら nginx をリブートします。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>nginx restart</div></div>
<p>nginx をリブートしたら WordPress のパーマリンク設定を変更します。</p>
<p><img src="http://sakuratan.biz/blog/wp-content/uploads/2011/09/permalink.png" alt="" title="パーマリンク設定" width="468" height="355" class="aligncenter size-full wp-image-4734 capture" /></p>
<hr class="thin-linebreak" />
<h4>パーマリンクの変更（WordPress ディレクトリとは別のディレクトリにサイトのホームページを設定する場合）</h4>
<p>なにを言ってるかよく分からないかもしれませんが、WordPress の一般設定で以下のキャプチャのように WordPress のアドレス (URL) とサイトのアドレス (URL) を変えた場合に、パーマリンクの変更を行うための設定方法です。</p>
<p><img src="http://sakuratan.biz/blog/wp-content/uploads/2011/09/wpsite.png" alt="" title="一般設定" width="428" height="234" class="aligncenter size-full wp-image-4737 capture" /></p>
<p>この設定を行う場合、まず wordpress/index.php をコピーして HTML ドキュメントルートに index.php を作ります。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>html<br />
<span style="color: #c20cb9; font-weight: bold;">cp</span> wordprses<span style="color: #000000; font-weight: bold;">/</span>index.php index.php</div></div>
<p>コピーした index.php の require 部分を以下のように書き換えます。</p>
<div class="codecolorer-container php dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #b1b100;">require</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'./wordpress/wp-blog-header.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>nginx.conf のバックエンドサーバの設定を書き換えてから、nginx をリブートします。</p>
<div class="codecolorer-container ini dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; server <span style="">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; listen &nbsp; &nbsp; &nbsp; <span style="">8080</span><span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; server_name &nbsp;example.com<span style="color: #666666; font-style: italic;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; location / <span style="">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; root &nbsp; /var/www/nginx<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; index &nbsp;index.html index.htm index.php<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span style="">&#40;</span>-f $request_filename<span style="">&#41;</span> <span style="">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break<span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span style="">&#40;</span>!-e $request_filename<span style="">&#41;</span> <span style="">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rewrite ^<span style="">&#40;</span>.+<span style="">&#41;</span>$ &nbsp;/index.php?q<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">$1 last</span><span style="color: #666666; font-style: italic;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="">&#125;</span></div></div>
<p>nginx をリブートが完了したら WordPress のパーマリンク設定を変更してください。</p>
<h3>Nginx Proxy Cache Purge WordPress プラグインのインストール</h3>
<p>WordPress のインスコが終わったら <a href="http://wordpress.org/extend/plugins/nginx-proxy-cache-purge/">Nginx Proxy Cache Purge</a> WordPress プラグインを入れます。普通に WordPress のダッシュボードからインスコしてください。</p>
<p>このプラグインを入れると、記事を更新した際に nginx のキャッシュが<strike><a href="http://unkar.org/r/ogame/1260278896">パルスのファルシのルシが</a></strike>パージされるようになります。このプラグインを入れないと nginx のキャッシュタイムアウトまでの間（上の設定だと10分）古い内容で表示されることになりますので、nginx でリバースプロクシ立てたサイトで WordPress を動かすときは一緒にインスコしておいた方が良いです。</p>
<p>ちなみにこのプラグイン、パージ URL が /purge/* 固定（上の nginx の設定はこれに合わせています）でソースコード中にハードコーディングされていますので、パージ URLを変更したい場合はプラグインのソースを書き換える必要があります。上の nginx の設定例ではパージ URL を /purge にしてますので書き換えなくても問題ありませんが、変更したい場合はちょっと不便かもです。</p>
<p>nginx purge とかで WordPress プラグインを検索すると、他にも nginx のキャッシュをパージするための<strike><a href="http://alfalfalfa.com/archives/03994.html">エナがチャンガしてる</a></strike>プラグインが何個かありますので、他に良さげなのがあればそちらをどうぞ。</p>
<p>ちなみに、リバースプロクシでキャッシュしている場合は <a href="http://wordpress.org/extend/plugins/wp-super-cache/">WP Super Cache</a> 等のキャッシュプラグインは要りませんので、他のサイトから移行してきた場合キャッシュ関係のプラグインは無効または削除した方が良いと思います。</p>
<h3>ベンチマーク</h3>
<p>画竜点睛を欠くふいんき（なぜかry）でしたので、さくら VPS 512 上で  httperf でWordPress のベンチマークを取ってみました。ついでにさくらスタンダードの WordPress に対してもベンチマークを取っていますが、こちらはサーバ環境が違いすぎるのであくまでも参考値ということで。</p>
<p>VPS の Apache はほぼデフォルトの設定／VPS の nginx はリバースプロクシありの設定ですので、ぶっちゃけフェアな比較ではありませんがまあこんなもんだと思います。（Apache の mod_cache を有効にするとか性能的な対策が可能ですが、別の VPS 鯖で mod_cache 入れたら過負荷になったときにサーバが落ちた（入れる前は過負荷でも落ちなかった）のでピーク時性能についてはどっちもどっちだと思います。まあ細かいことを言い出したらキリが無いので別の条件でベンチ取りたい人はよろしく〜(^o^)／）</p>
<hr class="linebreak" />
<p>まず最初のグラフは1秒あたりのサーバが返したレスポンス数です。</p>
<p><img src="http://sakuratan.biz/blog/wp-content/uploads/2011/09/graph1.png" alt="" title="レスポンス数／秒" width="417" height="265" class="aligncenter size-full wp-image-4784" /></p>
<p>グラフのY軸がレスポンス数／秒、X軸が1秒あたりにクライアントから同時に発生したリクエスト数です。</p>
<p>nginx が nginx の WordPress トップページに対するベンチマーク、apache(VPS) が VPS 上で動かした Apache の WordPress トップページに対するベンチマーク、apache(STD) がさくらスタンダード上（の Apache）で動かした WordPress トップページに対するベンチマークの値です。</p>
<p>一個だけ見てもよく分からない部分が多々ありますので先にグラフを全部貼ります。</p>
<hr class="linebreak" />
<p>次のグラフは正常に完了したリクエストのレスポンスタイム(ミリ秒）です。</p>
<p><img src="http://sakuratan.biz/blog/wp-content/uploads/2011/09/graph2.png" alt="" title="レスポンスタイム" width="418" height="265" class="aligncenter size-full wp-image-4786" /></p>
<p>同時リクエスト数 70 〜 80 の間で Apache (VPS) のレスポンスタイムが 0 になっているのは、次のグラフのとおりサーバが落ちていたためです。</p>
<hr class="linebreak" />
<p>最後のグラフはエラーが返された数です。</p>
<p><img src="http://sakuratan.biz/blog/wp-content/uploads/2011/09/graph3.png" alt="" title="エラー数" width="418" height="265" class="aligncenter size-full wp-image-4787" /></p>
<p>Apache (VPS) では、リクエスト数（X軸）が70と80の時にエラーが70と80返されています。ベンチマークのリクエストが50を越えたあたりからサーバが処理しきれなくなって、70 〜 80 の間完全に落ちた状態となり、（このベンチマークは連続して行いましたので）90ぐらいから先に送ったリクエストが（タイムアウトなどで）終了し始め、100リクエストのころにはちょっと回復していた感じになっています。</p>
<p>Apache (STD) が微妙にエラーを出してるのは、アクセス制御用のモジュールを入れているからだと思いますが、自分で設定したサーバでは無いので詳細は不明です。</p>
<hr class="linebreak" />
<p>以上から、</p>
<ul>
<li>nginx: 25 〜 44 リクエスト／秒のスループットで、同時リクエスト数が 60 を越えたあたりからレスポンスタイムが悪化（最高値 720.2 ms)、同時リクエスト数が 90 を越えたあたりからエラーが出始める。</li>
<li>Apache (VPS): 13 〜 24 リクエスト／秒のスループットで、同時リクエスト数が 20 を越えたあたりからレスポンスタイムが悪化（最高値 3643.2 ms)、同時リクエスト数が 50 を越えたあたりからエラーが出始め、一時完全に落ちた。</li>
<li>Apache (STD): 18 〜 30 リクエスト／秒のスループットで、レスポンスタイムは線形に悪化していないので詳細不明、割とすぐにエラーを返し始める。共有サーバだし詳細もよく分からんのでご勘弁を。</li>
</ul>
<p>みたいな感じだと思います。</p>
<p>とりあえず VPS で WordPress を動かすなら nginx 使う方が良い(*´・ω・)(・ω・｀*)ﾈｰ、って結果でした。</p>
<p>VPS についてはベンチマーク中に Load Average も計ってたんですが、nginx の最高値が 0.14、Apache の最高値が 132.56 でした。お話にならんって感じです。</p>
<p>VPS サーバで一番メモリを使ってるのは MySQL サーバですので、ここをチューニングするとさらに速くできるかも、です。<br />
nginx のキャッシュに memcached を使ったりもできるのですが、さくら VPS 512 にデータベースやらなんやら全部置いててメモリ的に厳しいので今のところパスしてます。</p>
<p><a href="http://thinkit.co.jp/story/2011/07/15/2185">こちらの記事</a>によると別の VPS に DB サーバを立てたりしてもおkみたいですので、チューニングの余地は結構ある感じです。<br />
<a href="http://www.publickey1.jp/blog/11/11_3.html">さくらクラウド</a>で動かすのもいいかもしれませんねー。</p>
<hr class="linebreak" />
<p>てことで、WordPress が重い重い言ってる人は nginx に乗り換えチャイナYOU！</p>
<h3>参考サイト</h3>
<p>最後に sakuratan.biz を nginx に移行する際に参考にしたページのリンクを貼っときます。この記事のとおり作業してみたけど何かうまくいかないって時は以下のサイトに解決方法があると思います。</p>
<ul>
<li><a href="http://wiki.nginx.org/">wiki.nginx.org</a></li>
<li><a href="http://sakura.off-soft.net/centos/apache-nginx-11-cash-remove.html">apache のかわりにnginxを使ってみる(11) nginxのproxyでキャッシュを削除する方法 | レンタルサーバー・自宅サーバー設定・構築のヒント</a></li>
<li><a href="http://dogmap.jp/2011/02/08/wordpress-nginx/">WordPress サイトに nginx を導入する : dogmap.jp</a></li>
<li><a href="http://library.linode.com/web-servers/nginx/php-fastcgi/centos-5">Nginx and PHP-FastCGI on CentOS 5 – Linode Library</a></li>
<li><a href="http://www.alink.co.jp/tech/blog/2009/09/22/php-php530%E3%81%A7%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%83%A9%E3%83%AC%E3%83%BC%E3%82%BF%E5%B0%8E%E5%85%A5/">[PHP] PHP5.3.0でのアクセラレータ導入 &#8211; ありんく tech-log</a></li>
<li><a href="http://tanaka.sakura.ad.jp/2011/05/centos-linux-apache-php-perl-mysql-lamp.html">ウェブ開発者のための、1時間でできるLAMP環境構築術（CentOS編） &#8211; さくらインターネット創業日記</a></li>
<li><a href="http://na-ga.net/blog/?p=559">Na-ga.net » Blog Archive » httperf man (OUTPUT) &#8211; Linux を中心とした忘却メモ</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://sakuratan.biz/archives/4582/feed</wfw:commentRss>
		<slash:comments>390</slash:comments>
		</item>
	</channel>
</rss>
