Netlify + CloudflareプロキシでLet's EncryptのSSL更新を自動化する
公開日: 2021.1.7
Netlify + Cloudflareプロキシ環境下だと、NetlifyでLet's EncryptのSSL更新がエラーになります。今回はこのエラーを回避してSSL更新を自動化する方法をまとめました。
Cloudflareプロキシ環境下でNetlifyのSSLが更新できないワケ
NetlifyでホストしているサイトをCloudflareでプロキシする場合、Let's EncryptのSSL更新をしようとすると「サイトがNetlifyでホストされていません」というエラーが出て、SSLの更新が出来ません。
これは、Netlify側がLet's Encryptの更新ボットを実行した際に、オリジンサーバーのIPアドレスがプロキシしているCloudflareのIPアドレスになってしまい、本来のオリジンサーバー(Netlify)のIPアドレスに到達できないから起こる現象です。
解決策
NetlifyのLet's Encrypt・SSL証明書は、プライマリードメインに対してのみ行い、そのほかのサブドメインについてはエイリアスしているだけなので、この仕組みを利用して、
- 更新用のサブドメインを用意
- 更新用のサブドメインでSSLを更新
- メインドメインは更新用のサブドメインにエイリアス
という方法を使うと、Netlify + Cloudflareプロキシ環境下でも、SSL証明書の更新エラーを回避できます。
更新用のサブドメインを用意&プライマリードメインに
まずは、更新用のサブドメインを用意します。今回は、certというサブドメインを使います。
Netlifyの管理画面で、cert.ドメイン名を追加してプライマリードメインに設定します。続いて、CloudflareのDNSレコードに、certをCNAMEで追加します。この時プロキシはオフにしておきます。
メインドメインを「ドメインエイリアス」にする
この設定をすると、これまで使ってきてwwwあり・なしのメインドメイン(ドメインがexample.comなら、www.example.comとexample.com)がドメインエイリアスになっているはずです。
もし、新規登録する際は、cert.ドメイン名を最初に登録してプライマリードメインにして、wwwあり・なしドメインを追加すれば自動的にドメインエイリアスになります。
この時点で、Netlify + Cloudflareプロキシ環境下で、SSL証明書のエラーを回避する設定が完了です。
cert.ドメインをrobots.txtでブロックする
このままだとcert.ドメインとメインドメインの中身が全く一緒になって、重複コンテンツになってしまうので、対策をします。
Netlifyのリダイレクト設定を使って、メインドメインにリダイレクトしたいところですが、当然ですが、リダイレクト設定をするとSSLの更新でエラーが起こりますので、robots.txtで対策します。
robots.txtはメイン用のものと共用できない(メインドメインもブロックしてしまう)ので、certサブドメイン用に「robots_cert.txt」を用意して、cert.ドメイン名の時だけこちらを使うようにリダイレクト設定をします。
[[redirects]]
from = "http://cert.ドメイン名/robots.txt"
to = "/robots_cert.txt"
status = 200
force = true
注意したいのは、こちらは上書きなのでstatusは301ではなく200番です。
wwwあり・なし対策をする
デフォルトのNetlifyの挙動では、wwwあり・なしドメインを自動的にリダイレクトしてくれますが、今回の方法ではプライマリーが「cert.ドメイン名」になっているため、この機能が使われません。
そこでNetlifyのリダイレクト設定で、wwwあり・なしの設定をnetlify.tomlに記述します。
[[redirects]]
from = "http://www.ドメイン名/*"
to = "https://ドメイン名/:splat"
status = 301
force = true
上の設定は、wwwなしに統一する設定です。wwwありに統一する場合は、記述を逆にします。注意点としては、上記のリダイレクト設定は、リダイレクト設定の最初に書きます。Netlifyのリダイレクト設定は上から順番に適用するからです。
NetlifyのRedirect、Reweiteルールの書き方・処理方法まとめ
静的サイトのデプロイ・ホスティングを無料で使えるNetlifyで、Redirect、Reweiteルールの書き方や処理方法をまとめました。
netlify.tomlを書き換えたら、いつも通りデプロイすれば、リダイレクトが効くはずです。
ここまでの設定ができれば、Netlify + Cloudflareプロキシ環境下でSSLの自動更新ができるようになります。
Netlify + CloudflareプロキシでLet's EncryptのSSL更新を自動化する方法を見てきました。
やや裏技的なやり方ですが、こうした裏技が使えるのも、Netlifyの自由度の高さ故ですね。
価格は記載がある場合を除き、すべて税込みです。
関連キーワード
サーバレスの新着記事
- サーバレスCloudflare R2の料金体系・無料枠まとめ 2024.8.21
- サーバレスCloudflare R2をCyberduckで使う方法 2024.7.31
- サーバレスAIの学習ボット・クローラーからサイトを守るメリットとブロックする方法 2024.7.19
- サーバレスCloudFlare Pagesのビルド環境の違い 2024.5.9
- サーバレスCloudflare D1の料金体系・無料枠まとめ 2024.3.25
- サーバレスCloudflare PagesでNuxt3のビルド時に「ENOENT: no such file or directory」エラーの対象方法 2024.3.21
- サーバレスGitlab CLIでpush時に「glab auth not found」となった際の対処方法 2024.3.19
- サーバレスCloudFlare Workers AIの料金体系・無料枠まとめ 2024.2.2