Как настроить nginx X-Forwarded-Port как исходный порт запроса - PullRequest
0 голосов
/ 10 марта 2020

Я использую nginx в стандартном сценарии обратного прокси-сервера, чтобы передать все запросы на /auth другому хосту, однако я пытаюсь использовать нестандартные порты.

Моя конечная цель - чтобы заголовок X-Forwarded-Port был установлен на порт, на который поступил запрос.

Вот мой блок местоположения в nginx .conf:

location /auth/ {
    proxy_pass       http://otherhost:8090;
    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 $scheme;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Port <VAR>;
}

Этот nginx работает в контейнере docker, который настроен на пересылку запросов из 8085 в 80 в контейнере, так что процесс nginx прослушивает 80:

0.0 .0.0: 8085-> 80 / tcp

Когда я нажимаю на URL:

http://localhost: 8085 / auth /

Я правильно перенаправлен на http://otherhost:8090, но заголовок X-Forwarded-Port отсутствует или неверен.

Где у меня <VAR> в исходном блоке, я попробовал следующее:

  • $server_port - это порт nginx, который прослушивает (80), а не порт запроса.

  • $pass_port - Кажется, в моей настройке ноль, так что nginx dro ps заголовок.

  • $http_port - это случайный порт для запроса.

  • $remote_port - это случайный порт для request.

Я могу изменить мой конфиг во время развертывания на жесткий код для известного порта входящих запросов, но в идеале я мог бы изменить фронтальный порт без любые изменения в конфигурации nginx.

Я искал список nginx переменных , но не могу найти ничего подобного $request_port. Могу ли я достичь своих целей?

...