ELB 配下に Django アプリケーションを置く時の ALLOWED_HOSTS 設定
Django では settings.py の ALLOWED_HOSTS
で指定したホスト名でのみアクセスを受け付けられる。
(確認してないけど、たぶん HTTP リクエストヘッダの Host を見ているとかだと思う)
なので、ここにユーザからアクセスされる際に使われるドメイン名を書いておくのだが、
AWS の Elastic Load Balancer (の Application/Classic Load Balancer) 配下に置き、
かつヘルスチェックの判定条件を「アプリケーションが 200 OK を返す」形で設定する場合は、
以下のような設定が必要になった。
ALLOWED_HOSTS = [ 'example.com' ] import requests try: EC2_PRIVATE_IP = requests.get('http://169.254.169.254/latest/meta-data/local-ipv4', timeout = 0.01).text ALLOWED_HOSTS.append(EC2_PRIVATE_IP) except requests.exceptions.RequestException: pass
ELB が、ヘルスチェック対象インスタンスに振られたプライベートIPを使ってHTTPリクエストを作るっぽい。
参考
Handling EC2 ELB health checks and Django's ALLOWED_HOSTS setting. · GitHub