Home About
ssl, nginx

nginxで複数ドメイン運用と Let's encrypt 引越し&設定覚書

2つのVPSを使って、それぞれに一つのドメインをSSL/TLSサーバ証明書を入れて運用していたが、 諸事情により、これを一つにまとめたのでその時の手順の覚書です。 すごく面倒になると思って、先延ばしにしてきましたが、やってみたら簡単でした。

環境

それぞれ Ubuntu 16.04 (VPS1) と Ubuntu 18.04 (VPS2) を入れた VPS が2台ある状態から VPS2 にウェブ関係を統合。 ウェブサーバは nginx を使用。 Let's encrypt 関連は普通に Certbot を使用。

説明の都合上 VPS1 に当てていたドメインを exampleA.com, VPS2のそれを exampleB.com とします。

基本方針

VPS1 の exampleA.com を 証明書を失効(revoke) させて、VPS2 で新規に証明書を取得。 VPS2 ではすでに exampleB.com を運用しているが、それはそのまま維持(手を付けないことと)する。

VPS1で証明書を失効させる

https://letsencrypt.org/ja/docs/revoking/ の説明の通り。

su
certbot remove --cert-path /etc/letsencrypt/live/exampleA.com/cert.pem

を実行するだけ.

DNSの Aレコード 設定を変更

DNSのAレコード設定を VPS2 のIPアドレスに変更します。 変更が反映されたのを見計らって次の作業を行います。 (今回は数分で設定が反映されていた。)

VPS2 で nginx の設定を行う

nginx の設定を先に済ませておきます。

server ディレクティブを追加して、VPS1から引っ越してきた exampleA.com の設定をします。 nginx -s reload などして反映、その後、 意図通り設定できたか http://exampleA.com/ にブラウザでアクセスして確認しておきます。

証明書の取得

Certbot のページ https://certbot.eff.org/ の ubuntu 18.04, nginx の説明を見ると、単に certbot --nginx せよ、としか書いてない。 ということは、 多分 nginx の設定を Certbot が見て、あとはよきにはからってくれる感じなのかな。 もちろん実行する前に、/etc/nginx/sites-available/default や /etc/letsencrypt はバックアップしておくべし。

su
certbot --nginx

そうすると、複数のドメインが nginx に設定されているので、 Which names would you like to activate HTTPS for? と質問される。 既存の exampleB.com 関係は activate 済みなので、それらの番号は除外。今回引っ越ししてきた exampleA.com 関係を番号のみを(必要なら複数個)指定すればよい。 あとは本当にCertbot が全部設定書きかえだのなんだのをしてくれたようで、証明書取得とウェブサーバの設定は完了しました。ありがとう Certbot。

変更された設定を反映するために nginx -s reload などして反映します。

ほんとにうまく行っているか確認

openssl s_client -connect exampleA.com:443 < /dev/null 2> /dev/null | openssl x509 -text | grep "Not "

これを実行すると、証明書の更新時期がわかるので、これでうまく証明書が設定できたかわかります。(たぶん)

まとめ

トラブって、ウェブが止まるとやだ!と思ってなかなか引っ越し作業ができなかったのですが、 やってみたら簡単でした。ただ運がよかっただけかもしれませんが。 とはいえ、誰もが https を使う時代なので、すごく簡単になっているのはむしろ当たり前なのかもしれません。