Обмеження швидкості nginx з заголовком X-Forwarded-For


23

Я розглядаю обмеження швидкості за допомогою HttpLimitReqModule nginx . Однак всі запити надходять з одного і того ж IP-адреса (балансира), з реальною IP-адресою в заголовках.

Чи існує спосіб обмеження швидкості nginx на основі ip у X-Forwarded-Forзаголовку замість ip джерела?

Відповіді:


28

Так, типовий рядок визначення конфігурації, що обмежує швидкість, виглядає так:

 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;

Я просто прийшов до такого ж висновку, і в швидкому тесті це чудово працює. Дякуємо, що вказали на збільшення використання пам'яті.
Джон Броді

2
Остерігайтеся, що це може бути серйозними проблемами безпеки: blog.ircmaxell.com/2012/11/anatomy-of-attack-how-i-hacked.html
ircmaxell

Зауважте, що в цій публікації блогу щодо symfony були адреси з такими адресами
calumbrodie

5
Якщо ви використовуєте модуль realip, $binary_remote_addrзмінна встановлюється правильно.
Cenk Alti

5

limit_req_zoneДиректива визначає змінну , яка буде використовуватися в якості ключа для запиту угруповання.
Зазвичай, $binary_remote_addrвикористовується, а не $remote_addrтому, що він менший і економить місце.

Можливо, ви хочете скористатися RealipModule .
Це перезаписує змінні віддаленої адреси на адресу, вказану в користувацькому заголовку, а також полегшить ведення журналів та інше використання змінних.


1
+1 для модуля RealIP При використанні цього модуля $binary_remote_addrі $remote_addrвстановлюється значення налаштованого заголовка, як правило X-Forwarded-For- тому ваші стандартні змінні тепер є "реальною IP-адресою клієнта". Запустіть, nginx -Vщоб перевірити, чи було створено NGINX --with-http_realip. Тоді конфігурація настільки ж проста, як: set_real_ip_from 10.0.0.0/8; real_ip_header X-Forwarded-For; де діапазон CIDR - це ваш балансир навантаження, який встановлює X-Forwarder-Forзаголовок.
markdsievers
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.