Получение X-Forwarded за AWS TCP Load Balancer для https
У меня есть балансировщик нагрузки TCP AWS в пуле автоматического масштабирования. За ним стоят несколько доменов, поэтому я не могу завершить 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, поэтому я не думаю, что это проблема конфигурации.
2 ответа
Хотя я очень сомневаюсь, что можно заставить работать X-Forwarded-For, когда на балансировщике нагрузки не выполняется SSL-завершение, я не нашел окончательного "нет". Однако есть решение, которое я сделал, используя CloudFront.
Поскольку у вас может быть несколько распределений, указывающих на один балансировщик нагрузки, и AWS предоставляет сертификаты для SSL, вы можете прекратить SSL в пограничном местоположении. CloudFront добавит заголовок и перенаправит запрос (при необходимости) на балансировщик нагрузки. Оттуда заголовок достигнет вашего сервера.
ELB не может добавить этот заголовок, так как этот заголовок является функцией HTTP, а это балансировщик нагрузки TCP. Все, что он знает, это то, что он пропускает некоторый поток TCP и не более. Если вам нужен ELB для добавления этого заголовка, вам нужно завершить HTTPS на балансировщике нагрузки. Оттуда он может связываться с вашими серверными экземплярами через HTTP или HTTPS по мере необходимости.