カテゴリ:Django 投稿:2022年6月16日23:37、更新:2022年6月24日0:15
・記事の概要
Djangoでsetting.pyに「SECURE_SSL_REDIRECT=True」としたら「err_too_many_redirects」が発生してしまった場合の解消方法を記載します。
nginx設定も少し編集し本番環境でエラーの解消もHTTPSリダイレクトも可能にします。
・この記事でできるようになること
「SECURE_SSL_REDIRECT= False」にすれば回避もできるのですが、おそらくはhttpのアクセスをhttpsにリダイレクトさせたいという背景だと思うので、それも満たした上での方法での解消方法を記載します。
なので「SECURE_SSL_REDIRECT= True」のままで追記をしていきます。
・実際の手順
①そもそもの原因は何か
「SECURE_SSL_REDIRECT= True」によって、HTTPリクエストはHTTPSに変換されるのですが、Djangoとプロキシ間で再度HTTPになってしまい変換の無限ループのような状態になってしまっています。
②setting.pyを編集
この状態を解消するためにsetting.pyに以下を追記します。
SECURE_SSL_REDIRECT = True
#以下を追記
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
③nginxの.conをf編集
また「/etc/nginx/conf.d/」配下のxxxx.confに以下を追記します。
location / {
...
#以下を追記
proxy_set_header X-Forwarded-Proto https;
}
④再起動
nginxとアプリケーションをそれぞれ再起動してください。
再起動後にエラーが発生していないこと、httpアクセスしhttpsリダイレクトをされていることを確認してみてください。
・まとめ
いかがだったでしょうか。
httpのアクセスをhttpsにリダイレクトさせるケースで「SECURE_SSL_REDIRECT= True」にすればいいよ的な記事はみるのですが、それによってプロキシ間とのやりとりにおけるエラーや解消方法についての記事があまりなかったので今回書いてみました。
皆様のエラーが解消されていれば何よりです。
コメント一覧
コメント投稿ページへ