Nginx+PHP-FPMでWordPressを動かすときの設定(パーマリンク・アクセスログ対策)

Nginx+PHP-FPMでWordPressを動かすときに必要な設定を行う。

必須の設定が1つ、やっておいた方がいい設定が1つの計2つ。
・カスタムパーマリンク用の設定(必須)
・アクセスログ用の設定(できたら)

前提として以下の2つの設定は行ってある。

CentOS6.5でNginx1.7とPHP-FPM5.5(FastCGI)を連携してPHPを動かす設定

Nginxの基本設定

1. default.confの全体像

今回は、Nginxのバーチャルホストの設定ファイル(default.conf)のみ編集する。

sudo vim /etc/nginx/conf.d/default.conf

変更後のdefaulst.confの全体像がこちら。

server {
    listen 80 default_server;

    server_name runble1.com www.runble1.com;
    if ($http_host = www.runble1.com) {
        rewrite (.*) http://runble1.com$1;
    }

    root /var/www/wp;
    index index.php;

    access_log /var/log/nginx/runble1_access.log main;
    error_log /var/log/nginx/runble1_error.log warn;

    #error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    # WordPress用のリダイレクト設定
    try_files $uri $uri/ /index.php?q=$uri&$args;

    # WordPress用アクセスログ設定
    location ~* \.(gif|jpg|png|ico|css|js)$ {
        access_log off;
    }
    location ~ /wp-admin {
        access_log off;
        include php_exec;
    }
    location ~ /wp-content {
    access_log off;
        include php_exec;
    }
    location ~ /wp-includes {
        access_log off;
        include php_exec;
    }
    location ~ /wp-cron.php {
        access_log off;
        include php_exec;
    }
    location ~ /wp-login.php {
        access_log off;
        include php_exec;
    }
    location ~ /wp-comments {
        access_log off;
        include php_exec;
    }

    # 拡張子がphpの場合
    location ~ \.php$ {
        # fastcgi(php-fpmの設定)
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

}

2. カスタムパーマリンクの設定

WordPressでカスタムパーマリンクを使っている場合、Nginxでそれに合わせたリダイレクト処理が必須となる。
この設定を行ってないと 404 Not Foundが返ってきてしまうので注意。

そのために、try_filesディレクティブを追加する。
$uri : URLのホスト名以降の情報(パラメータ情報を除く)
$args : URLのパラメータ情報

# WordPressのパーマリンクに対応
try_files $uri $uri/ /index.php?q=$uri&$args;

try_filesは、ファイルの存在チェックを行い、存在しない場合はリダイレクト処理を行う。
最後のパラメータ「/index.php?q=$uri&$args」は、確実に存在するものにしておく。

存在チェックは、パラメータで指定された順に行っていく。
この記述では、「$uri」→「$uri/」と判定する(最後のパラメータは判定されない)

リダイレクト処理は、最初に存在したパラメータに対して行われる。
「$uri」と「$uri/」が存在しない場合、最後の「/index.php?q=$uri&$args」にリダイレクトされる。

2. アクセスログの設定

必須ではないが設定しておこう。

アクセスログを取得しないファイル用のlocationを作成し、access_logをoffにしているだけ。
php_execはphpを動かすための設定になる(後述)。

# WordPress用アクセスログ設定
location ~* \.(gif|jpg|png|ico|css|js)$ {
    access_log off;
}
location ~ /wp-admin {
    access_log off;
    include php_exec;
}
location ~ /wp-content {
    access_log off;
    include php_exec;
}
location ~ /wp-includes {
    access_log off;
    include php_exec;
}
location ~ /wp-cron.php {
    access_log off;
    include php_exec;
}
location ~ /wp-login.php {
    access_log off;
    include php_exec;
}
location ~ /wp-comments {
    access_log off;
    include php_exec;
}

locationは、そのスコープ内で処理を済ませる必要が有る。
そのため、各location内にPHP-FPMの設定を行わなければならない。

ただ、それだと設定ファイルが長くなるので、その部分だけ別ファイルに移し、includeするやり方が見やすい。

sudo vim /etc/nginx/php_exec

PHP-FPMの設定を記述。

lcation ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

このphp_execファイルをincludeしている。

# PHP-FPM用
include php_exec;

リバースプロキシを設定している人は、この2つ以外もやらないといけない。
それはリバースプロキシを設定するときにやろう。

参考

Nginx + php-fpm でWordpressを動かしてみる | レンタルサーバー・自宅サーバー設定・構築のヒント

Nginx で WordPress を使う時の注意点 | レンタルサーバー・自宅サーバー設定・構築のヒント

コメント

  1. […] Nginx+PHP-FPMでWordPressを動かすときの設定(パーマリンク・アクセスログ対策) […]

タイトルとURLをコピーしました