02/10/2018, 18:08

Hạn chế số người truy cập vào website trong PHP

Website có lượt truy cập cao là mong muốn của hầu hết những bạn thiết kế website. Tuy nhiên, có đôi lúc con số thống kê số lượng truy cập này không chỉnh xác bởi sự tấn công của những kẻ phá hoại. Website có lượt truy cập cao là mong muốn của hầu hết những bạn thiết ...

Website có lượt truy cập cao là mong muốn của hầu hết những bạn thiết kế website. Tuy nhiên, có đôi lúc con số thống kê số lượng truy cập này không chỉnh xác bởi sự tấn công của những kẻ phá hoại.

Website có lượt truy cập cao là mong muốn của hầu hết những bạn thiết kế website. Tuy nhiên, có đôi lúc con số thống kê số lượng truy cập này không chỉnh xác bởi sự tấn công của những kẻ phá hoại. Sự tấn công này làm giảm khả năng đáp ứng yêu cầu từ người dùng và làm treo hệ thống, khiến website không thể trả lại thông tin theo truy vấn của khách hàng và rõ ràng đây là việc mà không nhà quản trị website nào mong muốn. Để hạn chế tác hại do ngập lụt hệ thống gây ra có nhiều cách như cân bằng tải (load balancing), dựng tường lửa xác định truy cập … Ở đây, chúng tôi giới thiệu với bạn một cách đơn giản để ngăn chặn việc treo hệ thống bằng cách hạn chế số người truy cập cùng một lúc trên website. 

Ví dụ: 
Khi server của bạn có khả năng đáp ứng tối đa 1.000 lượt truy cập cùng một lúc (giới hạn tối đa), trong trường hợp người truy cập thứ 1.001 truy cập vào website, có thể hệ thống của bạn không đáp ứng được và dẫn đến overload (tương tự như trường hợp treo máy trên máy tính cá nhân) và ảnh hưởng đến 1.000 người đang truy cập. Để hạn chế người truy cập, tránh tình trạng overload như đã nói ở trên, chúng ta có thể giới hạn bằng cách từ người thứ 1.001 trở đi chúng ta không cho phép truy cập website và hiển thị thông báo “Server đang quá tải, vui lòng truy cập sau vài phút”. 

Cách thực hiện như sau: 
Bạn copy đoạn mã dưới đây cho vào các trang chính của website (index.php chẳng hạn): 

 <?php 
    function server_busy($numer){ 
    if (PHP_OS == ‘Linux’ AND @file_exists(‘/proc/loadavg’) AND $filestuff =@file_get_contents(‘/proc/loadavg’)){ 
    $loadavg = explode(‘ ’, $filestuff); 
    if (trim($loadavg[0]) > $numer) { 
    print ‘server busy, quay lại sau….’; 
    exit(0); 
    } 
    } 
    }   

    $srv = server_busy(1000); // 1000 là số người truy cập tại 1 thời điểm 

?>
Lưu ý: Phương thức phòng chống overload này chủ yếu dựa trên xử lý truy cập của Apache, trong trường hợp tầng số tấng công cao (Ví dụ : DDOS) thì bản thân Apache cũng không thể xử lý kịp. Trong trường hợp này chúng ta cần một hệ thống phòng thủ dựa trên phần cứng hoặc sử dụng hệ thống cân bằng tải (load balacing).

Bình luận
0