プログラミングメモ帳

プログラミングで躓いた部分を中心としたIT土方的メモ。

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