
Apacheで動かしているWordPressをnginxに移行するための具体的な手順の最後。細かな設定をして、最後に移行するまでを記載している。この手順なら数秒のサービス断で移行できるはず。
やろうとしている全体の目次は下記の概要を参照してほしい。
全体の目次
- 概要
- nginxの準備
- PHP-FPMの準備
- 設定と移行 ←今回の記事
WordPress向けnginxの設定
テスト用に編集したnginxの設定ファイルを再度編集する。
# /etc/nginx/conf.d/default.conf
変更内容は参考にしたものと似ているが、微妙に変更している。ポイントをいくつか紹介する。
WordPressのディレクトリを確認
参考にしたSourceForge.JP Magazineの記事ではWordPressのディレクトリが「/var/www/wordpress」になっているが、自分は「/var/www/html/wordpress」なので適時読み替えが必要。地味に忘れるので注意。
パーマリンク設定に注意
トップページは表示されるけれど、それ以外のページで404 Not Foundになるという人はこれをチェック。WordPressのパーマリンク設定のせいかもしれない。下記サイトに詳しく解説があるのでこれを読むべし。
nginx で WordPress のパーマリンク設定を使用する | 暇人じゃない
試行錯誤の末、設定ファイルはこのようになった。
proxy_cache_path /var/cache/nginx/cache1 levels=1 keys_zone=cache1:128m;
proxy_cache cache1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_valid 200 404 30m;
server {
listen 80 default_server;
gzip on;
gzip_disable msie6;
gzip_types text/css application/x-javascript;
location ~ /\. {deny all; access_log off; log_not_found off; }
location = /xmlrpc.php {deny all; access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
location = /favicon.ico { access_log off; log_not_found off; }
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
log_not_found off;
proxy_pass http://unix:/var/run/nginx.sock;
}
set $do_not_cache 0;
if ($uri ~* "\.php$") {
set $do_not_cache 1;
}
set $proxy_cache_key "$scheme$proxy_host$request_uri";
if ($http_user_agent ~* "iPhone") {
# set $do_not_cache 1;
set $proxy_cache_key "iphone::$proxy_cache_key";
}
if ($http_cookie ~ "(wordpress_logged_in_|comment_author_)(.*)") {
# set $do_not_cache 1;
set $proxy_cache_key "$2::$proxy_cache_key";
}
location / {
proxy_no_cache $do_not_cache;
proxy_cache_bypass $do_not_cache;
proxy_cache_key $proxy_cache_key;
proxy_pass http://unix:/var/run/nginx.sock;
}
}
server {
listen unix:/var/run/nginx.sock;
server_name fujitaka.net;
try_files $uri $uri/ /index.php;
#charset koi8-r;
#access_log /var/log/nginx/log/host.access.log main;
location / {
root /var/www/html/wordpress;
index index.php;
if (-f $request_filename) {
expires 30d;
break;
}
if (!-e $request_filename) {
rewrite ^.+?(/wp-.*) $1 last;
rewrite ^.+?(/.*\.php)$ $1 last;
rewrite ^ /index.php last;
}
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
root /var/www/html/wordpress;
expires 24h;
log_not_found off;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root /var/www/html/wordpress;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
設定の確認コマンド
設定の文法ミスは事前に確認コマンドでチェックしておこう。問題なければ下記のように表示される。
# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
apacheの停止とnginxの起動
最後にapacheを停止して、nginxを起動すれば移行完了。Wordpressはapacheの停止とnginxの起動の間しか停止していないので、数秒しかサービスが断しない。個人サイトなら許容範囲と言える。
# /etc/init.d/httpd stop httpd を停止中: [ OK ] # /etc/init.d/nginx start nginx を起動中: [ OK ]
後始末として、OS再起動時にnginxが自動起動するように変更。apacheは自動起動しては困るので停止。
# chkconfig nginx on # chkconfig --list nginx nginx 0:off 1:off 2:on 3:on 4:on 5:on 6:off # chkconfig httpd off # chkconfig --list httpd httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
これでWordPressをApacheからnginxに移行できたはずだ。もし手順にミスや改善点があれば教えてほしい。
fujitaka


コメント
[…] さくらのVPSで運用中のWordPressをApacheからnginxに移行する(その4 設定と移行) | fujitaka.net […]