У Nginx есть приятная функция, которая позволяет ограничивать доступ к ресурсам по исходному IP-адресу.
Однако я заметил, что это может не работать в ситуации, когда nginx находится за прокси-сервером или балансировщиком нагрузки. В моем случае Amazon ELB.
Я хочу предоставить страницу состояния для агента datadog и проверок работоспособности Amazon ELB. Поэтому я хочу разрешить локальные подключения и подключения из ELB, но запретить все остальное.
Следующее работает не так, как ожидалось, поскольку позволяет трафику, исходящему за пределами ELB, также получить доступ к странице состояния. Причина в том, что IP-адрес будет исходить из ELB, а разрешающие правила не смотрят на заголовки, чтобы определить реальный источник запроса. Есть ли способ указать nginx, какой исходный IP-адрес использовать для определения правил разрешения / запрета?
location /status {
stub_status;
access_log off;
allow 127.0.0.1;
allow 10.0.0.0/16;
deny all;
}
Как указал Майкл Хэмптон. Я могу использовать модуль Real IP. Я не знал об этом.
Следующее сработало.
http {
real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;
}