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 […]