Django: URL-адреса содержат 127.0.0.1, а не реальное имя хоста

#django #apache #gunicorn

#django #apache #gunicorn

Вопрос:

Я запускаю Django в gunicorn (запущен через systemd) за Apache:

 
<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 , а не реальное полное доменное имя.

Как это исправить?

Ответ №1:

После установки USE_X_FORWARDED_HOST и 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 для отладки этого.