Hiện tượng hosting bị quá tải do các bots cào dữ liệu ngày càng trở nên phổ biến, gây ra nhiều vấn đề nghiêm trọng cho các website. Tình trạng này không chỉ ảnh hưởng đến tốc độ tải trang mà còn khiến trang web có nguy cơ bị sập. Dưới đây, tôi sẽ diễn giải chi tiết tình trạng trên và giúp bạn khắc phục hiệu quả tình trạng này.
1. Dấu hiệu nhận biết hosting bị quá tải do bots cào dữ liệu
Để nhận biết có phải do Bots cào dữ liệu gây quá tải hay không, bạn hãy dựa vào các dấu hiệu sau:
- Lượng truy cập bất thường: Lượt truy cập tăng đột biến từ những IP không xác định, thường là từ mỹ.
- Tiêu thụ tài nguyên cao: CPU, RAM, và băng thông bị sử dụng quá mức.
- Tốc độ tải trang chậm: Website phản hồi chậm hoặc gặp lỗi 502, 503.
- Log máy chủ hiển thị nhiều request liên tục từ cùng một địa chỉ IP hoặc user-agent đáng ngờ, trong logs ghi nhận các request có chứa các link Filter của sản phẩm ?yith_wcan=xxx&xxx, ?product_brand=xxx&xxx, ?orderby=xxx&xxx,…
2. Lý giải tại sao bots cào dữ liệu lại có thể làm hosting bị quá tải
Các bots cào dữ liệu (scraper bots) là những chương trình tự động truy cập vào website để thu thập thông tin, thường được sử dụng với mục đích tổng hợp dữ liệu, sao chép nội dung hoặc phân tích thông tin.
Nếu như ngày xưa chúng ta làm mọi cách để Bots thu thập dữ liệu, thì với tình trạng nhà nhà AI thì việc cào dữ liệu vô tội vạ là không phải hiếm.
Nếu website chỉ là một blogs đơn giản thì việc cào dữ liệu không đáng ngại, nhưng nếu là website bán hàng thì là một câu chuyện khác.
Trên các website bán hàng, thường có các Lọc sản phẩm theo thuộc tính, từ khóa như YITH WooCommerce Ajax Product Filter, Product Filters for WooCommerce,…
Khi bots cào dữ liệu trên các bộ lọc này thường sẽ có cấu trúc như sau: ?yith_wcan=xxx&xxx, ?product_brand=xxx&xxx, ?orderby=xxx&xxx,…
Dưới đây là một ví dụ cụ thể:
?yith_wcan=1&pa_mau-sac=xam-van-vang&query_type_cong-dung=or&filter_cong-dung=lop-mai-nha&query_type_kich-thuoc=or&filter_kich-thuoc=150x600mm,800x800mm,300x400mm,600x600mm,300x300mm,600x1200mm
Bạn có thể thấy rằng, bots đang lần theo các truy vấn có Query String, cứ mỗi một dấu phẩy trong URL trên thì bạn đã có một link mới hoàn toàn.
Và như vậy, Bots sẽ không thể thoát phiên và cứ cào dữ liệu liên tục với cấp số nhân. Điều này tương đương với quy mô của một cuộc tấn công DDOS tầm trung.
2. Giải pháp chặn bots cào dữ liệu và giảm tải cho hosting
2.1 Sử dụng robots.txt để giới hạn bots
Tệp robots.txt
giúp kiểm soát những phần nào của website được phép hoặc không được phép truy cập bởi các bots.
Dưới đây là ví dụ tôi chặn bots của Bing và Facebook cào dữ liệu với các link có chứa ?product_brand= và ?orderby=
# Quy tắc chung cho các bot có cùng Disallow
User-agent: bingbot
User-agent: facebookexternalhit
User-agent: AhrefsBot
User-agent: Pinterestbot
User-agent: DotBot
User-agent: YandexBot
Disallow: /*?product_brand=
Disallow: /*?orderby=
Khi áp dụng, bạn hãy copy và dán vào đầu file robots.txt, sau đó hãy sửa lại ?product_brand= và ?orderby= thành link mà Bots đang cào trên website của bạn.
Nhược điểm của việc chặn bots thông qua robots.txt là các hệ thống bên thứ 3 sẽ không thu thập dữ liệu trên các link mà bạn đã cấu hình.
Ví dụ như bạn chặn bots của Facebook cào dữ liệu trên link có thuộc query ?product_brand= thì tất cả các link có chứa ?product_brand= sẽ không được Facebook thu thập dữ liệu. Khi bạn chia sẻ link có chứa ?product_brand= thì cũng sẽ không hiển thị được ảnh thumnail (nếu có ảnh).
Tuy nhiên bạn nên nhìn thực tiễn, không phải ai cũng truy cập vào web của bạn thông qua các query như vậy cả. Nên giá trị về SEO trên các query trên có thể cân nhắc hy sinh được.
2.2 Chặn bots bằng .htaccess
Không phải tất cả các bots đều tuân theo robots.txt
, hơn nữa các Bots sẽ phải mất một khoảng thời gian để quét lại robots.txt để bỏ qua các bộ lọc sản phẩm. Vì vậy cần thêm các biện pháp khác để giảm ngay tức thì lượng tài nguyên xuống.
Và bạn có thể sử dụng.htaccess
để chặn bớt các request từ Bots đổ vào dựa trên user-agent.
# BEGIN Chặn spam Bot
<IfModule mod_rewrite.c>
RewriteEngine On
# Chặn các bot cụ thể khi URL chứa min_price, per_page, hoặc orderby
RewriteCond %{HTTP_USER_AGENT} (facebookexternalhit|meta-externalagent|facebot|bingbot) [NC]
RewriteCond %{QUERY_STRING} (^|&)(product_brand|orderby)= [NC]
RewriteRule ^ - [F,L]
</IfModule>
Trong đó:
- facebookexternalhit|meta-externalagent|facebot|bingbot là tên Agent của các bots, mỗi một bots được ngăn cách bằng dấu |
- product_brand|orderby là các query string mà bạn muốn chặn.
Hãy nhớ thay thế danh sách tên user-agent và các query string trên thành các dữ liệu mà bạn đã lấy từ Access logs.
4. Tổng kết
Bots cào dữ liệu có thể gây ảnh hưởng nghiêm trọng đến hiệu suất website và tiêu tốn tài nguyên máy chủ. Ngoài cách sử dụng robots.txt, .htaccess, bạn cũng có thể giới hạn tần suất truy cập (Rate Limit), CAPTCHA.
Hãy kết hợp nhiều phương pháp để đảm bảo website luôn hoạt động ổn định và cung cấp trải nghiệm tốt nhất cho người dùng.