Với case nhiều site chung VPS (Nginx + PHP 7.4) ví dụ như vậy và mỗi domain có access.log riêng mà không biết thằng nào đang bị crawl/DDOS thì làm theo cách dưới đây — ưu tiên xử lý nhanh, dùng command line vì bạn thích headless mode 👍


1️⃣ Xác định domain nào đang có nhiều request nhất (real-time)

🔥 Cách nhanh nhất

for f in /var/log/nginx/*access.log; do 
  echo "==== $f ===="; 
  wc -l $f; 
done | sort -k2 -nr

👉 File nào tăng dòng nhanh nhất → domain đó đang bị spam/crawl.


2️⃣ Theo dõi realtime domain nào tăng mạnh

watch -n 2 'for f in /var/log/nginx/*access.log; do echo -n "$f "; wc -l < $f; done | sort -k2 -nr'

Chạy cái này 1–2 phút là biết domain nào tăng mạnh.


3️⃣ Tìm IP đang request nhiều nhất (xác định DDOS hay bot)

Ví dụ với 1 domain:

awk '{print $1}' domain.com.access.log | sort | uniq -c | sort -nr | head -20

👉 Nếu 1 IP chiếm hàng nghìn request → khả năng DDOS.


4️⃣ Kiểm tra User-Agent (xem bot gì)

awk -F\" '{print $6}' domain.com.access.log | sort | uniq -c | sort -nr | head -20

Nếu thấy:

  • curl
  • python
  • AhrefsBot
  • SemrushBot
  • MJ12bot
  • Bytespider
  • hoặc UA trống

→ bot crawl.


5️⃣ Tìm request bất thường (wp-login, xmlrpc, search spam)

grep "wp-login" domain.com.access.log | wc -l
grep "xmlrpc.php" domain.com.access.log | wc -l
grep "?s=" domain.com.access.log | wc -l

6️⃣ Nếu nghi DDOS thật (server load cao)

top

Nếu thấy:

  • nginx worker 100% CPU
  • load average tăng mạnh

Tiếp:

netstat -an | grep :80 | wc -l

Nếu connection > vài nghìn → có thể đang bị flood.


7️⃣ Cách pro hơn: xem request theo domain tổng hợp

Nếu bạn dùng chung log (có $host trong format), chạy:

awk '{print $1,$7,$12}' access.log | sort | uniq -c | sort -nr | head

Hoặc đếm theo host:

awk '{print $1,$12}' access.log | sort | uniq -c | sort -nr | head

8️⃣ Cách lâu dài (nên làm)

✔ Thêm rate limit vào Nginx

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

Trong server block:

limit_req zone=one burst=20 nodelay;

✔ Dùng fail2ban

Tự block IP spam.


✔ Bật log riêng từng domain (nếu chưa tách)

Trong từng server block:

access_log /var/log/nginx/domain.com.access.log;

🎯 Cách nhanh nhất cho bạn (Dev, thích CLI)

  1. Chạy watch đếm dòng log
  2. Domain nào tăng nhanh → check IP top
  3. IP nào cao bất thường → block tạm:
sudo iptables -A INPUT -s IP_ADDRESS -j DROP