Я использую 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 работает в контейнере докеров, который настроен для пересылки запросов с 8085 на 80 в контейнере, так что процесс nginx прослушивает 80:
0.0.0.0:8085->80/tcp
Когда я нажимаю URL:
Я правильно перенаправлен на http://otherhost:8090
, но заголовок X-Forwarded-Port
отсутствует или неправильный.
Если в исходном блоке у меня <VAR>
, я пробовал следующее:
$server_port
- это порт, который прослушивает nginx (80), а не порт запроса.$pass_port
- Кажется, что в моей настройке значение null, поэтому nginx отбрасывает заголовок.$http_port
- это случайный порт для каждого запроса.$remote_port
- это случайный порт для каждого запроса.
Я могу изменить свою конфигурацию во время развертывания, чтобы жестко указать известный порт входящих запросов, но в идеале я мог бы изменить передний порт без каких-либо изменений в конфигурации nginx.
Я просмотрел список переменных nginx, но не нашел ничего похожего на $request_port
. Есть ли у меня какой-нибудь способ реализовать свои намерения?
$remote_port
? Кроме того, мне трудно понять, чем порт, который слушает nginx ($server_port
), будет отличаться от порта запроса. - person Mehdi   schedule 10.03.2020