X-Forwarded-For başlığı ile nginx oranı sınırlaması


23

Nginx'in HttpLimitReqModule kullanarak hız sınırlayıcı ile ilgileniyorum . Ancak, isteklerin hepsi aynı IP’den (yük dengeleyici) geliyor, başlıklarda gerçek IP adresi var.

X-Forwarded-ForKaynaktaki ip yerine başlıktaki ip üzerinden nginx hız limitine sahip olmanın bir yolu var mı?

Yanıtlar:


28

Evet, tipik hız sınırlayıcı yapılandırma tanımı dizesi şuna benzer:

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

$binary_remote_addrsınırlayıcı için benzersiz anahtar nerede . Üstbilginin $http_x_forwarded_fordeğerini alan değişken olarak değiştirmeyi denemelisiniz X-Forwarded-For. Her ne kadar bu bellek tüketimini artıracak olsa da $binary_remote_addrIP adreslerini depolamak için sıkıştırılmış ikili format kullanıyor ve kullanmıyor $http_x_forwarded_for.

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

Ben de aynı sonuca vardım ve hızlı bir testte iyi çalışıyor. Artan bellek kullanımını gösterdiğiniz için teşekkür ederiz.
John Brodie,

2
Bu konuda ciddi güvenlik kaygıları olabileceğine dikkat edin: blog.ircmaxell.com/2012/11/anatomy-of-attack-how-i-hacked.html
ircmaxell

Bu blog yazısında symfony ile ilgili bilgilerin aşağıdakilere yönelik olduğunu unutmayın: symfony.com/doc/current/components/http_foundation/…
calumbrodie 21:15

5
Eğer realip modülünü kullanırsanız, $binary_remote_addrdeğişken doğru ayarlanmış olur.
Cenk Altı

5

limit_req_zoneYönergesi talep gruplandırma için anahtar olarak kullanılacak değişken tanımlar.
Genellikle daha küçük olduğundan ve yerden tasarruf sağladığından $binary_remote_addrkullanılır $remote_addr.

Belki alternatif olarak RealipModule kullanmak istersiniz .
Bu, uzak adres değişkenlerini özel bir başlıkta verilen adrese yeniden yazar ve ayrıca günlük kaydı ve diğer değişken kullanımını kolaylaştırır.


1
RealIP modülü için +1. Bu modülü kullanırken $binary_remote_addrve $remote_addrtipik olarak yapılandırılmış başlığınızın değerine ayarlanmışsanız, X-Forwarded-Foryani standart değişkenleriniz artık "gerçek istemci IP adresi" dir. nginx -VNGINX'in inşa edilip edilmediğini görmek için çalıştırın --with-http_realip. Daha sonra config, basittir: set_real_ip_from 10.0.0.0/8; real_ip_header X-Forwarded-For; burada CIDR aralığı, X-Forwarder-Forbaşlığı ayarlayan yukarı yük dengeleyicinizinkidir .
markdsievers
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.