Rate limiting giới hạn số request một client có thể thực hiện trong một cửa sổ thời gian. Bạn áp dụng nó ở nhiều lớp vì mỗi lớp thấy một thứ khác nhau, và bạn key nó theo bất cứ thứ gì định danh kẻ lạm dụng.
Rate limiting giới hạn số request một client có thể thực hiện trong một cửa sổ thời gian. Bạn áp dụng nó ở nhiều lớp vì mỗi lớp thấy một thứ khác nhau, và bạn key nó theo bất cứ thứ gì định danh kẻ lạm dụng.
429 Too Many Requests kèm Retry-After để client lùi lại lịch sự thay vì đập liên tục.# Định nghĩa một zone bộ nhớ chia sẻ key theo IP client.
# rate=10r/s = tốc độ nạp lại ổn định (token bucket).
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
server {
location /api/ {
# burst=20: cho phép một đợt tăng ngắn gồm 20 request xếp hàng
# nodelay: phục vụ burst ngay lập tức thay vì giãn cách ra
limit_req zone=api burst=20 nodelay;
# Trả về 429 (không phải 503 mặc định) để client thấy tín hiệu rate-limit
limit_req_status 429;
proxy_pass http://backend;
}
}
Ở đây mỗi IP nạp lại ở 10 request/giây, có thể burst lên tới 20, và bất cứ gì vượt quá sẽ nhận một 429.
Rate limiting là phòng thủ rẻ nhất, luôn bật của bạn chống lại các Layer 7 flood, credential stuffing, và scraper mất kiểm soát. Phân lớp nó (edge cho thể tích, proxy cho origin, app cho logic nghiệp vụ) và key nó đúng cách sẽ chặn kẻ lạm dụng trong khi user thật — và các burst hợp lệ — đi qua nguyên vẹn. Đặt giới hạn từ baseline thật là điều giữ cho nó không trở thành một sự cố do chính bạn gây ra.