
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 のセットアップと証明書の自動生成」というところから始めます。
詳しくはさくらのナレッジのサイトを確認してもらうとして、打ち込んだコマンドだけを。
1 2 3 4 5 6 |
$ 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設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
$ 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 かを後ろのサービスに伝えます。
1 2 3 4 5 6 7 8 9 10 |
$ 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ヶ月と短いため、定期的な更新作業が必要になります。
1 2 3 4 5 |
$ 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という素晴らしいサービスのお陰もあり思ったより簡単に設定することが出来ました。
ありがとうございます。
こういうブログもありました。
- Let’s Encryptを設定した時に参考にしたサイト
- Nginxを設定する時に参考にさせて頂いたサイト
- Nginxのキャッシュを手動クリアする
- Nginxを1.6.2にアップデートしたらWordPressのWebサイトが真っ白に
- 「サーバに接続できません」となって焦った件
人気のあるブログ:
- 新しいgemのアップデート方法(rubygems-update)
- Coda2でscssを使うときのお供にcompassをどうぞ。
- NginxをSSL付きで動かすために設定したこと
- bashでUTF-8に設定して日本語表示したり使ったり。Emacsでも。
- Macでフォルダを結合したいとき