Http POST выводит порт по URL-адресу
У меня есть webapp, построенный с помощью Django. В настоящее время я запускаю его с ноутбука дома за маршрутизатором.
У меня есть маршрутизатор, настроенный для маршрутизации всего трафика, отправленного на конкретный порт на этот ноутбук.
У меня есть Nginx как обратный прокси для Apache, с помощью mod_wsgi для запуска Django.
Моя проблема заключается в следующем: когда я пытаюсь отправить любую форму POST, порт # удаляется из URL-адреса (например, 209.245.23.201:1552/login/становится 209.245.23.201/login/)
Естественно, это ломается. Что вызывает это (Nginx, Apache, Django?) И как я могу его исправить?
Спасибо заранее.
EDIT: Кажется, что формы DO submit, но я думаю, что перенаправление терпит неудачу.
РЕДАКТИРОВАТЬ 2: Проблема, безусловно, связана с Nginx или с взаимодействием между Nginx и Apache. Я пробовал настройку с Apache как единственного сервера, запуская django, и он работал нормально. Таким образом, либо Nginx отбрасывает порт, либо каким-то образом Apache запутывается Nginx, выступая в качестве прокси. Независимо от того, что
Ответы
Ответ 1
У меня такая же проблема с моим сервером разработки.
После некоторого интернет-поиска я нашел это обсуждение (nginx, apache и нечетная ошибка администратора), где решение заключается в изменении конфигурации прокси-сервера nginx.
Измененный параметр конфигурации:
proxy_set_header Host $host;
решение состоит в том, чтобы добавить номер порта:
proxy_set_header Host $host:$server_port;
В моем ngnix + apache2 (с рабочим mpm) + django теперь все работает хорошо.
Ответ 2
Вы хотите передать исходный заголовок HTTP-хоста, который появился в nginx:
proxy_set_header Host $http_host;
Это, по-видимому, ошибка с настройкой nginx по умолчанию в Debian/Ubuntu, которая использует только $host
: $host
не будет содержать $server_port
.
(Это настроено в /etc/nginx/proxy_params
для пакета Debian/Ubuntu, и вы можете переопределить его в своей конфигурации после его включения.)
Обратите внимание, что $host:$server_port
отличается от $http_host
.
См. http://wiki.nginx.org/HttpCoreModule#.24host для объяснения.
Отправлено и исправлено в Debian: http://bugs.debian.org/733016
Ответ 3
Учитывая все, что касается вас, - это ясный HTTP (в отличие от чего-то вроде AJP), я бы запустил анализатор протоколов, такой как Wireshark на хосте, и определл, в какой момент вводится перенаправление.
Ответ 4
Проверьте журналы ошибок. На шахте Linux находятся /var/log/apache 2. Просто запустите поиск error.log, чтобы он появился.
Ответ 5
Если вы обнаружите, что это происходит с URL-адресом, полученным из метода get_absolute_url() модели, вы должны использовать pass этот путь к HttpRequest.build_absolute_url(), чтобы добавить имя хоста и порт к пути.