Djangoでの開発時に掲題の事象が発生した為、解決法をまとめておく。
事象
Djangoで作成したWebサイトにブラウザ経由でアクセスした際に、下記のエラーがDEBUG出力された。
Exception Type: DisallowedHost Exception Value: Invalid HTTP_HOST header: '192.0.2.1:8000'. You may need to add '192.0.2.1' to ALLOWED_HOSTS.
発生環境
CentOS 7.3, nginx/1.12.2, 10.2.19-MariaDB, Python 3.6, (ライブラリ:Django==2.1.3, gunicorn==19.9.0, PyMySQL==0.9.2)
アプリケーションサーバはgunicorn。
影響
Djangoアプリで描画されたWebページにアクセスできない。
対応
下記のsettings.py中のALLOWED_HOSTS変数へアクセスを許可するホスト名(完全修飾)を記載する。
app_root_folder/app_name/settings.py
設定の方法は後述の公式ドキュメントをご参照。ワイルドカード指定も可能であり、その場合は以下のように記載する。
ALLOWED_HOSTS = ['*']
ワイルドカード指定はHTTP Host header attacksのリスクがあり、別途プロキシサーバー等を立てている場合は、そこでホスト名チェックを代替する方法もある。ただ、セキュリティ防御の基本方針はDefence in Depthなので、どちらも環境に合わせて明示するのがベター。(開発時は省略したくなるが)
原因
ALLOWED_HOSTS配列の要素が空だった為。