У меня есть набор серверов Nginx за балансировщиком нагрузки Amazon ELB. Я использую set_real_ip (от HttpRealIpModule ) , так что я могу получить доступ к IP - адрес исходящего клиента на этих серверах (для прохождения через РНР-FPM и для использования в HttpGeoIPModule ).
Кажется, что set_real_ip_from
в конфигурации nginx можно принять только IP-адрес. Однако в отношении ELB-машин Amazon говорят:
Примечание. Поскольку набор IP-адресов, связанных с LoadBalancer, может меняться со временем, никогда не следует создавать запись «A» с каким-либо конкретным IP-адресом. Если вы хотите использовать понятное DNS-имя для вашего LoadBalancer вместо имени, созданного службой Elastic Load Balancing, вы должны создать запись CNAME для DNS-имени LoadBalancer или использовать Amazon Route 53 для создания размещенной зоны. Для получения дополнительной информации см. Использование доменных имен с эластичной балансировкой нагрузки.
Но если мне нужно ввести IP-адрес, я не могу использовать CNAME (ни свой Amazon, ни свой). Есть ли решение этой проблемы?
10.0.0.1/8
будет работать, хотя может быть что-то более конкретное)На сегодняшний день лучше всего использовать VPC, поэтому вы будете знать точный CIDR для своего ELB. Затем вы можете добавить что-то вроде этого в ваш файл конфигурации Nginx:
источник
Используйте VPC CIDR, чтобы
set_real_ip_from
найти его в консоли Amazon в разделе VPC => Ваш VPC (замените<your VPC CIDR here>
его):источник
Установка доверенного диапазона 0.0.0.0/0 на Amazon ELB наверняка доставит вам неприятности. Вы можете гарантировать, что запросы поступают от ELB, если вы можете настроить группу безопасности для вашего сервера nginx, но исходный запрос будет исходить из любого возможного источника (Amazon ELB являются открытыми интерфейсами).
Простой тест покажет это:
В журналах на вашем сервере nginx 1.2.3.4 будет показан реальный IP-адрес, который является поддельным. Посмотрите IP Range для внутреннего частного IP Amazon ELB для лучших ответов.
источник
В realip_module указывается, что в случае X-Forwarded-For этот модуль использует последний IP-адрес в заголовке X-Forwarded-For для замены. Этот модуль не будет работать, когда только
real_ip_header
иset_real_ip_form
установлены. Это потому, что этот модуль будет использовать IP-адрес прокси вместо IP-адреса клиента. Для решения этойreal_ip_recursive
директивы должна быть включена.Кроме того, если у вас есть сертификаты SSL, которые развернуты и обновлены на экземпляре (например, например, сертификаты letsencrypt или certbot). Эти центры сертификации могут попытаться проверить эти сертификаты через IPV6.
Поэтому важно также иметь IPV6. Таким образом, файл конфигурации Nginx также должен содержать set_real_ip_from адрес IPV6.
если применяются дополнительные ограничения безопасности, нам также может потребоваться включить
set_real_ip_from
VPC CIDR (как IPV4, так и IPV6) для подсетей cloudfront / elb / ec2.источник