[NGINX] Giới hạn số lượng request trong một khoảng thời gian

30/12/2020

Việc giới hạn số lượng request của một client trong một khoảng thời gian sẽ giảm được rủi ro server bị tấn công DDoS. Bạn tính toán với trang web của mình một người dùng bình thường sẽ không thực hiện quá 1 request trong vòng 2 giây (tương đương 30 request trong 1 phút ) còn nếu quá thì chắc chắn người dùng này đang có hành động bất thường. Như vậy ta sẽ giới hạn số request cho một client trong 1 phút chỉ có thể thực hiện tối đa 30 request.

Để làm được việc này trước tiên bạn cần có một server đã cài nginx. Nếu chưa có bạn có thể tham khảo việc cài đặt tại đây.

Mở file nginx.conf

vi /etc/nginx/nginx.conf

Thêm dòng sau vào block http {}

limit_req_zone  $binary_remote_addr  zone=one:10m   rate=30r/m;

File nginx.conf sẽ như sau

[root@nginx-lab ~]# cat /etc/nginx/nginx.conf  user  nginx; worker_processes  1;  error_log  /var/log/nginx/error.log warn; pid        /var/run/nginx.pid;   events {     worker_connections  1024; }   http {     include       /etc/nginx/mime.types;     default_type  application/octet-stream;      log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '                       '$status $body_bytes_sent "$http_referer" '                       '"$http_user_agent" "$http_x_forwarded_for"';      access_log  /var/log/nginx/access.log  main;      sendfile        on;     keepalive_timeout  65;     include /etc/nginx/conf.d/*.conf;     limit_req_zone  $binary_remote_addr  zone=one:10m   rate=30r/m; }

Ở đây sẽ tạo ra một vùng nhớ có tên là one có dung lượng 10MB để lưu trữ trạng thái của request theo kiểu key-value (trong trường hợp này là địa chỉ của client). rate để chỉ ra số request giới hạn là 30 request trong thời gian 1 phút. Tương đương với 0,5 request mỗi giây nhưng vì không được phép để là 0,5 nên ta để là 30 request mỗi phút.

Bây giờ bạn muốn giới hạn request có hiệu lực ở đâu thì bạn đặt limit_req zone=one; trong các block đó. Nếu bạn muốn nó áp dụng cho tất cả các trang web trên nginx này thì bạn đặt trong block http {}, nếu muốn áp dụng cho cả một trang web thì đặt trong block server {}, còn muốn giới hạn trên một số màn xác định thì đặt nó trong block location {}.

Trong bài này tôi đặt nó trong block location {}

location / {             limit_req zone=one;             proxy_pass http://10.10.35.123;         }

Kiểm tra

[root@nginx-lab ~]# cat /etc/nginx/conf.d/web3.niemdt.com.conf  server {     server_name web3.niemdt.com;         location / {             limit_req zone=one;             proxy_pass http://10.10.35.123;         } } 

Reload lại nginx

nginx -s reload

Bây giờ truy cập vào trang web

Tôi nhấn F5 để load lại trang web khi chưa đến 2s

Bạn có thể tham khảo thêm một số hướng dẫn với nginx tại đây.

ONET IDC thành lập vào năm 2012, là công ty chuyên nghiệp tại Việt Nam trong lĩnh vực cung cấp dịch vụ Hosting, VPS, máy chủ vật lý, dịch vụ Firewall Anti DDoS, SSL… Với 10 năm xây dựng và phát triển, ứng dụng nhiều công nghệ hiện đại, ONET IDC đã giúp hàng ngàn khách hàng tin tưởng lựa chọn, mang lại sự ổn định tuyệt đối cho website của khách hàng để thúc đẩy việc kinh doanh đạt được hiệu quả và thành công.
Bài viết liên quan

[CI/CD] Phần 3: Hướng dẫn tích hợp Jenkins và Gitlab

Chắc hẳn các bạn đã nghe tới 2 khái niệm CI và CD và muốn tự động hóa một phần hoặc hoàn...
30/12/2020

Hướng dẫn cài đặt CPanel/WHM mới nhất centos 7/8

1. To check which are the interfaces managed by NetworkManager nmcli device status This displays a table that lists all...
30/12/2020

Thay đổi timezone của VPS CentOS theo đúng múi giờ Việt Nam

– Kiểm tra múi giờ hiện tại: date – Cập nhật lại timezone sang Asia/Ho_Chi_Minh: rm -f /etc/localtime ln...
28/12/2020
Bài Viết

Bài Viết Mới Cập Nhật

mua Proxy riêng ở đâu, và nó đem lại lợi ích gì cho người sử dụng
22/11/2022

Hướng dẫn sử dụng Proxy Helper Fakeip khi thuê proxy
21/11/2022

PROXY NUÔI TÀI KHOẢN FACEBOOK – KINH NGHIỆM FAKE IP – THUÊ PROXY GIÁ RẺ
14/11/2022

Mua Proxy Nuôi Zalo Giá Rẻ Tại Onet.com.vn
14/11/2022

BẢNG GIÁ MUA PROXY VIỆT NAM và PROXY US Onet.com.vn
14/11/2022