Let’s EncryptのSSL証明書 + Nginx (+ Apache) + WordPressを設定した

Webの経路も暗号化がデフォルトになりつつある今日この頃です。
確かに安全なネット閲覧には必須ですよね。
iPhoneからのアクセスもhttps以外は接続できなくなりそうでした。
でもいざ設定しようと思っても、ベリサインなどこの手のサービスはべらぼうに高いですよね。
個人ではなかなか手が出せる額ではありません。

時は来た!?

有難い事に無料でSSL証明書を発行してくれる所があったんです。

Let’s Encrypt

おかげでサイトをhttpsで暗号化接続できそうです。

早速設定してみたので、Let’s EncryptのSSL証明書 と Nginx (+ Apache) + WordPressで設定した事を忘備録として残してみます。

とりあえずNginx <-> Apacheでリバースプロシキの設定は済んでいる状態で、WordPressも動いています。
httpのアクセスはhttpsへリダイレクトの設定はまだしないでおきます。

参考にさせて頂いたサイトです

そのまま使わせて頂いているコードもあります。
ありがとうございます。

まずはさくらのナレッジを参考にして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という素晴らしいサービスのお陰もあり思ったより簡単に設定することが出来ました。
ありがとうございます。

鹿児島県の出水市という所に住んでいまして、インターネット周辺で色々活動して行きたいと思ってるところです。 Webサイト作ったり、サーバ設定したり、プログラムしたりしている、釣りと木工好きなMacユーザです。 今はデータサイエンスに興味を持って競馬AI予想を頑張ってます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください