giới hạn tỷ lệ nginx với tiêu đề X-Forwarded-For


23

Tôi đang xem xét việc giới hạn tỷ lệ bằng cách sử dụng httpLimitReqModule của nginx . Tuy nhiên, tất cả các yêu cầu đều đến từ cùng một IP (bộ cân bằng tải), với địa chỉ IP thực trong các tiêu đề.

Có cách nào để có giới hạn tỷ lệ nginx dựa trên ip trong X-Forwarded-Fortiêu đề thay vì ip của nguồn không?

Câu trả lời:


28

Có, chuỗi định nghĩa cấu hình giới hạn tỷ lệ điển hình trông như sau:

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

đâu $binary_remote_addrlà chìa khóa duy nhất cho bộ giới hạn. Bạn nên thử thay đổi nó thành $http_x_forwarded_forbiến có giá trị của X-Forwarded-Fortiêu đề. Mặc dù điều này sẽ tăng mức tiêu thụ bộ nhớ vì $binary_remote_addrđang sử dụng định dạng nhị phân nén để lưu trữ địa chỉ IP và $http_x_forwarded_forkhông.

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

Tôi chỉ đi đến kết luận tương tự, và trong một thử nghiệm nhanh, nó hoạt động tốt. Cảm ơn đã chỉ ra việc sử dụng bộ nhớ tăng lên.
John Brodie

2
Coi chừng có thể có những lo ngại bảo mật nghiêm trọng đối với điều này: blog.ircmaxell.com/2012/11/anatomy-of-attack-how-i-hacked.html
ircmaxell

Lưu ý rằng thông tin trong bài đăng trên blog về symfony là các địa chỉ như sau: symfony.com/doc/civerse/components/http_foundation/
trộm

5
Nếu bạn sử dụng mô-đun realip, $binary_remote_addrbiến được đặt chính xác.
Cenk Alti

5

Lệnh limit_req_zonexác định biến được sử dụng làm khóa để nhóm yêu cầu.
Thông thường, $binary_remote_addrđược sử dụng chứ không phải $remote_addrvì nó nhỏ hơn và tiết kiệm không gian.

Có thể bạn muốn sử dụng RealipModule .
Điều này sẽ viết lại các biến địa chỉ từ xa thành địa chỉ được cung cấp trong tiêu đề tùy chỉnh và cũng sẽ giúp việc ghi nhật ký và sử dụng biến khác dễ dàng hơn.


1
+1 cho mô-đun RealIP. Thông thường, khi sử dụng mô-đun này $binary_remote_addr$remote_addrđược đặt thành giá trị của tiêu đề được định cấu hình của bạn X-Forwarded-For- vì vậy các biến tiêu chuẩn của bạn hiện là "địa chỉ IP của máy khách thực". Chạy nginx -Vđể xem NGINX đã được xây dựng với --with-http_realip. Sau đó, cấu hình đơn giản như : set_real_ip_from 10.0.0.0/8; real_ip_header X-Forwarded-For; , trong đó phạm vi CIDR là của bộ cân bằng tải ngược dòng của bạn đang đặt X-Forwarder-Fortiêu đề.
markdsievers
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.