Выбор ответа Senior Балансировка и nginx обновлено
Реальный IP клиента
Вопрос
Приложение за nginx берёт IP клиента из первого значения заголовка X-Forwarded-For для лимитов на вход. В чём проблема?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Клиент может сам прислать заголовок с любым IP и обойти лимиты. $proxyaddxforwardedfor дописывает адрес к тому, что пришло от клиента, поэтому первое значение контролирует клиент.
Варианты ответа
- nginx по умолчанию удаляет этот заголовок перед проксированием
- В первом значении заголовка всегда IP самого балансировщика
- Клиент может сам прислать заголовок с любым IP и обойти лимитыправильный ответ
- Заголовок не передаётся по HTTP/2, у части клиентов он пуст
Разбор
$proxy_add_x_forwarded_for дописывает адрес к тому, что пришло от клиента, поэтому первое значение контролирует клиент. Доверять можно только адресам, добавленным своими прокси: брать последний недоверенный адрес справа или использовать X-Real-IP $remote_addr с внешнего балансировщика (в nginx модуль realip с set_real_ip_from). nginx заголовок не удаляет, с HTTP/2 он работает.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.