Я изучаю ограничение скорости с помощью 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.
Это перезапишет переменные удаленного адреса на адрес, указанный в настраиваемом заголовке, а также упростит ведение журнала и использование других переменных.