Django:URL 包含 127.0.0.1 而不是真正的主机名

Django: URLs contain 127.0.0.1 and not the real host-name

I 运行 Apache 后面的 gunicorn 中的 Django(通过 systemd 启动):


<VirtualHost *:443>
    ...
    <Location /relayrace/>
            ProxyPass unix:/run/gunicorn-traverse.sock|http://127.0.0.1/
            ProxyPassReverse unix:/run/gunicorn-traverse.sock|http://127.0.0.1/
    </Location>

但是 URL(例如 django-allauth 创建的电子邮件)使用 127.0.0.1 而不是真正的 FQDN。

如何解决这个问题?

设置 USE_X_FORWARDED_HOST and SECURE_PROXY_SSL_HEADER 后有效:

settings.py:

USE_X_FORWARDED_HOST = True
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

而且我需要告诉 Apache 提供转发协议:

    <Location /relayrace/>
        RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
        ProxyPass unix:/run/gunicorn-traverse.sock|http://127.0.0.1/
        ProxyPassReverse unix:/run/gunicorn-traverse.sock|http://127.0.0.1/
    </Location>

我用 config_view 来调试它。