Nginx proxy https to http на нестандартном порту?

У меня есть nginx, настроенный для прокси-трафика https на HTTP-сервер, работающий на том же компьютере.

Все работает нормально, когда я настраиваю nginx для прослушивания/прокси-сервера с порта https 443. Но я действительно хочу слушать нестандартный порт. Когда я настраиваю нестандартный порт, nginx получает запрос и отправляет его на свой HTTP-сервер, как и следовало ожидать, но сервер отвечает перенаправлением HTTP обратно в браузер, который сообщает ему перенаправить на сервер https://. com/someurl ". Я имею в виду, что URL-адрес перенаправления выглядит хорошо, за исключением того, что ему не хватает правильного порта. Я пропускаю заголовок HTTP, который мне нужно установить в прокси?

В частности, я запускаю http-пример треков; http://getontracks.org. Если это имеет значение.

Мой (работающий на стандартном порту) конфигурация сервера nginx:

location /{
    proxy_pass http://localhost:50000;
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_redirect off;
}

Ответ 1

Проблема связана с линией -

proxy_set_header Host $host;

Ваш веб-сервер (WEBrick), в свою очередь, включает это при выдаче ответа на перенаправление.

Вы можете изменить его, чтобы включить нестандартный порт -

proxy_set_header Host $host:$server_port;

который должен решить эту проблему.

Ответ 2

Это больше проблема приложения, выполняемого на хосте (хостах) вверх, а не конфигурации веб-сервера (если, конечно, ваша конфигурация веб-сервера восходящего канала не содержит правил перезаписи). Различные приложения обрабатывают эти ситуации по-разному: некоторым требуется явный параметр конфигурации, указывающий им фактический URL-адрес, к которому может быть применено приложение, некоторые используют определенные HTTP-заголовки, а некоторые используют другие HTTP-заголовки.

Поскольку Tracks - это приложение Rails, вы можете получить более знающие ответы, если вы добавите соответствующий тег на ваш вопрос.