nginxと.htaccessにおけるパフォーマンスについて

はてなブックマーク - nginxと.htaccessにおけるパフォーマンスについて
[`evernote` not found]
[`fc2` not found]
[`livedoor` not found]
[`yahoo` not found]
[`nifty` not found]

WordPressの組み合わせといえば、最近はnginxを利用することで驚速になるということが周知の事実となってきました。
nginxをWEBサーバーとするWordPress専用のレンタルサーバーも出てきたほどです。
もちろん、自前のサーバーにnginxを導入し自前で驚速WEBサーバーを構築することも可能です。
このブログで推していますPleskでも、nginxが、標準装備となり、ホスト毎にApache、nginxを選択できるようになりました。
nginx+WordPressの組み合わせで最も懸念されることがパーマリンク設定です。
このパーマリンク設定をどうやるかで大きくパフォーマンスに違いが出ることが分かったので記事にしておきます。

パーマリンク設定とは

WordPressはPHPで作られたブログエンジン、いわゆるCMSと言われるWEBサイト管理ソフトです。
この種のソフトでは世界シェアNo1と言ってもいいでしょう。
デザインも多彩で、無料のものから有料のものまでたくさんあり、その企業、そのブログに合わせたデザインを使って思い思いのWEBサイト、ブログを構築できます。
もちろん当ブログもWordPressです。

作った記事などのURLが標準ではSEO的に強くない?付きアドレスになる

WordPressの標準的な各ページはindex.phpというプログラムファイルに引数を渡すことで各ページを構成します。
http://www.hogehoge.dom/index.php?id=1などといったようなアドレスになります。
この?つきアドレスはGoogleなどの検索エンジンでは固定ページとみなされないことが多く、SEO的には強くないと言われています。
それもあって、固定ページアドレスである/で終わるアドレスや、××.htmlのようなhtmlファイルで終わるアドレスにしたいのです。
WordPressでは、これらの固定アドレスに対応するよう作られており、その設定がパーマリンク設定というところで設定が可能です。

今までのApacheがWEBサーバーなら。。。

nginxではなく、ApacheがWEBサーバーであれば、.htaccessというファイルを利用してこのパーマリンク設定を利用することができました。
実際WordPressも、パーマリンク設定を施すと、.htaccessを生成し、それにより静的ページ化が可能なように作られています。

nginxでは使えない!?

大変残念なことに、nginxでは、この.htaccessは使えません。
また、同じ構文をnginxに設定しても受け入れてもらえません。なにせその構文はApache用に記述された構文ですから。
しかし、nginxでもディレクティブ設定でApacheのパーマリンク設定同様の記述は可能です。

あれ?nginxでも、.htaccessが有効な気がしますけど???

Pleskユーザなら、おそらく、nginxを有効にして、.htaccessを入れておくと、そのディレクティブ設定が有効になることが確認できると思います。
そうなのです。使えないわけではなく、むしろ有効なのです。
しかし、これはnginxが、.htaccessを読むわけではないのです。
nginxは、リバースプロキシWEBサーバーと言われ、簡単に言えば、キャッシュサーバーとしても機能します。
Pleskの標準では、nginxは、キャッシュサーバーとして機能し、ApacheWEBサーバーにアクセスして出力結果をキャッシュし、nginxがブラウザにキャッシュしたデータを出力します。
nginxがApacheにアクセスする段階で、.htaccessが働くので機能するわけです。

パフォーマンスはいかほど?

つい最近まで私はほとんどのWordpressのパーマリンク設定は上記を利用して.htaccessで制御してきました。
だから気づきませんでしたが、.htaccessを入れたnginx WordPressと、.htaccessなしのnginx WordPressだと、パフォーマンスが劇的に違います。
体感で倍以上速度に差があります。

ちょっと面倒だけど、nginxのディレクティブ設定をすれば問題なし!

ごく一般的なパーマリンク設定を選択するのであれば、

#ignored: “-” thing used or unknown variable in regex/rew
if (!-f $request_filename){
set $rule_1 1$rule_1;
}
if (!-d $request_filename){
set $rule_1 2$rule_1;
}
if ($request_filename !~ “^.*/wp-admin.*”){
set $rule_1 3$rule_1;
}
if ($rule_1 = “321”){
rewrite /. /index.php last;
}

このディレクティブで動きますので、nginxのディレクティブ設定に入れてみてください。
そして、.htaccessを必ず削除してください!
これで、驚速ワードプレスをお楽しみいただけます!

はてなブックマーク - nginxと.htaccessにおけるパフォーマンスについて
[`evernote` not found]
[`fc2` not found]
[`livedoor` not found]
[`yahoo` not found]
[`nifty` not found]

コメント

SNSでもご購読できます。

PR