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

Использование Nginx real_ip, когда вы не знаете промежуточные IP-адреса прокси

Nginx's модуль real_ip позволяет установить $remote_addr переменная на основе значений, отправленных в определенных полях заголовка. У него особое понимание X-Forwarded-For заголовок и может использовать самое правое ненадежное значение в заголовке в качестве подключаемого IP-адреса.

Я хотел бы использовать модуль real_ip для установки $remote_addr на подключающийся IP-адрес. У меня проблема в том, что я знаю, сколько прыжков назад с конца X-Forwarded-For посмотреть, но не IP-адреса прокси между ними. Насколько я понимаю, это означает, что я не могу использовать set_real_ip_from для указания IP-адреса прокси.

Что я хотел бы сделать, так это настроить nginx для выбора предпоследнего адреса в списке в качестве $remote_addr. Кажется, что модуль real_ip работает только в том случае, если у вас есть инфраструктура, в которой вы знаете IP-адреса своих прокси.

Есть ли способ сделать это с помощью модуля real_ip? Я разработал решение на основе регулярных выражений, но я бы предпочел использовать модуль real_ip, если это возможно.

Я не думаю, что это обман nginx real_ip_header и X-Forwarded-For кажется неправильным или подобные вопросы. Чтобы сформулировать проблему еще раз:


Подробнее о специфике:

Я запускаю nginx внутри Google Cloud, за балансировщиком нагрузки HTTP Google Cloud. Google Cloud использует в X-Forwarded-For заголовок, чтобы указать точку входа в сеть Google Cloud. Я знаю, что предпоследнее значение в X-Forwarded-For list - это тот, который я хочу, но я не знаю, каким будет IP-адрес последнего значения (прокси). Даже если бы я мог перечислить все адресное пространство Google Cloud для прокси (не указано, что GCLB работает только внутри адресного пространства GCP), это открыло бы его для любых других пользователей, которые могут получить сервер внутри этого адресного пространства.