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 来调试它。
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 来调试它。