この記事では、AWS EC2(AmazonLinux2023)上にNginx×Flaskで公開したアプリをお名前ドットコムで取得したドメインで独自ドメイン化とHTTPS化を行っていきます。
EC2上にNginx×Flaskでアプリを公開する手順は以下の記事を確認ください。
独自ドメイン化
①サーバのグローバルIPアドレスを確認
AWSマネジメントコンソール>EC2の管理画面にいきグローバルIPアドレスを確認します。
例:43.207.120.123
このIPアドレスが、独自ドメインの向き先になります。
②お名前ドットコムでDNS設定(Aレコード)を変更
1. お名前.comにログイン

・「ドメイン一覧」 > 対象のドメイン名を選択
・「DNS設定」 > 「DNSレコード設定を利用する」
2. 以下の設定を追加
| 種別 | ホスト名 | 値(IPアドレス) | TTL |
|---|---|---|---|
| A | @ | 43.207.120.123 | 3600 |
| A | www | 43.207.120.123 | 3600 |
※「@」は your-domain.com に対応、www は www.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 の「セキュリティグループ」で以下の インバウンドルールを許可:
| タイプ | ポート | ソース |
|---|---|---|
| HTTP | 80 | 0.0.0.0/0 |
| HTTPS | 443 | 0.0.0.0/0 |
| SSH | 22 | 自分の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-nginxcertbot: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.timerNginx設定がどうなるか(自動的に以下のようになる)
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部分に証明書のパスが設定され、通信が暗号化されます。


