Как получить номер порта клиентского запроса с AWS ELB с использованием TCP и Nginx на сервере

При использовании HTTP / HTTPS в качестве протокола балансировки нагрузки мы получаем запрошенный протокол происхождения (т.е. это HTTP или HTTPS) из заголовка x-forwarded-protocol. Теперь, используя этот заголовок в конфигурации nginx, можно определить, был ли исходящий вызов из HTTP или HTTPS, и действие могло быть выполнено соответствующим образом.

Но если конфигурация слушателей ELB такая, как показано на изображении ниже, то как определить, что запрос пришел через порт 80 или порт 443? введите описание изображения здесь


person Amar    schedule 15.10.2014    source источник


Ответы (1)


У вас есть как минимум несколько вариантов:

Вариант 1 - не отправлять оба типа трафика на один и тот же порт экземпляров. Вместо этого настройте приложение так, чтобы оно прослушивало дополнительный порт, например 81 или 8080, и отправляло туда исходящий трафик SSL. Затем используйте порт, на который поступает трафик в экземпляр, чтобы различать два типа трафика.

Вариант 2 - включить протокол PROXY на ELB после внесения изменений в приложение для его понимания. Это имеет то преимущество, что вы также получаете IP-адрес клиента.

http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/enable-proxy-protocol.html

http://www.haproxy.org/download/1.5/doc/proxy-protocol.txt

person Michael - sqlbot    schedule 15.10.2014
comment
Спасибо, первое простое решение сработало, и мы не смогли использовать второй вариант, поскольку nginx не полностью поддерживает протокол прокси (дает только исходный IP-адрес). - person Amar; 16.10.2014
comment
@ michael-sqlbot Как получить информацию о порте из протокола прокси в nginx? Могу получить только ip клиента ... - person Tomas; 09.05.2016