NỘI DUNG

Hosting tốc độ cao Vietnix - tốc độ tải trang trung bình dưới 1 giây
VPS siêu tốc Vietnix - trải nghiệm mượt mà, ổn định
05/06/2023
Lượt xem

Cách thiết lập bộ đếm truy cập web bằng Redis và PHP trên Ubuntu 20.04

05/06/2023
18 phút đọc
Lượt xem

Đánh giá

5/5 - (118 bình chọn)

Redis là một cơ sở dữ liệu in-memory, được sử dụng rộng rãi như một giải pháp bộ nhớ cache và message broker. Redis cũng là một lựa chọn tốt sử dụng cho các ứng dụng thời gian thực để đảm bảo vấn đề hiệu suất và độ trễ. Trong bài viết hướng dẫn về thiết lập bộ đếm truy cập web bằng Redis và PHP trên Ubuntu 20.04 này, bạn sẽ được hướng dẫn cách cài đặt và sử dụng Redis để đếm số lượt truy cập trang web và hiển thị số lượt truy cập đó trên một trang web đơn giản viết bằng PHP.

Điều kiện để thiết lập bộ đếm truy cập web bằng Redis và PHP trên Ubuntu 20.04

Để làm theo hướng dẫn này, hãy đảm bảo bạn có những thứ sau:

Bước 1: Cài đặt tiện ích mở rộng PHP Redis

Đầu tiên thực hiện cập nhật danh sách gói apt của bạn bằng câu lệnh:

sudo apt update

Sau đó, thực hiện cài đặt tiện ích mở rộng php-redis cho phép PHP giao tiếp với Redis. Tiện ích này cung cấp một API để kết nối với Redis server để lấy dữ liệu dưới dạng key-value.

sudo apt install -y php-redis

Thực hiện khởi động lại dịch vụ Apache để cập nhật tiện ích vừa tải xuống.

sudo systemctl restart apache2

Tiếp theo, bạn sẽ tạo một webpage để thử nghiệm với một file có tên là test.php. Lưu trữ file này trong thư mục gốc của Apache web server. Bạn có thể sử dụng các webpage của riêng bạn nếu muốn, nhưng cần lưu ý rằng trang web thử nghiệm sẽ tải tập lệnh hit_counter.php để theo dõi lượt truy cập trang bằng Redis.

Đối với hướng dẫn này, bạn sẽ thiết lập cho một webpage mẫu duy nhất. Tuy nhiên, trên thực tế các trang web có thể có hàng chục hoặc thậm chí hàng trăm webpage. Việc áp dụng với các webpage sẽ tương tự như nhau.

Trên terminal, sử dụng trình soạn thảo nano để tạo file test.php mới trong thư mục gốc của Web server ở thư mục có đường dẫn /var/www/html/ bằng câu lệnh sau:

sudo nano /var/www/html/test.php

Sau đó, thêm vào file một đoạn code PHP mẫu có sẵn như sau:

<?php
  require_once 'hit_counter.php';
?>

<!DOCTYPE html>
<html>

  <head>
    <title>Sample Test Page</title>
  </head>

  <body>
    <h1>Sample test page</h1>
    <p>This is a sample test page.</p>
  </body>

</html>

Các dòng code trên dùng để tạo ra một trang HTML cơ bản và thực hiện tải lên file hit_counter.php khi có truy cập bất kỳ đến trang. Bước tiếp theo sẽ thực hiện viết code cho file hit_counter.php để có thể đếm được lượng truy cập vào trang test.php này. Nhớ lưu file trước khi thoát khỏi trình soạn thảo.

Khi thiết lập bộ đếm truy cập trang web bằng Redis và PHP trên Ubuntu 20.04, việc sử dụng VPS là cần thiết để cài đặt và quản lý Redis server. Nếu bạn đang tìm kiếm một giải pháp VPS tin cậy và chất lượng, bạn có thể tham khảo các gói dịch vụ VPS tại Vietnix.

Vietnix cung cấp các gói VPS tốc độ cao, cấu hình linh hoạt như VPS Giá Rẻ, VPS Phổ Thông, VPS Cao Cấp, VPS NVMe để đáp ứng yêu cầu của bộ đếm truy cập trang web sử dụng Redis và PHP. Bạn sẽ có được hiệu suất ổn định và nhanh chóng, giúp trang web của bạn hoạt động mượt mà.

Đảm bảo dữ liệu của bạn được an toàn, bảo mật, không lo bị rò rỉ. Bởi dịch vụ VPS của Vietnix được xây dựng trên cơ sở hạ tầng mạnh mẽ và được bảo vệ chặt chẽ.

Vietnix có đội ngũ hỗ trợ chuyên nghiệp và tận tâm sẵn sàng hỗ trợ bạn trong quá trình cài đặt và vận hành VPS. Liên hệ ngay với Vietnix để được tư vấn chọn gói VPS phù hợp với bạn.

Bước 2: Tạo bộ đếm truy cập Redis

Khi làm việc trong môi trường thực tế, việc tách các file PHP để có thể sử dụng lại là rất bình thường. Điều này cho phép bạn triển khai logic trong các file này trên các phần khác nhau của dự án chỉ bằng cách đưa vào đường dẫn của chúng thay vì sao chép code, giúp cho việc bảo trì dễ dàng hơn vì bạn chỉ cần chỉnh sửa một file duy nhất trong trường hợp bạn cần thay đổi logic. Điều này giúp bạn tiết kiệm rất nhiều thời gian.

Bạn sẽ áp dụng chiến lược tương tự trong hướng dẫn này. Bạn sẽ tạo một file hit_counter.php duy nhất mà bạn có thể đưa vào bất kỳ trang web nào yêu cầu theo dõi lượt khách truy cập.

Bên trong file này, bạn sẽ sử dụng thư viện php-redis để kết nối với Redis server bằng PHP. Sau đó sẽ tạo một Redis hash map để lưu trữ số lượt truy cập mà khách truy cập đã thực hiện vào trang web. Sử dụng địa chỉ IP duy nhất của khách truy cập làm khóa, Redis dựa vào khóa đó để phân biệt số lần truy cập của từng khách truy cập trong Redis server.

Trên terminal, mở file hit_counter.php mới trình soạn thảo nano bằng câu lệnh:

sudo nano /var/www/html/hit_counter.php

File hit_counter.php lúc này đã được tạo, bạn thực hiện cấu hình các giao tiếp với Redis như sau:


<?php

    try {

        $redis = new Redis();
        $redis->connect('127.0.0.1', 6379);
        $redis->auth('EXAMPLE_PASSWORD');

Trong đó:

  • <?php để thông báo định dạng thẻ.
  • 6379: Cổng kết nối mặc định với máy chủ Redis.
  • EXAMPLE_PASSWORD: Mật khẩu xác thực của Redis server. Bạn cần thay thế giá trị mật khẩu tương ứng của Redis server của bạn.

Tiếp theo, đặt tên cho hash map là ($siteVisitsMap), bạn có thể đặt tên khác nếu bạn mong muốn. Giá trị của hash map được sử dụng trong hướng dẫn này là siteStats:

  $siteVisitsMap = 'siteStats';

Bây giờ bạn sẽ khởi tạo một Redis key trống ($visitorHashKey). Sau đó, địa chỉ IP của khách truy cập sẽ được ghi vào key đó. Sử dụng giá trị của biến $visitorHashKey tức sử dụng địa chỉ IP để xác định từng khách truy cập yêu cầu trang web bằng cách thêm các dòng như sau:


        $visitorHashKey = '';           

        if (!empty($_SERVER['HTTP_CLIENT_IP'])) {

            $visitorHashKey = $_SERVER['HTTP_CLIENT_IP'];

        } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {

            $visitorHashKey = $_SERVER['HTTP_X_FORWARDED_FOR'];

        } else {

            $visitorHashKey = $_SERVER['REMOTE_ADDR'];
        }

Đầu tiên, thực hiện xác định mục đích các biến có trong đoạn code:

  • Biến $visitorHashKey để lưu giá trị của địa chỉ máy truy cập.
  • Biến $_SERVER['HTTP_CLIENT_IP'] là một biến môi trường trong PHP chứa địa chỉ IP của khách hàng nếu địa chỉ đó chưa được xác định.
  • Biến $_SERVER['HTTP_X_FORWARDED_FOR'] là một biến môi trường trong PHP chứa danh sách các địa chỉ IP được truyền qua các Proxy server.
  • Biến $_SERVER['REMOTE_ADDR'] là một biến môi trường trong PHP chứa địa chỉ IP của Web server mà khách hàng đang kết nối đến.

Ban đầu, biến $visitorHashKey được khởi tạo với giá trị rỗng ('').

Tiếp theo, đoạn code kiểm tra nếu biến $_SERVER['HTTP_CLIENT_IP'] không rỗng, thì thực hiện gán giá trị của biến này cho $visitorHashKey.

Nếu biến $_SERVER['HTTP_CLIENT_IP'] không tồn tại, đoạn mã kiểm tra tiếp biến $_SERVER['HTTP_X_FORWARDED_FOR']. Nếu biến này có giá trị, nó được gán cho $visitorHashKey.

Cuối cùng, nếu không có biến nào tồn tại, địa chỉ IP của khách hàng được lấy từ biến $_SERVER['REMOTE_ADDR'] và được gán cho $visitorHashKey.

Vì vậy, sau khi kiểm tra các biến $_SERVER tương ứng, biến $visitorHashKey sẽ chứa địa chỉ IP của khách hàng và sẽ được sử dụng để định danh người dùng trên trang web.

Sử dụng câu lệnh điều kiện if ($redis->hExists($siteVisitsMap, $visitorHashKey)) {...} để kiểm tra xem $visitorHashKey có tồn tại trong bản đồ có tên $siteVisitsMap hay không.

Nếu chưa tồn tại, thực hiện thêm mới và đánh dấu truy cập lần đầu. Ngược lại thì chỉ cần đánh dấu số lần truy cập tăng lên 1 như sau:

        $totalVisits = 0;

        if ($redis->hExists($siteVisitsMap, $visitorHashKey)) {

            $visitorData = $redis->hMget($siteVisitsMap, array($visitorHashKey));
            $totalVisits = $visitorData[$visitorHashKey] + 1;

        } else {

            $totalVisits = 1;

        }

        $redis->hSet($siteVisitsMap, $visitorHashKey, $totalVisits);

        echo "Welcome, you've visited this page " .  $totalVisits . " times\n";

    } catch (Exception $e) {
        echo $e->getMessage();
    }

Trường hợp hash map và key có địa chỉ IP được đặt tên tồn tại trong Redis, thực hiện truy xuất nó bằng câu lệnh $visitorData = $redis->hMget($siteVisitsMap, array($visitorHashKey)) và sử dụng $totalVisits = $visitorData[$visitorHashKey] + 1; để tăng biến $totalVisits. Sử dụng câu lệnh $redis->hMget để lấy dữ liệu số lần truy cập được liên kết với một địa chỉ IP.

Trong trường hợp gặp địa chỉ IP lần đầu tiên, đặt biến $totalVisits ban đầu là 1. Cuối cùng, sử dụng $redis->hSet($siteVisitsMap, $visitorHashKey, $totalVisits); để đặt giá trị của $visitorHashKey theo kết quả của câu lệnh điều khiển trước đó. Câu lệnh $redis->hSet($siteVisitsMap, $visitorHashKey, $totalVisits) tạo hash map $siteVisitsMap trong Redis với khóa có tên $visitorHashKey với giá trị $totalVisits.

Sau đó, in ra một thông điệp chào mừng khách truy cập bằng cách lặp lại tổng số lượt truy cập và đóng khối } catch (...) {...}.

Lúc này, file đếm lượt truy cập /var/www/html/hit_counter.php đã hoàn thành và sẽ trông giống như sau:

<?php

    try {

        $redis = new Redis();
        $redis->connect('127.0.0.1', 6379);
        $redis->auth('EXAMPLE_PASSWORD');

        $siteVisitsMap  = 'siteStats';
        $visitorHashKey = '';           

        if (!empty($_SERVER['HTTP_CLIENT_IP'])) {

           $visitorHashKey = $_SERVER['HTTP_CLIENT_IP'];

        } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {

           $visitorHashKey = $_SERVER['HTTP_X_FORWARDED_FOR'];

        } else {

           $visitorHashKey = $_SERVER['REMOTE_ADDR'];
        }
      
        $totalVisits = 0;

        if ($redis->hExists($siteVisitsMap, $visitorHashKey)) {

            $visitorData = $redis->hMget($siteVisitsMap,  array($visitorHashKey));
            $totalVisits = $visitorData[$visitorHashKey] + 1;

        } else {

            $totalVisits = 1;

        }

        $redis->hSet($siteVisitsMap, $visitorHashKey, $totalVisits);

        echo "Welcome, you've visited this page " .  $totalVisits . " times\n";

    } catch (Exception $e) {
        echo $e->getMessage();
    }

Lưu và đóng trình soạn thảo để thực hiện bước tiếp theo.

Bước 3: Tạo tập lệnh Báo cáo thống kê truy cập trang web

Sau khi thu thập dữ liệu trong Redis hash map, việc này sẽ là vô nghĩa nếu bạn không thể truy xuất và trình bày thông tin trong báo cáo để thống kê lưu lượng truy cập. Trong bước này, bạn sẽ tạo báo cáo nhật ký để hiển thị các khách truy cập trang web khác nhau và tổng số lượt truy cập họ đã thực hiện trên trang web.

Bắt đầu bằng việc tạo tập lệnh báo cáo nhật ký /var/www/html/log_report.php bằng câu lệnh sau:

sudo nano /var/www/html/log_report.php

Sau đó, thực hiện thêm các đoạn code sau:

<!DOCTYPE html>
<html>

  <head>
    <title>Site Visits Report</title>
  </head>

  <body>

      <h1>Site Visits Report</h1>

      <table border = '1'>
        <tr>
          <th>No.</th>
          <th>Visitor</th>
          <th>Total Visits</th>
        </tr>

        <?php

            try {

                $redis = new Redis();
                $redis->connect('127.0.0.1', 6379);
                $redis->auth('EXAMPLE_PASSWORD');

                $siteVisitsMap = 'siteStats';                          

                $siteStats = $redis->HGETALL($siteVisitsMap);

                $i = 1; 

                foreach ($siteStats as $visitor => $totalVisits) {

                    echo "<tr>";
                      echo "<td align = 'left'>"   . $i . "."     . "</td>";
                      echo "<td align = 'left'>"   . $visitor     . "</td>";
                      echo "<td align = 'right'>"  . $totalVisits . "</td>";
                    echo "</tr>";
                    
                    $i++;
                }

            } catch (Exception $e) {
                echo $e->getMessage();
            }

        ?>

      </table>
  </body>

</html>

Bạn lưu ý thay đổi giá trị $redis_auth tương ứng với mật khẩu tài khoản Redis bạn đã cài đặt nhé.

Đoạn code trên sẽ thực hiện kết nối với Redis server bằng câu lệnh $redis->HGETALL($siteVisitsMap); để truy xuất hash map lượt truy cập trang web. Sau đó, sử dụng câu lệnh PHP foreach ($siteStats as $visitor => $totalVisits) { để lặp và hiển thị địa chỉ IP của khách truy cập và số lượt truy cập họ đã thực hiện vào trang web của bạn.

Cuối cùng, dùng lệnh Redis HGETALL để truy xuất tất cả các trường (địa chỉ IP) và giá trị (tổng số lượt truy cập trên mỗi địa chỉ IP) từ bản đồ siteVisitsMap.

Lưu và đóng file sau khi hoàn thành chỉnh sửa.

Bước 4: Thử nghiệm và kiểm tra Redis Hit Counter

Trong bước này, thực hiện kiểm tra toàn bộ logic cho bộ đếm lượt truy cập. Điều hướng đến URL trên trình duyệt web với giá trị your-server-IP được thay bằng địa chỉ IP public hoặc tên miền của server tùy thuộc vào cấu hình của bạn.

http://your-server-IP/test.php

Thực hiện tải lại trang sau mỗi lần truy cập để thấy sự tăng lên của bộ đếm. Với mỗi lượt truy cập, bạn sẽ nhận được thông tin như sau:

Thông tin lượt truy cập
Thông tin lượt truy cập

Xem báo cáo lượt truy cập trang web của bạn được hiển thị trong bảng HTML tại địa chỉ URL:

http://your-server-IP/log_report.php

Bạn sẽ thấy một báo cáo truy cập tương tự như hình sau:

Bao cáo truy cập
Bao cáo truy cập

Có thể thấy, bộ đếm đã hoạt động chính xác và thể hiện tất cả thông số một cách trực quan.

Vietnix là nhà cung cấp VPS tốc độ cao uy tín hàng đầu Việt Nam với hơn 11 năm kinh nghiệm. Được tin dùng bởi hơn 50,000 khách hàng như iVIVU.com, Vietnamwork, KINGFOOD, UBGroup, GTV và nhiều khách hàng khác.

Với chất lượng dịch vụ vượt trội, Vietnix nhận được đánh giá cao từ khách hàng. Có đến 97% khách hàng đánh giá 5 sao cho Vietnix sau khi sử dụng dịch vụ, chứng minh sự hài lòng với hiệu suất và chất lượng dịch vụ mà chúng tôi cung cấp. Đặc biệt, có đến 89% khách hàng đã duy trì sử dụng dịch vụ của Vietnix từ lâu đến hiện tại, chứng tỏ sự tin tưởng và hài lòng của họ.

Uy tín của Vietnix trên thị trường Việt Nam còn khẳng định qua việc Vietnix vinh dự nhận giải thưởng Thương hiệu Việt Nam xuất sắc năm 2022. Do đó, nếu cần giải pháp VPS tốc độ cao, bạn hoàn toàn có thể lựa chọn Vietnix.

Liên hệ ngay với Vietnix để tìm hiểu thêm thông tin chi tiết:

  • Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh
  • Hotline: 1800 1093
  • Email: sales@vietnix.com.vn

Lời kết

Thông qua bài viết về cách thiết lập bộ đếm truy cập web bằng Redis và PHP trên Ubuntu 20.04 này, bạn đã được tìm hiểu về cách cài đặt bộ đếm truy cập trang web PHP bằng Redis trên Ubuntu server. Qua đó bạn có thể biết được webpage nào thu hút lượng truy cập tốt nhất, khả năng chịu tải của Web server,… để có các cải tiến, nâng cấp và bảo vệ phù hợp. Nếu có điều gì thắc mắc, hãy để lại bình luận bên dưới để được hỗ trợ nhé.

THEO DÕI VÀ CẬP NHẬT CHỦ ĐỀ BẠN QUAN TÂM

Đăng ký ngay để nhận những thông tin mới nhất từ blog của chúng tôi. Đừng bỏ lỡ cơ hội truy cập kiến thức và tin tức hàng ngày

Chọn chủ đề :

Hưng Nguyễn

Co-Founder
tại

Kết nối với mình qua

Kết nối với mình qua

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

Tăng tốc độ website - Nâng tầm giá trị thương hiệu

Banner group
Tăng tốc tải trang

95 điểm

Nâng cao trải nghiệm người dùng

Tăng 8% tỷ lệ chuyển đổi

Thúc đẩy SEO, Google Ads hiệu quả

Tăng tốc ngay

SẢN PHẨM NỔI BẬT

Black Friday Hosting & VPS

Chương trình bắt đầu sau

Giảm giá 40% hosting VPS

50 coupon mỗi ngày

Gia hạn giá không đổi

NHẬN DEAL NGAY
Pattern

7 NGÀY DÙNG THỬ HOSTING

NẮM BẮT CƠ HỘI, THÀNH CÔNG DẪN LỐI

Cùng trải nghiệm dịch vụ hosting tốc độ cao được hơn 100,000 khách hàng sử dụng

Icon
ĐĂNG KÝ NHẬN TÀI LIỆU THÀNH CÔNG
Cảm ơn bạn đã đăng ký nhận tài liệu mới nhất từ Vietnix!
ĐÓNG

ĐĂNG KÝ DÙNG THỬ HOSTING

Asset

7 NGÀY MIỄN PHÍ

Asset 1

ĐĂNG KÝ DÙNG THỬ HOSTING

Asset

7 NGÀY MIỄN PHÍ

Asset 1
Icon
XÁC NHẬN ĐĂNG KÝ DÙNG THỬ THÀNH CÔNG
Cảm ơn bạn đã đăng ký thông tin thành công. Đội ngũ CSKH sẽ liên hệ trực tiếp để kích hoạt dịch vụ cho bạn nhanh nhất!
ĐÓNG