Назад | Перейти на главную страницу

Получение X-Forwarded за AWS TCP Load Balancer для https

У меня есть балансировщик нагрузки AWS TCP в пуле автомасштабирования. За ним стоит несколько доменов, поэтому я не могу выполнить завершение SSL на балансировщике нагрузки, следовательно, TCP.

Я обновил свой формат ведения журнала, чтобы регистрировать X-Forwarded-For, и это хорошо работает для HTTP, но не для HTTPS.

Форумы не указывают, что это невозможно сделать, поскольку речь идет о HTTP (S), однако я не могу заставить его работать. Это может работать?

Вот мои данные регистрации:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy
SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded
LogFormat "%h %l %u %t \"%r\" %>s %b" common

CustomLog "logs/access_log" combined env=!forwarded
CustomLog "logs/access_log" proxy env=forwarded

Сбрасывая все атрибуты в PHP, я вижу заголовок для HTTP-запросов, но не для HTTPS, поэтому я не думаю, что это проблема конфигурации.

ELB не имеет возможности добавить этот заголовок, поскольку этот заголовок является функцией HTTP, а это балансировщик нагрузки TCP. Все, что он знает, это то, что он передает некоторый поток TCP и не более того. Если вам нужен ELB для добавления этого заголовка, вам необходимо завершить HTTPS на балансировщике нагрузки. Оттуда он может связываться с вашими внутренними экземплярами через HTTP или HTTPS по мере необходимости.

Хотя я очень сомневаюсь, что X-Forwarded-For может работать, когда завершение SSL не выполняется на балансировщике нагрузки, я не нашел окончательного отказа. Однако есть решение, которое я сделал с помощью CloudFront.

Поскольку у вас может быть несколько дистрибутивов, указывающих на один балансировщик нагрузки, а AWS предоставляет сертификаты для SSL, вы можете завершить SSL в пограничном местоположении. CloudFront добавит заголовок и перенаправит запрос (при необходимости) в балансировщик нагрузки. Оттуда заголовок попадет на ваш сервер.