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

Ограничение скорости nginx с заголовком X-Forwarded-For

Я изучаю ограничение скорости с помощью nginx HttpLimitReqModule. Однако все запросы поступают с одного и того же IP-адреса (балансировщик нагрузки) с реальным IP-адресом в заголовках.

Есть ли способ установить ограничение скорости nginx на основе IP-адреса в X-Forwarded-For заголовок вместо ip источника?

Да, типичная строка определения конфигурации ограничения скорости выглядит так:

 limit_req_zone  $binary_remote_addr zone=zone:16m rate=1r/s;

где $binary_remote_addr уникальный ключ для ограничителя. Вы должны попробовать изменить его на $http_x_forwarded_for переменная, которая получает значение X-Forwarded-For заголовок. Хотя это увеличит потребление памяти, потому что $binary_remote_addr использует сжатый двоичный формат для хранения IP-адресов и $http_x_forwarded_for не является.

 limit_req_zone  $http_x_forwarded_for zone=zone:16m rate=1r/s;

В limit_req_zone Директива определяет переменную, которая будет использоваться в качестве ключа для группировки запросов.
Обычно $binary_remote_addr используется, а не $remote_addr потому что он меньше по размеру и экономит место.

Возможно, вы в качестве альтернативы захотите использовать RealipModule.
Это перезапишет переменные удаленного адреса на адрес, указанный в настраиваемом заголовке, а также упростит ведение журнала и использование других переменных.