- Published on
Cách giới hạn Rate Limit truy cập API bằng NGINX (chi tiết từng bước)
- Authors
- Name
- Bạch Đăng Tuấn
- Occupation
- Kỹ sư công nghệ thông tin
- Zalo: 0934.01.07.04
🛡️ Làm sao để giới hạn Rate Limit truy cập API bằng NGINX?
Rate Limiting là kỹ thuật giới hạn số lượng request từ một client (thường theo IP) trong một khoảng thời gian cụ thể, nhằm:
- Chống spam, DDoS
- Ngăn abuse API
- Bảo vệ tài nguyên server
📑 Mục Lục
- Mô hình giới hạn truy cập API
- Các directive quan trọng trong NGINX
- Cấu hình mẫu hạn chế tốc độ API
- Giải thích từng tham số
- Kiểm thử và theo dõi
- Tài liệu tham khảo
📦 Mô hình thực tế
[Client 1] [Client 2]
↓ ↓
┌─────────────────────────┐
│ NGINX │
│ rate_limit_by IP │
└────────┬───────────────┘
↓
[Backend API server]
Mỗi IP sẽ bị giới hạn bao nhiêu request trong 1 giây/phút, tùy cấu hình.
🔧 Các directive quan trọng
Directive | Mô tả |
---|---|
limit_req_zone | Khai báo vùng giới hạn (key là IP) |
limit_req | Áp dụng giới hạn cho từng location |
burst | Cho phép vượt mức tạm thời (buffer) |
nodelay | Cho phép trả ngay nếu trong burst |
🛠️ Cấu hình giới hạn API
http {
# Định nghĩa vùng giới hạn, theo IP client
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
server {
listen 80;
server_name api.example.com;
location /api/ {
limit_req zone=api_limit burst=20 nodelay;
proxy_pass http://backend_api;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
🔍 Giải thích chi tiết
$binary_remote_addr
: dùng IP client làm keyzone=api_limit:10m
: tạo vùng lưu trữ tênapi_limit
, tối đa 10MB (~160k IP)rate=10r/s
: mỗi IP chỉ gửi 10 request mỗi giâyburst=20
: cho phép tạm vượt mức 20 requestnodelay
: trả lỗi 503 ngay nếu vượt ngưỡng, không đợi
🔬 Cách kiểm thử
Dùng công cụ như:
# Gửi 30 request trong vòng 1 giây
ab -n 30 -c 1 http://api.example.com/api/
- 10 request đầu thành công
- 20 request sau có thể bị từ chối (503) hoặc chậm, tùy burst/nodelay
📚 Tài liệu tham khảo
- https://nginx.org/en/docs/http/ngx_http_limit_req_module.html
- https://docs.nginx.com/nginx/admin-guide/security-controls/rate-limiting/
- OWASP Rate Limiting Guidelines
✅ Tóm lại:
Bạn có thể dễ dàng bảo vệ API khỏi lạm dụng bằng cách cấu hình limit_req_zone
và limit_req
trong NGINX. Đây là kỹ thuật đơn giản – hiệu quả – không tốn nhiều tài nguyên để chặn bot, spam và DDoS.