Docker
で、Django app
とjwilder/nginx-proxy
とjrcs/letsencrypt-nginx-proxy-companion
の3コンテナを連携させる時の、Django app
のsettings.py
の設定メモ。(HTTPS対応関係)
jwilder/nginx-proxy
がリバースプロキシとして動作する点に気をつける。これにより、
- クライアント-
nginx-proxy
間: HTTPS nginx-proxy
-Django app
間: HTTP
になる。また、自分の環境では1つのホスト内で、3コンテナを動作させている。
# app/settings.py
...
# Deployment settings(For security)
# まずはnginx-proxyで設定されないもの
# ブラウザにコンテンツのタイプを推定させない。
SECURE_CONTENT_TYPE_NOSNIFF = True
# XSSをブロック
SECURE_BROWSER_XSS_FILTER = True
# 自サイト内でもフレーム使わないので、`SAME ORIGIN`でなく`DENY`にしておいた
X_FRAME_OPTIONS = 'DENY'
# HTTPS接続中のみ、CSRFクッキーを送るようにする
CSRF_COOKIE_SECURE = True
# HTTPS接続中のみ、セッションクッキーを送信する
SESSION_COOKIE_SECURE = True
# 以下は、nginx-proxyが設定するもの
# HTTP接続は、HTTPSにリダイレクトする。nginx-proxyが、
# リダイレクトしてくれるので、不要。Trueにすると無限ループするはず。
SECURE_SSL_REDIRECT = False
# nginx-proxyのdefault.confで設定される。
# SECURE_HSTS_SECONDS = 31536000
# nginx-proxyで各ドメインごとにHSTSの設定を行うので不要だと思う。
# SECURE_HSTS_INCLUDE_SUBDOMAINS = True
# Django appにhttpsでのアクセスか否か判断する方法を伝える
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
なお、ターミナル上で、docker-compose exec nginx-proxy sh
して、コンテナにアタッチした後、cat /etc/nginx/conf.d/default.conf
などで、設定ファイルを見れば確認できる。
コメント