Djangoで作成したwebページにドメイン設定する方法

Djangoで作成したwebページにドメイン設定する方法

Djangoアプリのデプロイが完了したら、ドメインの設定をしてみよう。

以下にマークダウン形式で整形しました。

ドメイン設定・SSL証明書・HTTPS化 完全手順書

概要

この手順書では、お名前.comで取得したドメインをAWS EC2上のDjangoアプリケーションに設定し、SSL証明書を取得してHTTPS化するまでの全工程を説明します。

用語解説

AWS関連用語 • Route53: DNSサービス。ドメインとIPの紐付けを管理。 • ACM: AWS Certificate Manager。SSL証明書を発行・管理。 • IAM: AWSのユーザー・権限管理サービス。 • EC2: AWSの仮想サーバーサービス。

ネットワーク関連用語 • DNS: ドメイン名をIPに変換。 • ネームサーバー: DNSクエリに応答するサーバー。 • Aレコード: ドメインとIPの対応を設定。 • CNAMEレコード: ドメインと別のドメインを対応。 • SSL/TLS証明書: 暗号化通信を可能にする証明書。

手順1: AWS Route53でHosted Zoneを作成

aws route53 create-hosted-zone \ --name higakazuya.online \ --caller-reference $(date +%s)

ネームサーバー確認:

aws route53 list-hosted-zones

手順2: お名前.comでネームサーバー変更 1. お名前.com Navi にログイン 2. 「ドメイン設定」→「ネームサーバーの設定」へ 3. 対象ドメイン選択 4. 「他のネームサーバーを利用」を選択 5. Route53のネームサーバーを4つ入力 6. 設定を保存

反映確認(最大48時間):

dig NS higakazuya.online nslookup higakazuya.online 8.8.8.8

手順3: Route53でAレコード設定

Hosted Zone ID取得

aws route53 list-hosted-zones --query "HostedZones[?Name=='higakazuya.online.'].Id" --output text

Aレコード登録

aws route53 change-resource-record-sets \ --hosted-zone-id /hostedzone/YOUR_ZONE_ID \ --change-batch '{ "Changes": [{ "Action": "CREATE", "ResourceRecordSet": { "Name": "higakazuya.online", "Type": "A", "TTL": 300, "ResourceRecords": [{ "Value": "YOUR_EC2_PUBLIC_IP" }] } }] }'

手順4: SSL証明書の取得(ACM)

aws acm request-certificate \ --domain-name higakazuya.online \ --validation-method DNS \ --region us-east-1

検証用CNAMEレコード確認と追加:

aws acm describe-certificate --certificate-arn YOUR_CERTIFICATE_ARN

aws route53 change-resource-record-sets \ --hosted-zone-id /hostedzone/YOUR_ZONE_ID \ --change-batch '{ "Changes": [{ "Action": "CREATE", "ResourceRecordSet": { "Name": "VALIDATION_RECORD_NAME", "Type": "CNAME", "TTL": 300, "ResourceRecords": [{ "Value": "VALIDATION_RECORD_VALUE" }] } }] }'

ステータス確認:

aws acm describe-certificate --certificate-arn YOUR_CERTIFICATE_ARN

手順5: NginxのHTTPS設定

設定ファイル /etc/nginx/sites-available/kazuya_blog_https

server { listen 80; server_name higakazuya.online; return 301 https://$server_name$request_uri; }

server { listen 443 ssl; server_name higakazuya.online;

ssl_certificate /etc/ssl/certs/higakazuya.online.crt;
ssl_certificate_key /etc/ssl/private/higakazuya.online.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;

location / {
    proxy_pass http://127.0.0.1:8000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

location /static/ {
    alias /home/ubuntu/kazuya_blog/staticfiles/;
}

}

SSL証明書の取得と設定反映

sudo certbot --nginx -d higakazuya.online sudo ln -s /etc/nginx/sites-available/kazuya_blog_https /etc/nginx/sites-enabled/ sudo nginx -t sudo nginx -s reload

手順6: Django設定の更新

production.pyの編集:

SECURE_SSL_REDIRECT = True SESSION_COOKIE_SECURE = True CSRF_COOKIE_SECURE = True SECURE_BROWSER_XSS_FILTER = True SECURE_CONTENT_TYPE_NOSNIFF = True

ALLOWED_HOSTS = ['higakazuya.online', 'www.higakazuya.online']

手順7: 動作確認

nslookup higakazuya.online curl -I http://higakazuya.online curl -I https://higakazuya.online

ブラウザで https://higakazuya.online にアクセスして鍵マークを確認

トラブルシューティング

DNS関連 • 症状: ドメインが解決されない • 確認: dig NS • 対処: お名前.comの設定を再確認

SSL証明書関連 • 症状: 証明書エラー • 確認: describe-certificate • 対処: CNAMEレコードのミスを修正

Nginx関連 • 症状: 502 Bad Gateway • 確認: nginx -t • 対処: Gunicornの起動を確認

完了チェックリスト • Route53でHosted Zone作成完了 • お名前.comでネームサーバー変更完了 • Route53でAレコード設定完了 • ACMでSSL証明書取得完了 • NginxのHTTPS設定完了 • DjangoのHTTPS設定完了 • ブラウザでHTTPS接続確認完了

注意事項 1. DNS反映時間: 最大48時間要する場合あり 2. ACM証明書: 自動更新される(90日) 3. セキュリティ強化: 本番環境ではWAFや監視ツールも検討 4. バックアップ: 設定前に取得を推奨