Quay lại danh sách
Tin tức công nghệ

Tối Ưu Tốc Độ Website: Hướng Dẫn Tự Host Nền Tảng CDN Cá Nhân Với Varnish Cache Và Nginx Trên 2 VPS

3 tháng 6, 2026

Giới thiệu về giải pháp Tự Host CDN (Self-hosted CDN)

Trong kỷ nguyên số hiện nay, tốc độ tải trang là một trong những yếu tố quyết định đến trải nghiệm người dùng và điểm số SEO của website. Khi lưu lượng truy cập tăng cao, máy chủ gốc (Origin Server) thường phải chịu áp lực lớn để xử lý và phân phối các tệp tin tĩnh như hình ảnh, CSS, JavaScript. Để giải quyết bài toán này, các mạng phân phối nội dung (CDN) thương mại thường là lựa chọn hàng đầu. Tuy nhiên, đối với các doanh nghiệp muốn kiểm soát hoàn toàn dữ liệu, tối ưu chi phí băng thông dài hạn hoặc xây dựng hạ tầng riêng biệt, giải pháp tự host hạ tầng CDN cá nhân là một hướng đi chiến lược xuất sắc.

Bài viết này sẽ hướng dẫn bạn cách thiết lập một hệ thống CDN cá nhân mạnh mẽ bằng cách kết hợp Varnish Cache (đóng vai trò là tầng lưu trữ đệm tốc độ cao) đứng trước Nginx Reverse Proxy (đóng vai trò điều phối và xử lý SSL) phân bổ trên 2 VPS biệt lập.

Tại sao lại kết hợp Varnish Cache và Nginx Reverse Proxy?

Varnish Cache và Nginx đều là những công nghệ máy chủ web hàng đầu, nhưng chúng sở hữu những thế mạnh cốt lõi khác nhau. Khi kết hợp lại, chúng tạo nên một cặp bài trùng hoàn hảo cho hệ thống CDN:

  • Varnish Cache (Bộ nhớ đệm siêu tốc): Được thiết kế chuyên biệt để lưu trữ HTTP cache trong bộ nhớ RAM. Varnish có khả năng phản hồi các yêu cầu file tĩnh gần như ngay lập tức mà không cần tốn tài nguyên xử lý lại từ disk, giúp giảm độ trễ (latency) đến mức tối thiểu.
  • Nginx Reverse Proxy (Linh hoạt và bảo mật): Điểm yếu lớn nhất của Varnish (bản mã nguồn mở) là không hỗ trợ giao thức HTTPS (SSL/TLS) trực tiếp. Nginx sẽ đóng vai trò làm SSL Termination Proxy đứng trước hoặc sau Varnish để mã hóa dữ liệu, đồng thời xử lý các tác vụ như cân bằng tải, ghi log và định tuyến request về máy chủ gốc một cách mượt mà.
Mô hình kiến trúc phổ biến: Người dùng → Nginx (Xử lý SSL) → Varnish Cache (Kiểm tra dữ liệu đệm) → Nginx Backend (Lấy dữ liệu từ Origin Server nếu cache miss).

Chuẩn bị hạ tầng hệ điều hành và mạng

Để triển khai hệ thống này, chúng ta cần chuẩn bị ít nhất 2 VPS chạy hệ điều hành Ubuntu Server (khuyến nghị phiên bản 22.04 LTS hoặc 24.04 LTS) có kết nối mạng ổn định:

  1. VPS 1 (Edge Server - CDN Node): Đây là máy chủ trực tiếp đón nhận traffic từ người dùng. Trên VPS này, chúng ta sẽ cài đặt cả Nginx (làm cổng chặn SSL) và Varnish Cache.
  2. VPS 2 (Origin Server - Máy chủ gốc): Nơi lưu trữ mã nguồn website và các tệp tin tĩnh gốc. Trong thực tế, đây có thể là cụm máy chủ hiện tại của doanh nghiệp của bạn.

Hướng dẫn cấu hình chi tiết trên VPS 1 (CDN Edge Node)

Bước 1: Cài đặt và cấu hình Nginx làm SSL Termination

Đầu tiên, cập nhật hệ thống và cài đặt Nginx trên VPS 1 bằng lệnh tiêu chuẩn. Sau đó, chúng ta cấu hình Nginx lắng nghe ở cổng 443 (HTTPS), tiếp nhận chứng chỉ SSL (từ Let's Encrypt) và chuyển tiếp các request chưa được mã hóa xuống Varnish Cache đang chạy ở cổng 8080.

Đoạn cấu hình mẫu cho Server Block của Nginx:

server {
    listen 443 ssl http2;
    server_name cdn.mydomain.com;

    ssl_certificate /etc/letsencrypt/live/[cdn.mydomain.com/fullchain.pem](https://cdn.mydomain.com/fullchain.pem);
    ssl_certificate_key /etc/letsencrypt/live/[cdn.mydomain.com/privkey.pem](https://cdn.mydomain.com/privkey.pem);

    location / {
        proxy_pass [http://127.0.0.1:8080](http://127.0.0.1:8080);
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
    }
}

Bước 2: Cài đặt và cấu hình Varnish Cache

Tiếp theo, cài đặt Varnish Cache. Chúng ta cần thay đổi cổng lắng nghe mặc định của Varnish từ 6081 thành 8080 để nhận request từ Nginx SSL ở bước trên. Chỉnh sửa file cấu hình dịch vụ hệ thống tại /lib/systemd/system/varnish.service và thay đổi tham số -a :8080.

Sau đó, chúng ta tiến hành cấu hình tệp tin tư duy logic của Varnish (/etc/varnish/default.vcl) để trỏ về Backend chính là Máy chủ gốc (VPS 2):

vcl 4.1;

backend default {
    .host = "IP_CUA_VPS_2";
    .port = "80";
}

sub vcl_recv {
    # Chỉ cache các file tĩnh thông dụng
    if (req.url ~ "(?i)\.(pdf|ascii|txt|ico|docx|rtf|js|css|png|gif|jpeg|jpg|gz|tgz|bz2|tbz|mp3|ogg|svg|woff|woff2|eot|ttf)$") {
        unset req.http.Cookie;
        return (hash);
    }
}

sub vcl_backend_response {
    # Thiết lập thời gian lưu cache (TTL) là 7 ngày cho file tĩnh
    if (beresp.url ~ "(?i)\.(pdf|ascii|txt|ico|docx|rtf|js|css|png|gif|jpeg|jpg|gz|tgz|bz2|tbz|mp3|ogg|svg|woff|woff2|eot|ttf)$") {
        unset beresp.http.set-cookie;
        set beresp.ttl = 7d;
    }
}

Cấu hình tối ưu tại Máy chủ gốc (VPS 2 - Origin Server)

Tại VPS 2, máy chủ Nginx hoặc Apache cần được cấu hình tối ưu để gửi các HTTP Header chính xác, cho phép Varnish nhận biết và lưu trữ tài nguyên một cách hiệu quả. Đảm bảo rằng tiêu đề Cache-Control được thiết lập tường minh cho các thư mục chứa tài nguyên tĩnh:

location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
    expires 7d;
    add_header Cache-Control "public, no-transform";
}

Đồng thời, thiết lập hệ thống tường lửa (UFW) trên VPS 2 để chỉ chấp nhận các kết nối đến từ địa chỉ IP của VPS 1 ở cổng 80/443 nhằm bảo mật tối đa hạ tầng gốc, tránh việc người dùng vượt cấp truy cập trực tiếp vào máy chủ Origin.

Kiểm tra và đánh giá hiệu năng hệ thống CDN cá nhân

Sau khi khởi động lại tất cả các dịch vụ trên cả 2 VPS, bạn có thể kiểm tra xem hệ thống CDN tự host đã hoạt động chính xác hay chưa bằng công cụ dòng lệnh curl:

curl -I [https://cdn.mydomain.com/images/logo.png](https://cdn.mydomain.com/images/logo.png)

Hãy quan sát các tiêu đề HTTP trả về trong phản hồi. Ở lần kiểm tra thứ hai trở đi, bạn sẽ thấy xuất hiện tiêu đề quan trọng: X-Varnish kèm theo các con số định danh, và thời gian phản hồi (Response Time) giảm xuống chỉ còn vài miligiây. Điều này minh chứng rằng tệp tin đã được phân phối trực tiếp từ bộ nhớ RAM của Edge Server mà không cần truy xuất lại máy chủ gốc.

Kết luận và các lưu ý vận hành

Xây dựng hệ thống CDN cá nhân bằng Varnish Cache kết hợp Nginx trên hạ tầng VPS riêng mang lại sự linh hoạt tuyệt đối và hiệu năng vượt trội cho doanh nghiệp. Tuy nhiên, để vận hành hệ thống này một cách ổn định trong môi trường thực tế, bạn cần lưu ý một số điểm sau:

  • Giám sát dung lượng RAM: Vì Varnish lưu trữ cache trực tiếp trên RAM, hãy đảm bảo định cấu hình dung lượng cache phù hợp với tài nguyên của VPS 1 để tránh tình trạng tràn bộ nhớ (Out of Memory).
  • Cơ chế xóa cache (Purge Cache): Thiết lập các lệnh loại bỏ tài nguyên lỗi thời trong Varnish phòng trường hợp bạn cập nhật file tĩnh trên máy chủ gốc nhưng Edge Server vẫn phân phối file cũ.
  • Mở rộng đa điểm (Multi-node): Khi lượng truy cập tăng quy mô toàn cầu, bạn có thể dễ dàng nhân bản cấu hình VPS 1 sang nhiều VPS ở các khu vực địa lý khác nhau và dùng GeoDNS để điều phối người dùng đến Node gần nhất.

Chúc các bạn cấu hình và tối ưu hạ tầng mạng phân phối nội dung thành công!

Tối Ưu Tốc Độ Website: Hướng Dẫn Tự Host Nền Tảng CDN Cá Nhân Với Varnish Cache Và Nginx Trên 2 VPS | DPTCloud