Переменная схемы 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 вручную?
Ответы
Ответ 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
...
}