Подтвердить что ты не робот

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, выступая в качестве прокси. Независимо от того, что

4b9b3361

Ответ 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(), чтобы добавить имя хоста и порт к пути.