前回からのつづきです。
過去記事:WordPressをFascCGI Cacheで爆速仕様にする際の注意点【Nginxインストール編】
ページ目次
NginxとPHP-FPMの設定
NginxのFascCGIプロトコルを通してPHPそしてWordPressを使用するためにNginxの設定ファイルを記述します。
記述ミスや漏れがあるとサーバーエラーが発生してうまく動作しないので気をつけましょう。
【Nginx】 locationディレクティブでFastCGIやWordPressのパーマリンクへの対応
以下の2つのリンク先にサンプルが載っていますので、それを参考にします。
これらをServerディレクティブに記述します。
# 例
# /etc/nginx/mydomain.conf
upstream php {
server unix:/var/run/php-fpm/php-fpm.sock;
}
# 下の3行はserverブロックの外側に
fastcgi_cache_path /var/run/nginx-cache levels=1:2 keys_zone=WORDPRESS:500m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header http_500;
server {
server_name mydomain.com;
root /path/to/root;
#fastcgi_cache start
set $no_cache 0;
# POSTリクエストとURLクエリがアクセスされた場合はキャッシュを使わない
if ($request_method = POST) {
set $no_cache 1;
}
if ($query_string != "") {
set $no_cache 1;
}
# 下記URLを含む場合はキャッシュしない
if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") {
set $no_cache 1;
}
# ログインユーザーとコメント投稿者ではキャッシュを使わない
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
set $no_cache 1;
}
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
include fastcgi_params;
fastcgi_index index.php;
fastcgi_pass php;
fastcgi_cache_bypass $no_cache;
fastcgi_no_cache $no_cache;
fastcgi_cache WORDPRESS;
fastcgi_cache_valid 200 60m;
}
location ~ /purge(/.*) {
fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1";
}
# wordpress.confとrestrictions.confは、WordPress Codexのサンプルをコピペしたもの
include /etc/nginx/wp/wordpress.conf;
include /etc/nginx/wp/restrictions.conf;
}
【PHP-FPM】ユーザーとオーナー、ソケットをNginxの設定と合わせる
user, group,さらに、listen.ownerとlisten.groupにNginxの実行ユーザーとグループを指定します。
listenには、Nginxの設定ファイルで指定したソケットと同じパスを書きます。
;/etc/php-fpm.d/www.conf
user = nginx
group = nginx
;Nginxで指定したUNIXソケット
listen = /var/run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
その他にPHP-FPMの起動サーバー数のチューニングなどもこの設定ファイルで行います。それは下記のエントリーを参考にしていただければと思います。
過去記事: WordPressとRailsでメモリが逼迫して見直した3つの項目
以上の設定が済んだら起動し直して設定ファイルを読み込みます。
$ sudo service nginx restart
$ sudo service php-fpm restart
Internal Server Error (500) が発生する原因
よしこれで設定バッチリ!と、思っていてもエラーが起こる…。なんてことはよくあります、残念ながら。。
Nginx + PHP-FPM + WordPressの組み合わせでよく起こるエラーの原因は大体の場合、以下の3点です。
- NginxとPHP-FPMの実行ユーザーが違う
- WordPressファイル群のパーミッションエラー
- Cacheディレクトリのパーミッションエラー
NginxとPHP-FPMの実行ユーザー
Nginxの実行ユーザ及びグループと、PHP-FPMの設定ファイルに記述したユーザー(及びグループ)が違っているとエラーとなりますので、統一します。
# /etc/nginx/nginx.conf
user nginx nginx
worker_process 2
;/etc/php-fpm.d/www.conf
;上のuser部分に合わせる
user = nginx
owner = nginx
listen.owner = nginx
listen.group = nginx
WordPressファイルのパーミッション
結構よくやりがちなミスなのですが、パーミッションが正しくなくて、NginxがWorsPressファイル群を読み込むことができないとサーバーエラーが発生します。
WordPressのファイル群の所有者とパーミッションをNginxが実行できる環境に整えます。
私はいつも、WordPressファイル群の所有者(所有グループ)をnginxに、パーミッションはwp-content以下を755にしています。
$ sudo chown -R nginx:nginx /path/to/wordpress_root
$ sudo chmod -R 755 /path/to/wordpress_root/wp-content
キャッシュディレクトリのパーミッション
Nginxのエラーログ(/var/log/nginx/error.log)を見て、「opendir() “/var/cache/nginx/うんぬんかんぬん”」的なことが書かれていれば、それはキャッシュディレクトリが開けないことによるエラーです。
この場合は、当該キャッシュディレクトリ(ログに表示されているディレクトリ)の所有者をNginxの実行ユーザにすることで解決します。
$ sudo chown -R nginx:nginx /var/cache/nginx
記事やコメントの投稿ごとにキャッシュをクリアしてくれるプラグインをインストール
NginxやPHP-FPMの設定も問題なく完了し、WordPressがインストールできたら、キャッシュを決まったタイミングで定期的に削除してくれるプラグインを導入します。
WordPressプラグイン: Nginx Helper
使い方
特段複雑な設定はないので、さらっとなぞる程度にしておきます。
- Enable Cache Purgeにチェックして、キャッシュのパージを許可
- nginx FastCGI Cacheを選択
- キャッシュをパージするタイミング及び投稿タイプにチェックを入れる
以上で、FastCGI Cacheを利用したWordPressの設定は完了です。長々とありがとうございました!
“WordPressをFastCGI Cacheで爆速仕様にする際の注意点【Nginx設定編】” への2件の返信
コメントは受け付けていません。