WordPressをFastCGI Cacheで爆速仕様にする際の注意点【Nginx設定編】

WordPressを爆速に

前回からのつづきです。

過去記事: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がインストールできたら、キャッシュを決まったタイミングで定期的に削除してくれるプラグインを導入します。

Nginx Helper設定画面

WordPressプラグイン: Nginx Helper

使い方

特段複雑な設定はないので、さらっとなぞる程度にしておきます。

  1. Enable Cache Purgeにチェックして、キャッシュのパージを許可
  2. nginx FastCGI Cacheを選択
  3. キャッシュをパージするタイミング及び投稿タイプにチェックを入れる

Nginx Helper設定

以上で、FastCGI Cacheを利用したWordPressの設定は完了です。長々とありがとうございました!

(Visited 492 times, 1 visits today)

“WordPressをFastCGI Cacheで爆速仕様にする際の注意点【Nginx設定編】” への2件の返信

コメントは受け付けていません。