HTTPS化されていないWordPressのサイトにLet's Encryptを導入してHTTPS化する手順についてまとめます。
- 現況確認
- DBバックアップ
- ファイルすべてのバックアップ
- Let's Encryptの有効化
- DBデータの書き換え
- テーマファイルの確認と書き換え
- 動作確認
現況確認
まずは現況の確認を行います。
サーバによっては既にSSLが設定されている場合があります。
Chromeの証明書確認ツールから確認を行います。
共用SSLとよばれる、他のサイトと共用のSSLが設定されている事が多いです。
ついでサイト状況の確認を行います。
実際にサイトを手作業で巡回し、どういったリンク構成になっているか、リンク切れがないかを確認しておきます。
記事数が多い場合にはすべてのリンクをたどることができないかもしれませんが、グローバルナビやサイドバーから、ある程度のページを手作業で辿っておきます。
可能であれば画面を録画しながら巡回しておくと良いです。
ここでリンク切れや表示崩れがあった場合には記録しておきます。こうすることでSSL化によるエラーなのか、それとも元々とあったエラーなのか区別をすることができます。
WordPressへのログインも確認しておきます。特殊なカスタム投稿タイプがあるか、メディア数はどれぐらいか、記事数はどれぐらいか、といったことを確認しておきます。
SSH接続についても確認します。
レンタルサーバによってはSSH接続を許可している場合があります。さくらサーバやエックスサーバ、コアサーバといったメジャーどころは大体の場合にSSH接続が可能です。
SSH接続ができると後述するWP-CLIの利用ができたり、FTPより高速なrsyncを使ったバックアップが可能です。1
SSHが接続できるのであればWP-CLIの利用可否についても確認します。
SSHでログイン、WordPressのインストールディレクトリに移動し、wp post list
などで投稿が表示されることを確認します。
もしWP-CLIが入っていなければ手動でインストールします。
DBバックアップ
DBバックアップを行います。WP-CLIが使えるのであればwp db export
でファイルに書き出しておきます。古いバージョンのWP-CLIではSQLファイルが推測可能なものでしたが、現在はデフォルトでハッシュ付きのファイル名となるためルートにエクスポートしてもアクセスされることはまずありません。ただし終わったら消しておきましょう。
WP-CLIが使えない場合にはプラグインやPhpMyAdminなどでDBのエクスポートを行っておきます。
オススメのプラグインはBack Wp Upです。
ファイルすべてのバックアップ
DBのバックアップを含めてすべてバックアップを取得します。
rsyncコマンドを使ってローカルホストなどにバックアップを行います。
$ rsync -avr user@example.com:~/public_html/wp ~/tmp/backup
Let's Encryptの有効化
コントロールパネルからLet's Encryptを有効化します。
DBデータの書き換え
実際にhttps化を行っていきます。
DBにある http://
で始まっている箇所を https://
に置換します。
外部リンクは http://
のままのほうが良いため、内部リンクのみを置換します。
先立って --dry-run
というコマンド実行の予行演習を行っておきます。
$ wp search-replace search-replace 'http://example.com' 'https://example.com' --skip-columns=guid
テーマファイルの確認と書き換え
テーマファイルの http://
も書き換えも行います。
ローカルにバックアップしたテーマファイルに対してエディタなどで一括置換をかける方法も良いです。
SSH上であればsedを使うことで実行が可能です。
(コアサーバでは find
に -exec
や -ok
が使えませんでした)
$ find . | xargs -n 1 sed -i'' -e 's#http://example.com#https://example.com#g'
リダイレクトの設定
.htaccess
ファイルを書き換え、HTTP接続をHTTPS接続にリダイレクトします。
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
動作確認
書き換えが終了したら動作確認を行います。
確認ポイントは2点あります。
まず証明書が正しく設定されているか、Chromeで証明書を表示させて内容を確認します。
次にデバッグツールのSecurityの項目から正しくSecureとなっているか確認します。
一部にHTTP接続が混ざっていると Mixed Content
として警告が出るため注意が必要です。
リダイレクトについても確認しておきます。
一度HTTPSでつなぐとブラウザが記憶してしまうため、プライベートウィンドウやスマホなどを使い、キャッシュが無い状態で確認を行います。
curlコマンドも便利です。
$ curl -X http://example.com | grep Location
最後に手動でサイトを巡回し、エラーがないことを確認します。
以上が手順となります。お疲れさまでした。
-
厳密にはSSHが使えなくてもrsyncが使えることがありますが、そのケースは稀です。 ↩