Nginxで独自ドメインとHTTPS化の設定をする

Nginxで独自ドメインとHTTPS化の設定をする プログラミング

この記事では、AWS EC2(AmazonLinux2023)上にNginx×Flaskで公開したアプリをお名前ドットコムで取得したドメインで独自ドメイン化とHTTPS化を行っていきます。

EC2上にNginx×Flaskでアプリを公開する手順は以下の記事を確認ください。

独自ドメイン化

①サーバのグローバルIPアドレスを確認

AWSマネジメントコンソール>EC2の管理画面にいきグローバルIPアドレスを確認します。

例:43.207.120.123

このIPアドレスが、独自ドメインの向き先になります。


②お名前ドットコムでDNS設定(Aレコード)を変更

1. お名前.comにログイン

ドメイン取得は最安値0円~|ドメイン取るならお名前.com
お名前.comは国内最大級のドメイン公式登録サービスです。ドメイン登録実績3500万件を超えました。人気の.com .net .jpドメインを含め630種類のドメインを取り扱っております。

・「ドメイン一覧」 > 対象のドメイン名を選択
・「DNS設定」 > 「DNSレコード設定を利用する」

2. 以下の設定を追加

種別ホスト名値(IPアドレス)TTL
A@43.207.120.1233600
Awww43.207.120.1233600

※「@」は your-domain.com に対応、wwwwww.your-domain.com に対応します。


③Nginxのドメイン設定

sudo vim /etc/nginx/conf.d/myapp.conf

次のように編集:

server {
    listen 80;
    server_name your-domain.com www.your-domain.com;

    location / {
        proxy_pass <http://127.0.0.1:8000>;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

コマンドで設定確認&反映:

sudo nginx -t
sudo systemctl reload nginx

動作確認画面

your-domain.com でアクセスすると、Flaskの画面が表示される

クラウドサーバーのIPアドレスでアクセスすると、Nginxのデフォルト画面が表示される


HTTPS化

④ファイアウォール/セキュリティグループの開放(AWS EC2の場合)

AWS EC2 の「セキュリティグループ」で以下の インバウンドルールを許可:

タイプポートソース
HTTP800.0.0.0/0
HTTPS4430.0.0.0/0
SSH22自分のIPなど限定(推奨)

⑤HTTPS化(Let’s Encrypt + Certbot)

0.Let’s Encriptとは何か?

無料でSSL/TLS証明書を発行できるサービス。有効期間は3か月と短めなので定期的に更新を行う必要がある。

Let’s Encryptとは?仕組みとメリットを初心者向けにわかりやすく解説! | Study SEC

1. Certbotをインストール(Amazon Linux 2023)

sudo dnf install -y certbot python3-certbot-nginx
  • certbot:Let’s EncryptからSSL証明書を取得するツール
  • python3-certbot-nginx:CertbotがNginxと連携できるようにする拡張。後続の—nginxオプションが使えるようになる

2. Nginxを止めずに、CertbotでSSL証明書を取得&設定

sudo certbot --nginx -d your-domain.com -d www.your-domain.com
  • -nginx:Nginx設定を自動で検出・編集してくれるオプション
  • d:証明書を適用するドメイン(複数指定可能)

--nginx オプションを使ったとき、以下を自動でやってくれます:

  • ドメイン名が server_name にある Nginx 設定を探す
  • listen 443 ssl; を追加してHTTPS用のブロックを作成
  • ssl_certificate / ssl_certificate_key を設定
  • http から https へのリダイレクト設定を追加

成功すると:

  • SSL証明書と鍵が /etc/letsencrypt/ に配置される
  • Nginx設定が自動的に HTTPS 対応に書き換えられる

3. 確認

ブラウザで以下にアクセス:

<https://your-domain.com>

🔒 鍵マークが表示されて、セキュアな通信になっていれば成功!


⑥証明書の自動更新(Amazon Linux 2023推奨)

Amazon Linux 2023 や他の modern Linux では、cron の代わりに systemd-timer(タイマー) が使われるケースが増えています。Certbot もこれに対応しています。

状態を確認:

sudo systemctl list-timers | grep certbot-renew

もし実行予定時間のような行が出れば、すでに自動更新が設定されています:

有効でなければ、有効化する:

sudo systemctl enable --now certbot-renew.timer

有効化後はステータスも確認する。

active (waiting) となっていればOK

Trigger: Sun 2025-02-09 10:42:15 JST; 16h left として、次の実行日時が表示されていればOK

sudo systemctl status certbot-renew.timer

Nginx設定がどうなるか(自動的に以下のようになる)

server {
    listen 80;
    server_name your-domain.com www.your-domain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name your-domain.com www.your-domain.com;

    ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;

    location / {
        proxy_pass <http://127.0.0.1:8000>;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
  • HTTP→HTTPSへ自動リダイレクトされる設定になります。
  • HTTPS部分に証明書のパスが設定され、通信が暗号化されます。

タイトルとURLをコピーしました