Let’s EncryptのSSL証明書 + Nginx (+ Apache) + WordPressを設定した
Webの経路も暗号化がデフォルトになりつつある今日この頃です。
確かに安全なネット閲覧には必須ですよね。
iPhoneからのアクセスもhttps以外は接続できなくなりそうでした。
でもいざ設定しようと思っても、ベリサインなどこの手のサービスはべらぼうに高いですよね。
個人ではなかなか手が出せる額ではありません。
時は来た!?
有難い事に無料でSSL証明書を発行してくれる所があったんです。
おかげでサイトをhttpsで暗号化接続できそうです。
早速設定してみたので、Let’s EncryptのSSL証明書 と Nginx (+ Apache) + WordPressで設定した事を忘備録として残してみます。
とりあえずNginx <-> Apacheでリバースプロシキの設定は済んでいる状態で、WordPressも動いています。
httpのアクセスはhttpsへリダイレクトの設定はまだしないでおきます。
参考にさせて頂いたサイトです
- Let’s EncryptのSSL証明書で、安全なウェブサイトを公開(さくらのナレッジ)
- WordPress をフロント Nginx のリバースプロキシ下で運用する場合に 管理画面を SSL に強制する設定
そのまま使わせて頂いているコードもあります。
ありがとうございます。
まずはさくらのナレッジを参考にしてUbuntuに設定します
nginxは設定済みだったので「certbot-auto のセットアップと証明書の自動生成」というところから始めます。
詳しくはさくらのナレッジのサイトを確認してもらうとして、打ち込んだコマンドだけを。
$ sudo curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
$ sudo chmod 700 /usr/bin/certbot-auto
$ sudo certbot-auto certonly --webroot -w [Ubuntuでのパス] -d [URL] --email [メールアドレス]
NginxのSSL設定
$ sudo emacs /etc/nginx/site-enable/XXXXX
upstream backend {
ip_hash;
server 127.0.0.1:[Apacheへのポート番号];
}
server {
listen 80;
(省略)
}
server {
listen 443 ssl;
server_name [URL];
ssl_certificate /etc/letsencrypt/live/[URL]/cert.pem;
ssl_certificate_key /etc/letsencrypt/live/[URL]/privkey.pem;
root [Ubuntuでのパス];
access_log [適当なパス]/ssl-access.log;
error_log [適当なパス]/ssl-error.log;
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
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_pass http://backend;
}
}
ここまでの設定でphpのファイルは読み込みできたのですが、cssなどの設定が反映されません。
反映するには・・・
WordPressの設定
wp-config.phpに追記が必要です。
HTTP_X_FORWARDED_PROTOを使ってNginxが受けたのはhttpかhttps かを後ろのサービスに伝えます。
$ sudo emacs wp-config.php
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])
&& $_SERVER['HTTP_X_FORWARDED_PROTO'] === "https") {
$_SERVER['HTTPS'] = 'on';
}
define('FORCE_SSL_ADMIN', true);
ここまでで、Webはhttpsでのアクセスで通常と同じように表示されるようになりました。
証明書の自動更新設定
Let’s Encrypt の証明書は有効期限が3ヶ月と短いため、定期的な更新作業が必要になります。
$ sudo crontab -e
50 3 * * 0 certbot-auto renew --post-hook "/usr/sbin/service nginx reload" 1 > /dev/null 2 > /dev/null
有効期限の確認
$ sudo openssl x509 -in /etc/letsencrypt/live/[URL]/cert.pem -noout -dates
有効期限の更新
(情報によると証明書の更新は5回/7日、つまり1週間に5回まででしょうか。)
$ sudo certbot-auto renew –force-renew –post-hook “service nginx reload”
参考にさせて頂いたサイト、そしてLet’s Encryptという素晴らしいサービスのお陰もあり思ったより簡単に設定することが出来ました。
ありがとうございます。