rufiyaa
@rufiyaa

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Django-allauthの生成するURLのドメインが127.0.0.1

解決したいこと

Djangoでログインを必要とするWebアプリを作っています。
認証にはDjango-allauthによるメール認証を使用しています。
新規登録・パスワード再設定の際には、メールアドレスを確認するため、
本登録画面・パスワード再設定画面へのリンクをメールで送信する方式をとっています。

ローカルの開発環境で問題なく動作したので、本番環境に投入したところ、
Django-allauthはメール内のリンクとして「https ://127.0.0.1:8000/」から始まるものを生成してしまいました。
当然、自分で取得した本番環境のドメインのURLを生成してもらわないといけないので、困っています。
本番環境のドメインをどこに設定すればよいか教えてください。

当方、非エンジニアの個人開発なので、提供情報に不十分なところがあるかもしれません。
この情報があったらいいんじゃない?というアドバイスだけでも結構ですので、お願いします。

環境

「動かして学ぶ!Python Django開発入門 第2版」をベースに制作しています。

AWS EC2
Nginx 1.20.0
gunicorn 20.1.0
Django 3.2.7
django-allauth 0.45.0

自分で試したこと

  • settings.pyに関連する設定項目がないか確認したが、それらしい項目は見当たらず。
  • nginx.confに以下のコードがあったためドメイン名に変更してみたが、エラーが出るため元に戻した。
location / {
    proxy_pass http://127.0.0.1:8000/;
}
  • Django管理画面の「サイト」に「example.com」というレコードがあったため、正しいドメイン名に変更したが改善せず。
0

1Answer

settings.py に

USE_X_FORWARDED_HOST = True
ALLOWED_HOSTS = ['example.com'] # 本番環境のドメインを書く

で行けると思います。

1Like

Comments

  1. @rufiyaa

    Questioner

    回答ありがとうございます。
    以前ALLOWED_HOSTS = ['本番ドメイン']としたところ、HTTP400エラーが出ました。
    Debug = Trueにして詳細を確認したところ、以下のものでした。
    Invalid HTTP_HOST header: '127.0.0.1:8000'. You may need to add '127.0.0.1' to ALLOWED_HOSTS.
    これを受けて、ALLOWED_HOSTS = ['本番ドメイン', '127.0.0.1']としています。

    この状態に加えてご指摘いただいたUSE_X_FORWARDED_HOST = Trueを設定したのですが、状況は変わらず、メールにはhttps://127.0.0.1:8000/から始まるURLが記載されました。

    念の為ALLOWED_HOSTSから127.0.0.1を削除して試してみたのですが、やはり従来と同じHTTP400エラーとなりました。
    何かお分かりのことはありますでしょうか。このHTTP400エラーに対する対応に問題があるのでしょうか。
  2. @rufiyaa

    Questioner

    本件解決しました。
    いただいた回答を参考にコードを読み進めていったところ、HTTP_X_FORWARDED_HOSTが反映されていないことに気づきました。
    関連する箇所を確認していったところ、nginx.confにてproxy_set_header Host $http_host;を書き忘れていることに気づき、これを書き込んだところ正しく動作しました。

    ありがとうございました。

Your answer might help someone💌