Администратор Django перенаправляет на неправильный порт при сохранении - PullRequest
7 голосов
/ 21 декабря 2011

У меня есть проект django, настроенный с помощью nginx + apache. Порт http для внешнего доступа - 20111, который затем перенаправляется на сервер (который имеет внутренний IP-адрес) на порт 80. Таким образом, nginx прослушивает порт 80 (и передает соответствующие запросы в apache на порт 5000).

Теперь первоначальный вход в систему может быть получен извне через http://externalip:20111 - но когда я выполняю действие администратора, например, сохраняю запись, меня перенаправляют на http://externalip/path/to/model - без порта 20111 Результатом является тайм-аут. Как я могу сказать django использовать определенное имя хоста / порт (т. Е. http://externalip:20111) для всех перенаправлений администратора?

1 Ответ

4 голосов
/ 11 июля 2014

При развертывании приложений за прокси-сервером или балансировщиком нагрузки обычно полагается на заголовок X-Forwarded-Host .Django имеет поддержку для него

Прежде всего, вам нужно настроить nginx для отправки правильных заголовков.Добавьте к вашей конфигурации хоста nginx (в разделе location):

proxy_set_header X-Forwarded-Host $host:20111;

Во-вторых, добавьте к вашим settings.py:

USE_X_FORWARDED_HOST = True

Это позволит django доверять X-Forwarded-Host заголовки из запроса.

Это должно заставить вас работать.В целях безопасности не следует доверять каждому значению, отправляемому в X-Forwarded-Host, поэтому добавьте доверенные домены / IP-адреса в ALLOWED_HOSTS в settings.py

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...