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

Переменная схемы nginx $за балансировщиком нагрузки

Можно ли принудительно ввести значение nginx $"https", если nxinx работает за балансировкой нагрузки?

В моем сценарии Load balancer заботится о https-связи с клиентом и пересылает запросы nginx как raw http. Я знаю, что могу сделать что-то подобное, чтобы обнаружить https

set $my_scheme "http";
if ($http_x_forwarded_proto = "https") {
    set $my_scheme "https";
}  

но мне просто интересно, есть ли что-то вроде функции real_ip_header для IP-адресов.

Есть ли также некоторые заголовки, которые мне нужно обновить при обнаружении https вручную?

4b9b3361

Ответ 1

Наша настройка такая же, как у вас, только с помощью map вместо if/set (как рекомендовано nginx devs).

# Sets a $real_scheme variable whose value is the scheme passed by the load
# balancer in X-Forwarded-Proto (if any), defaulting to $scheme.
# Similar to how the HttpRealIp module treats X-Forwarded-For.
map $http_x_forwarded_proto $real_scheme {
  default $http_x_forwarded_proto;
  ''      $scheme;
}

P.S. Я согласен, что модуль real_scheme будет приятным!

Ответ 2

Попробуйте что-то вроде этого:

location / {
    ...
    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 $my_scheme;
    proxy_set_header X-Forwarded-Ssl   $my_ssl
    ...
}