【ubuntu16.04】WordPressをhttps運用する方法

 ubuntu16.04のapacheを完全にhttps化します。

https化を検討する

 こちらで述べられているように、googleでは、HTTPSの利用を推奨しています。

 サイトの利用者に安心を提供するという点では、たとえフォームなどによる値の受け渡しがなくとも、https化を検討するべきでしょう。

認証局を選ぶ

 2016年4月12日より、Let’s Encryptの正式サービスが開始しました。

 これは、SSL証明書を無料で取得できるサービスで、商用利用も可能という素晴らしいサービスです。

 有料の認証局も数多くありますが、特に価格によって暗号化強度や安全性が変わるということはありません。

 特段の理由がなければ、Let’s Encryptで十分でしょう。

https化手順

 幸いなことに、certbotという非常に優れたサービスがありますので、こちらを利用します。
今回はubuntu16.04 + apache向けに解説するので、こちらを参照してください。

 導入方法は、certbotの解説ページを見れば一目瞭然なのですが、実際に試してみた手順を解説します。

 letsencryptをインストールします。

$ sudo apt-get install python-letsencrypt-apache 

 apacheオプションを付与してletsencryptを実行します。

$ sudo letsencrypt --apache

 ダイアログが出てくるので、

  1. https化したいサーバーを選択します。
  2. メールアドレスを入力します。
  3. Easyを選択します。(新規にサーバーを立ち上げる場合で、完全にhttps化したい場合はSecureも可)
  4. 規約を承認します。

 Easyでは、httpでもアクセスできるようにします。

 既にウェブサイトを運営している場合、リダイレクト設定をしてしまうと思わぬ不具合が発生することがありますので、必ずEasyで従来の設定を保持したまま、httpsで正常に接続できるかの確認を行ってください。

 新規でウェブサイトを立ち上げる場合は、外部アクセスの心配をしなくても良いかと思いますので、Secureを選択するのが楽ですね。

 https化は以上です。これで、サイトのプロトコルをhttpsに変えて接続できるはずです。

完全https化

 手順でEasyを選択した場合は、httpからhttpsへのリダイレクトを設定する必要があります。

 /etc/wordpress/htaccessに以下を追記します。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

 もしくは、apacheのwordpress.confに記述しても構いません。Apacheチュートリアルによれば、

一般的に、サーバの主設定ファイルにアクセスできない場合を除いて、 .htaccess ファイルの使用は極力避けてください。 世の中には、例えば、ユーザ認証は常に .htaccess ファイルで 行なわなければならない、という誤解が広まっていますが、まったくそんなことは ありません。ユーザ認証の設定はサーバ主設定ファイルに書くことができ、 実際、その方がより良い設定方法です。

Apacheチュートリアルより

 htaccessは手軽な方法ですが、このような問題があるということに注意してください。

 とはいえ、WordPressで既に利用されていますし、プラグインでは殆どの場合でhtaccessファイルが利用されるので、パフォーマンス的な差異はそこまで無いと思います。

 この辺は、好みで設定して構わないかと思います。

自動更新を設定する

 Let’s Encryptの証明書は、有効期間が3か月と、比較的短い期間で切れてしまいますので、これを自動更新するようにしましょう。
 月1回、自動的に更新をチェックしたいので、cron.monthlyに新しいファイルを作成します。

$ cd /etc/cron.monthly/
$ sudo vim renew.sh

 下記を追加し、保存します。

#!/bin/bash

letsencrypt renew
service apache2 reload

 実行権限を設定します。

$ sudo chmod +x renew.sh

 証明書の更新とapacheのリロードだけなので、

$ sudo crontab -e

 でcrontabに直接書いてしまっても良いと思います。

最後に

 https化は、可能な限り小規模なサイトのうちに実施するべきです。大規模なサイトになってくると、検索順位などにも多少影響が出るということが囁かれています。

 また、サイト移行時のクロール等に非常に時間がかかりますので、可能であればサイト立ち上げ時からhttps化を検討することを強くお勧めします。