WordPressをApache環境からNginx環境に引越し

2021-07-05

「Wordpress + Apache」から「Wordpress + Nginx」に移設

国内のVPSサーバーでWordpressを動かしているブログを、AWSのLightsailが安くなっているのでそちらのVPSに移設してみました。移転後のWEBサーバーはApacheからNginxに変更していていて以下のような環境です

  • Cent OS 7.6
  • nginx 1.15
  • php 7.2
  • mariadb 10.3

サーバーには上記の構成でミドルウェアのインストールや設定済みとして手順をまとめていますのでご注意ください。過去の記事でNginx、PHP 7.2、MariaDB 10.x のインストール方法がありますのでご参考にして下さい

移転前のDBをエクスポートする

WordPressを引越しするので、移転前のDBをエクスポートする必要があるので、mysqldumpコマンドで移転するデータベースをダンプします。下記では特定のDBのみエクスポートしています

# 特定のデータベースのみエクスポートする場合
$ mysqldump -u [ユーザー名] -p [DB名] > [エクスポートするファイル名(dump.sql)]

# 全てのデータベースをエクスポートする場合
$ mysqldump -u [ユーザー名] -p --all-databases [データベース名] > [エクスポートするファイル名(alldb.sql)]

移転後のデータベースを作成する

移転後のサーバーでインポートするデータベースとそのデータベースを利用するユーザーを作成します

$ mysql -u root -p
MariaDB [(none)]> CREATE USER '[ユーザー名]'@'localhost' IDENTIFIED BY '[パスワード]';
MariaDB [(none)]> CREATE DATABASE [データベース名];
MariaDB [(none)]> GRANT ALL PRIVILEGES ON [データベース名].* TO [ユーザー名]@localhost IDENTIFIED BY "[パスワード]";
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit

データベースをインポートする

移転後のサーバーでデータベースを作成したら、移転前のサーバーからエクスポートしたデータベースをインポートします

$ mysql -u [ユーザー名] -p [データベース名] < [インポートするデータベースのファイル]

Webコンテンツ関連の配置

移転前のサーバーからWordpressのコンテンツ一式とSSL証明書を新サーバー側にアップロードしておきます。今回は以下のディレクトリにWebコンテンツとSSL証明書をアップロードしました

  • Webコンテンツ:/var/tmp/www
  • SSL証明書:/var/tmp/sslkey

移転後のサーバーのログディレクトリ及びルートディレクトリは以下のように設定します

  • root:/var/www/vhosts/test1/html/
  • log:/var/www/vhosts/test1/log/

アップロードしたWebコンテンツをルートディレクトリにコピーします

# ログディレクトリ及びルートディレクトリを作成します
$ sudo mkdir -p /var/www/vhosts/test1/html/
$ sudo mkdir -p /var/www/vhosts/test1/log/

# Webコンテンツをルートディレクトリにコピーします
$ sudo cp -r /var/tmp/www/* /var/www/vhosts/test1/html/

# パーミションの所有者をnginxに変更します
$ sudo chown -R nginx:nginx /var/www/vhosts

SSL証明書を「/etc/nginx/sslkey」のディレクトリに配置します。
SSL証明書は、Wordpressのコンテンツを配置できたら、Let’s Encryptの無料SSLは発行するのでそれまでの間の一時的に使用するだけです。

移行前のブログはSSL対応しておりHTTPのアクセスはHTTPSに遷移するようにしているので、SSL証明書が必須となっていますいるので移転後も同じように感じで常時HTTPS対応とします。

$ sudo mkdir /etc/nginx/sslkey
$ sudo cp /var/tmp/sslkey/* /etc/nginx/sslkey/

Nginxの設定

Nginxに移行するWordpressの設定をおこないます。Wordpressで使用するドメインはVirtual Hostでの運用としてHTTPのアクセスはHTTPSに転送するようにいます。

設定ファイルはWebで公開されている内容を参考にして作成しているので、使う環境によって変更して下さい

$ sudo vim /etc/nginx/conf.d/vhost.conf
server {
  listen 80;
  server_name www.example.com;
  return 301 https://www.example.com$request_uri;
}

server {
  listen  443 ssl;
  server_name www.example.com;
  root /var/www/vhosts/test1/html/;
  index index.php index.html index.htm;
  charset utf-8;
  access_log /var/www/vhosts/test1/log/example-access_ssl.log main;
  error_log /var/www/vhosts/test1/log/example-error_ssl.log;

  ssl_certificate "/etc/nginx/sslkey/fullchain.pem";
  ssl_certificate_key "/etc/nginx/sslkey/privkey.pem";
  ssl_session_timeout 1d;
  ssl_session_cache shared:SSL:50m;
  ssl_session_tickets on;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers on;

# アップロードファイルサイズ<br>  client_max_body_size 20M;

# wp-config.phpへのアクセス拒否設定
  location ~* /wp-config.php {
    deny all;
  }

# php-fpm用設定
  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_script_name;
    include fastcgi_params;
  }

# パーマリンク
  location  / {
    try_files $uri $uri/ /index.php$args;
  }
}

# 設定ファイルを作ったらNginxとphp-fpmを再起動します
$ sudo systemctl restart nginx
$ sudo systemctl restart php-fpm

ブラウザでブログにアクセスして表示されれば移転作業は完了です

SSL証明書発行(Let’s Encrypt

ブログにアクセスできるようなったら、無料のSSL証明書を発行します

# ディレクトリに移動して「certbot」をダウンロードします
# cd /usr/local/
# git clone https://github.com/certbot/certbot

# certbot の初期設定をおこないます。簡単な質問ですので詳細は省きます
# cd certbot/
# ./certbot-auto 
How would you like to authenticate and install certificates?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Apache Web Server plugin (apache)
2: Nginx Web Server plugin (nginx)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

# 移設したドメインの証明書を発行します
# 書式:./certbot-auto certonly --webroot -w [ルートディレクトリ] -d [ドメイン名] -m [メールアドレス] --agree-tos 
# ./certbot-auto certonly --webroot -w /var/www/vhosts/test1/html/ -d www.example.com -m info@example.com --agree-tos

# 証明書ができているか確認します
# ls /etc/letsencrypt/live/www.example.com/
cert.pem  chain.pem  fullchain.pem  privkey.pem  README

証明書を発行できたら、新しい証明書を指定してNginxを再起動します

$ sudo vim /etc/nginx/conf.d/vhost.conf
# 下記を発行した無料SSLの証明書に変更します
  access_log /var/www/vhosts/test1/log/example-access_ssl.log main;
  error_log /var/www/vhosts/test1/log/example-error_ssl.log;
# ↓
  ssl_certificate "/etc/letsencrypt/live/www.expmle.com/fullchain.pem";
  ssl_certificate_key "/etc/letsencrypt/live/www.expmle.com/privkey.pem";

# 設定を変更したらNginxとphp-fpmを再起動します
$ sudo systemctl restart nginx
$ sudo systemctl restart php-fpm