EC2上のnginxにHTTPSで接続できるようにした話

大学の友人間でLaravelを使ったWebアプリケーションを開発することになり、開発環境としてEC2上にnginxサーバを構築しました。
この環境にHTTPSで接続できるようにしたのでメモ程度に手順を残しておきます。

Certbotのインストール

今回はLet's Encryptを利用してサーバ証明書を発行してもらうので、Certbotを使ってSSL設定を行っていきます。aptからインストールできるのは便利ですね。

$ sudo apt install certbot python3-certbot-nginx

nginxのconfファイル記述

Certbot/etc/nginx/sites-enabled下にあるファイルのserver_nameディレクティブをサーチし、一致したドメインの存在するファイルに自動で設定を適用してくれます。
なので、confファイル内にserver_nameの項目を登録していきます。

server{
    server_name exaple.com www.example.com;
    root /var/www/hogehoge/public;
    location / {
       ...
    }
}

なお、ここですでにlistenディレクティブが定義されている場合、Certbotを実行する際に「同じポートで既にlistenされてるよ」とのエラーが発生し、設定が適用されなくなってしまうので注意。
confファイルの作成が終わったら設定をリロードします。

$ sudo systemctl reload nginx

Certbotの実行

準備が完了したので、certbotを実行してSSL通信に必要な設定を反映していきます。-dオプションでconfファイルに記述したドメイン名を指定するのを忘れずに。

$ sudo certbot -d example.com -d www.example.com

あとはCertbotが渡されたドメインが実際に存在するかなどをチェックして、自動でconfファイルに追記・変更を加えてくれます。
全ての処理が完了したら、サーバとのHTTPS通信が可能になります。

参考

https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04-ja