Quản trị VPS

Kiến trúc lai Hybrid VPS và Cloudflare tối ưu chi phí hạ tầng

Hướng dẫn kiến trúc lai Hybrid VPS và Cloudflare: phân tách tầng biên Edge và tầng tính toán Compute để giảm tải đọc và đưa chi phí băng thông tải ra về 0.

Kiến trúc lai Hybrid VPS và Cloudflare tối ưu chi phí hạ tầng
MỤC LỤC

Khi ứng dụng web bắt đầu đón nhận lượng người dùng tăng trưởng nhanh, đội ngũ kỹ thuật thường đứng trước hai lựa chọn hạ tầng quen thuộc: chuyển toàn bộ hệ thống lên các nền tảng đám mây lớn (Cloud Hyperscaler như AWS, Google Cloud) để tận dụng khả năng co giãn tự động, hoặc tiếp tục thuê các máy chủ VPS cấu hình cao để tiết kiệm chi phí.

Cả hai con đường này đều tiềm ẩn những bất cập lớn trong thực tế vận hành:

  • Nếu chọn Cloud Hyperscaler, doanh nghiệp rất dễ rơi vào cạm bẫy chi phí mạng (Egress Bandwidth). Với đơn giá từ 0.09 đến0.12 cho mỗi gigabyte dữ liệu tải ra ngoài Internet, cộng thêm hàng loạt chi phí phụ trợ như Application Load Balancer và NAT Gateway, hóa đơn cuối tháng có thể tăng vọt gấp nhiều lần chỉ sau một chiến dịch tiếp thị hoặc một đợt bot cào dữ liệu hình ảnh.
  • Nếu chọn vận hành thuần túy trên VPS truyền thống (Pure VPS), chi phí hàng tháng tuy cố định nhưng máy chủ gốc phải tiếp xúc trực tiếp với toàn bộ lưu lượng Internet. Mỗi kết nối mới đều tiêu tốn vCPU cho việc đàm phán mã hóa SSL/TLS, các tệp tĩnh làm nghẽn năng lực xử lý I/O của ổ đĩa NVMe, và các đợt lưu lượng tăng đột biến có thể làm cạn kiệt connection pool của web server.

Kiến trúc lai Hybrid Edge-Compute kết hợp giữa máy chủ VPS và mạng lưới biên Cloudflare giải quyết triệt để sự đánh đổi này. Mô hình này tách biệt rõ ràng hai tầng chức năng: đẩy toàn bộ lưu lượng tĩnh, tệp tin tải lên (media), đàm phán mã hóa và phòng thủ biên ra mạng lưới Cloudflare, trong khi các máy chủ VPS chỉ tập trung tài nguyên cho việc xử lý logic ứng dụng động và cơ sở dữ liệu.

Kiến trúc phân tầng Hybrid VPS và Cloudflare

Nghịch lý chi phí hạ tầng: Hyperscaler đắt đỏ và VPS thuần dễ quá tải

Để đưa ra quyết định kiến trúc có căn cứ, trước hết bạn cần hiểu rõ nguồn gốc chi phí và các điểm nghẽn vật lý của từng mô hình khi hệ thống đạt mốc từ vài triệu lượt truy cập mỗi tháng.

1. Cạm bẫy chi phí trên Cloud Hyperscaler

Các nhà cung cấp đám mây lớn như AWS hay Google Cloud sở hữu hệ sinh thái dịch vụ rất phong phú, nhưng mô hình định giá dựa trên mức độ sử dụng (Usage-based Pricing) lại tiềm ẩn các khoản chi phí biến đổi khó dự đoán:

  • Chi phí truyền tải dữ liệu đi ra (Data Transfer Out - Egress): Đây là khoản chi phí dễ gây bất ngờ nhất. Tại khu vực Châu Á - Thái Bình Dương (như Singapore hoặc Tokyo), AWS tính phí khoảng 0.114 đến0.12 trên mỗi gigabyte truyền ra Internet. Một website tin tức, thương mại điện tử hoặc ứng dụng SaaS phân phối khoảng 8 TB hình ảnh và tài nguyên tĩnh mỗi tháng sẽ phải chi trả gần $900 USD chỉ riêng cho tiền băng thông.
  • Chi phí thành phần mạng trung gian: Để dựng một hệ thống đúng chuẩn bảo mật trên AWS, bạn cần đặt máy chủ trong Private Subnet. Điều này đòi hỏi NAT Gateway để máy chủ tải bản vá phần mềm (0.045/giờ cố định +0.045/GB dữ liệu chuyển qua, tương đương khoảng 35 –50/tháng). Thêm một Application Load Balancer (ALB) tiêu tốn thêm khoảng 20 –30/tháng chưa tính cước lưu lượng xử lý.
  • Chi phí lưu trữ và thao tác API: Dịch vụ lưu trữ tệp tin S3 tính tiền trên từng gigabyte lưu trữ ($0.023/GB) và tính thêm tiền cho mỗi 1.000 yêu cầu PUT, LIST hoặc GET.

Tổng hòa các yếu tố trên khiến chi phí hạ tầng của doanh nghiệp trở nên rất khó kiểm soát khi lưu lượng truy cập tăng đột biến.

2. Giới hạn vật lý khi vận hành thuần VPS truyền thống

Nhằm tránh mức giá đắt đỏ của đám mây công cộng, nhiều quản trị viên lựa chọn các nhà cung cấp máy chủ giá cố định (như Hetzner, OVH, Linode, DigitalOcean hoặc các nhà cung cấp trong nước). Ưu điểm lớn nhất là mức giá rất hợp lý và băng thông đi kèm thường rất lớn (từ 2 TB đến 20 TB/tháng miễn phí).

Tuy nhiên, như đã phân tích trong bài toán khi nào nên nâng cấp VPS hay tối ưu ứng dụng, việc để một hoặc nhiều VPS đối mặt trực tiếp với Internet công cộng sẽ bộc lộ các giới hạn phần cứng:

  1. Hao phí vCPU cho đàm phán mã hóa (TLS Handshake Overhead): Mỗi kết nối HTTPS mới giữa trình duyệt và Nginx đòi hỏi các phép toán mã hóa khóa công khai (RSA hoặc ECDSA). Khi có hàng nghìn người dùng truy cập đồng thời hoặc gặp các đợt micro-burst, CPU của máy chủ có thể phải dành từ 20% đến 35% năng lực xử lý chỉ để hoàn tất chu trình bắt tay mã hóa trước khi code ứng dụng kịp chạy.
  2. Nghẽn năng lực đọc ghi ổ đĩa (Disk I/O Bottleneck): Nếu bạn lưu trữ hàng chục gigabyte hình ảnh và tệp tin tải lên ngay trên ổ đĩa của máy chủ web, Nginx sẽ liên tục phải đọc các tệp này từ đĩa để trả về cho người dùng. Dù Linux có bộ nhớ đệm trang (Page Cache), các tệp media có dung lượng lớn vẫn cạnh tranh tài nguyên I/O trực tiếp với các tiến trình ghi nhật ký và truy vấn cơ sở dữ liệu.
  3. Tiêu hao tài nguyên bởi bot và công cụ quét mạng: Trung bình mỗi ngày, một máy chủ có địa chỉ IP công cộng tiếp nhận hàng chục nghìn yêu cầu rác từ các công cụ quét tự động (Shodan, Censys, bot dò tìm lỗ hổng wp-login.php, /.env). Dù ứng dụng trả về mã lỗi 404, mỗi yêu cầu này vẫn chiếm dụng một socket kết nối và một phần bộ nhớ của web server.

3. Hướng tiếp cận Hybrid Edge-Compute

Kiến trúc lai Hybrid kết hợp ưu điểm của cả hai thế giới:

  • Tầng biên (Cloudflare Edge): Đóng vai trò lớp đệm đầu tiên, hấp thụ toàn bộ các tác vụ tốn băng thông, tiêu hao CPU mã hóa và xử lý bot rác.
  • Tầng tính toán (Compute VPS): Giữ chi phí cố định hàng tháng, ẩn hoàn toàn sau mạng biên và chỉ tập trung xử lý các yêu cầu nghiệp vụ thực sự cần thiết.

Nguyên lý phân tầng kiến trúc Hybrid VPS và Cloudflare

Kiến trúc Hybrid phân định ranh giới trách nhiệm rất rõ ràng giữa hai tầng, đảm bảo mỗi thành phần chỉ thực hiện đúng nhiệm vụ mà nó tối ưu nhất.

text
               [ Trình duyệt / Ứng dụng di động / API Clients ]
                                      │
                                      ▼
    ┌───────────────────────────────────────────────────────────────────┐
    │                    TẦNG BIÊN CLOUDFLARE (EDGE)                    │
    │  - Anycast DNS định tuyến độ trễ thấp toàn cầu                    │
    │  - Đàm phán SSL/TLS, hỗ trợ HTTP/2 và HTTP/3 (QUIC)               │
    │  - Tường lửa WAF, giới hạn tần suất (Rate Limiting) và lọc bot    │
    │  - Edge Cache Engine: Lưu đệm tệp tĩnh và Microcaching trang HTML │
    │  - Cloudflare R2: Lưu trữ media không tính phí băng thông tải ra  │
    └─────────────────────────────────┬─────────────────────────────────┘
                                      │
                                      │ Đường hầm mã hóa Cloudflare Tunnel
                                      │ (Không mở cổng 80/443 trên VPS)
                                      ▼
    ┌───────────────────────────────────────────────────────────────────┐
    │                   TẦNG TÍNH TOÁN (COMPUTE VPS)                    │
    │  - Tiến trình cloudflared tiếp nhận yêu cầu từ mạng biên          │
    │  - Nginx Reverse Proxy điều phối nội bộ                           │
    │  - Container ứng dụng xử lý logic nghiệp vụ (PHP, Node, Go)       │
    │  - Cơ sở dữ liệu MySQL / PostgreSQL hoạt động trên ổ đĩa NVMe     │
    └───────────────────────────────────────────────────────────────────┘

1. Nhiệm vụ của tầng biên Cloudflare

  • Giải mã và bắt tay TLS tại POP biên: Trình duyệt kết nối tới trung tâm dữ liệu Cloudflare gần nhất theo định tuyến Anycast. Quá trình bắt tay mã hóa diễn ra tại biên, giúp phản hồi mạng nhanh hơn và giải phóng hoàn toàn gánh nặng tính toán mật mã cho máy chủ VPS.
  • Lưu đệm tài nguyên tĩnh (Static Asset Caching): Toàn bộ file JavaScript, CSS, hình ảnh định dạng WebP, SVG và font chữ được lưu đệm trên bộ nhớ SSD của mạng lưới biên. Khi người dùng yêu cầu các tệp này, Cloudflare phản hồi trực tiếp (Cache Hit) với độ trễ chỉ từ 10 đến 30 mili-giây, không tiêu tốn một chu kỳ CPU hay một byte băng thông nào của VPS.
  • Lưu trữ tệp tin tải lên qua Cloudflare R2: Tệp tin hình ảnh, tài liệu và video người dùng đăng tải được đưa thẳng lên dịch vụ lưu trữ Object Storage R2 tương thích S3. Điểm khác biệt quan trọng nhất của R2 so với AWS S3 là chính sách không tính phí truyền tải dữ liệu ra ngoài (Zero Egress Fee).
  • Lọc lưu lượng rác và tấn công DDoS: Tường lửa WAF và hệ thống nhận diện bot xử lý các đợt tấn công từ chối dịch vụ hoặc quét tự động ngay tại tầng biên trước khi chúng có cơ hội chạm tới card mạng của máy chủ.

2. Nhiệm vụ của tầng tính toán VPS

  • Xử lý logic ứng dụng thuần túy: Khi lưu lượng tĩnh và các kết nối rác đã được lọc sạch ở tầng biên, số lượng yêu cầu chuyển tiếp về VPS giảm từ 85% đến 95%. Máy chủ web (Nginx) và các runtime ứng dụng (PHP-FPM, NodeJS, Go, Python) chỉ cần phục vụ các yêu cầu động hoặc truy vấn API.
  • Bảo vệ tài nguyên cho cơ sở dữ liệu: Ổ đĩa NVMe tốc độ cao trên VPS được giải phóng khỏi gánh nặng phục vụ tệp tĩnh, dành trọn vẹn băng thông IOPS cho việc đọc ghi dữ liệu nghiệp vụ của MySQL hoặc PostgreSQL.
  • Cách ly mạng an toàn: Máy chủ VPS không cần mở cổng 80 và 443 ra ngoài Internet. Toàn bộ lưu lượng được tiếp nhận an toàn qua tiến trình đường hầm nội bộ hoặc xác thực chứng chỉ hai chiều.

Chiến lược Cache tại biên: Tối ưu tỷ lệ giảm tải lưu lượng

Mục tiêu quan trọng nhất khi triển khai kiến trúc Hybrid là đạt được tỷ lệ giảm tải (Offload Ratio) cao. Nếu tỷ lệ Cache Hit tại tầng biên đạt trên 85%, cụm máy chủ VPS cấu hình tầm trung hoàn toàn có thể phục vụ lượng truy cập lớn mà không gặp hiện tượng quá tải.

1. Cấu hình HTTP Cache Headers chuẩn xác tại Nginx backend

Tầng biên Cloudflare hoạt động dựa trên các tiêu đề phản hồi (Response Headers) do máy chủ gốc trả về. Bạn cần cấu hình Nginx để phân biệt rõ hai nhóm tài nguyên: tài nguyên tĩnh có phiên bản và tài nguyên động có thể lưu đệm ngắn hạn.

Mở tệp cấu hình virtual host của Nginx trên máy chủ VPS:

nginx
# Nhóm 1: Tài nguyên tĩnh có chuỗi băm phiên bản (Hash Filename)
# Ví dụ: app.a8f9c1.js, style.b2e4d9.css
location ~* \.(css|js|woff2|woff|ttf|ico|svg|png|webp|jpg|jpeg)$ {
    expires 1y;
    # Chỉ thị cho Edge và Trình duyệt lưu đệm 1 năm, không cần hỏi lại
    add_header Cache-Control "public, max-age=31536000, immutable";
    access_log off;
    log_not_found off;
}

# Nhóm 2: Các trang nội dung động (Dynamic Content / Danh mục / Bài viết)
location / {
    proxy_pass http://upstream_app;
    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 $scheme;

    # Kỹ thuật Microcaching kết hợp Stale-While-Revalidate
    # Lưu đệm ngắn hạn 10 giây cho khách vãng lai
    # Cho phép Edge dùng cache cũ tối đa 60 giây trong khi kéo bản mới ngầm
    add_header Cache-Control "public, max-age=10, stale-while-revalidate=60, stale-if-error=300";
}

Ý nghĩa của các chỉ thị:

  • immutable: Báo cho trình duyệt biết tệp tĩnh này sẽ không bao giờ thay đổi nội dung trong suốt vòng đời của nó. Trình duyệt không cần gửi yêu cầu If-Modified-Since để xác nhận lại khi người dùng tải lại trang.
  • stale-while-revalidate=60: Khi bộ nhớ đệm 10 giây tại Edge vừa hết hạn, nếu có người dùng mới truy cập, Cloudflare sẽ ngay lập tức trả về bản lưu đệm cũ (đảm bảo độ trễ phản hồi cực nhanh), đồng thời âm thầm gửi một yêu cầu ngầm về VPS để cập nhật bản mới vào cache.
  • stale-if-error=300: Nếu máy chủ VPS tạm thời bị lỗi phản hồi (502 hoặc 504), Cloudflare sẽ tiếp tục dùng bản cache gần nhất để phục vụ người dùng trong tối đa 5 phút thay vì hiển thị trang báo lỗi.

Kỹ thuật này hoạt động tương đồng với cơ chế Nginx FastCGI Cache và Microcaching cục bộ, nhưng được nâng lên cấp độ mạng phân tán toàn cầu.

2. Thiết lập Cloudflare Cache Rules

Trên bảng điều khiển Cloudflare, bạn vào mục Caching > Cache Rules để thiết lập quy tắc điều phối chi tiết:

  1. Bỏ qua chuỗi truy vấn không quan trọng (Ignore Query String): Các tham số tiếp thị như utm_source, utm_medium, fbclid không làm thay đổi nội dung trang web nhưng theo mặc định sẽ khiến CDN coi đó là một trang mới và gửi yêu cầu về gốc. Bật tính năng bỏ qua tham số tiếp thị giúp tỷ lệ Cache Hit tăng đáng kể.
  2. Quy tắc Bypass cho người dùng đăng nhập: Khi người dùng đã đăng nhập hoặc thêm hàng vào giỏ, nội dung trang mang tính cá nhân hóa và không được phép lưu đệm. Tạo điều kiện kiểm tra cookie:
  • Nếu HTTP Request Cookie chứa các chuỗi như wordpress_logged_in_, session_id, hoặc token, thiết lập hành vi: Bypass Cache.
  • Nếu không có các cookie trên: Áp dụng Eligible for Cache theo tiêu đề do Nginx trả về.

Cắt giảm chi phí lưu trữ và băng thông tệp tin với Cloudflare R2

Lưu trữ tệp tin tải lên (User Uploads) trực tiếp trên ổ đĩa của máy chủ là một thói quen vận hành tiềm ẩn nhiều rủi ro khi website mở rộng quy mô. Việc này làm dung lượng ổ cứng NVMe phình to nhanh chóng, kéo dài thời gian tạo snapshot dự phòng và làm nghẽn băng thông của máy chủ khi nhiều người cùng tải tệp.

Áp dụng giải pháp lưu trữ tệp tin độc lập trong mô hình Multi-Server với dịch vụ Cloudflare R2 mang lại lợi thế tài chính vượt trội:

Tiêu chí so sánhAWS S3 StandardỔ đĩa Block Storage VPSCloudflare R2
Chi phí lưu trữ (Storage)$0.023 / GB / tháng0.08 –0.10 / GB / tháng$0.015 / GB / tháng
Chi phí tải dữ liệu ra (Egress)0.09 –0.114 / GBMiễn phí trong hạn mức gói VPS$0.00 / GB (Hoàn toàn miễn phí)
Gắn tên miền CDN tùy chỉnhCần thiết lập thêm CloudFrontNginx tự phục vụTích hợp sẵn trực tiếp trên Dashboard
Khả năng co giãn dung lượngVô hạnGiới hạn theo dung lượng phân vùngVô hạn

Triển khai Direct-to-R2 Upload qua Presigned URL

Mặc định, các gói Cloudflare Free và Pro giới hạn kích thước yêu cầu tải lên (HTTP Request Body Size) ở mức 100MB. Hơn nữa, nếu trình duyệt tải trực tiếp tệp lớn (như video hoặc file nén) lên máy chủ VPS rồi VPS mới đẩy sang R2, máy chủ sẽ phải tốn dung lượng RAM và băng thông trung chuyển.

Giải pháp chuẩn mực là sử dụng cơ chế Presigned URL:

text
  [ Trình duyệt / Client ] ──(1) Yêu cầu upload (tên file, kích thước)──> [ Máy chủ VPS ]
             │                                                                   │
             │                                                         (2) Sinh Presigned URL
             │                                                             (Hạn 15 phút)
             │<───────────────(3) Trả về Upload URL có chữ ký───────────────────┘
             │
             └────────(4) Gửi lệnh PUT đẩy file thẳng vào R2──────────> [ Cloudflare R2 ]

Bước 1: Backend sinh Presigned URL

Ứng dụng backend (ví dụ bằng NodeJS / TypeScript) sử dụng thư viện @aws-sdk/client-s3 tiêu chuẩn để tạo đường dẫn tạm thời:

javascript
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
import { getSignedUrl } from "@aws-sdk/s3-request-presigner";

const r2Client = new S3Client({
  region: "auto",
  endpoint: `https://${process.env.CF_ACCOUNT_ID}.r2.cloudflarestorage.com`,
  credentials: {
    accessKeyId: process.env.R2_ACCESS_KEY_ID,
    secretAccessKey: process.env.R2_SECRET_ACCESS_KEY,
  },
});

export async function generateUploadUrl(fileName, contentType) {
  const objectKey = `media/${Date.now()}-${fileName}`;
  const command = new PutObjectCommand({
    Bucket: "my-production-bucket",
    Key: objectKey,
    ContentType: contentType,
  });

  // Đường dẫn tải lên có hiệu lực trong 15 phút (900 giây)
  const uploadUrl = await getSignedUrl(r2Client, command, { expiresIn: 900 });
  return { uploadUrl, objectKey };
}

Bước 2: Trình duyệt tải tệp trực tiếp lên R2

Sau khi nhận được uploadUrl từ máy chủ, trình duyệt thực hiện lệnh fetch với phương thức PUT:

javascript
async function uploadFileDirectly(file, uploadUrl) {
  const response = await fetch(uploadUrl, {
    method: "PUT",
    headers: {
      "Content-Type": file.type,
    },
    body: file,
  });

  if (!response.ok) {
    throw new Error("Tải tệp lên lưu trữ R2 thất bại");
  }
}

Nhờ cơ chế này, máy chủ VPS hoàn toàn không phải trung chuyển dữ liệu tệp tin. Toàn bộ tải ghi đĩa và băng thông được chuyển thẳng sang Cloudflare R2 mà không tốn một đồng chi phí trung chuyển mạng.


Bảo vệ máy chủ gốc bằng Cloudflare Tunnel (cloudflared)

Khi sử dụng CDN truyền thống, địa chỉ IP công cộng của máy chủ VPS vẫn phải mở cổng 80 và 443 để nhận kết nối từ các máy chủ trung gian. Kẻ tấn công hoặc các công cụ quét tự động có thể tìm ra địa chỉ IP gốc (Origin IP Leak) thông qua lịch sử bản ghi DNS, tiêu đề email gửi đi hoặc chứng chỉ SSL, từ đó tấn công trực diện vào máy chủ để qua mặt lớp phòng thủ Cloudflare.

Giải pháp an toàn và hiệu quả nhất là sử dụng Cloudflare Tunnel (tiến trình cloudflared).

1. Cơ chế hoạt động của Cloudflare Tunnel

Như đã so sánh chi tiết trong bài viết Cloudflare Tunnel vs WireGuard VPN, cloudflared là một daemon nhẹ (tiêu thụ khoảng 25MB đến 35MB RAM) chạy trực tiếp trên máy chủ VPS:

  • Sau khi khởi động, nó tự động mở 4 kết nối mã hóa outbound (giao thức QUIC/TCP) tới hai trung tâm dữ liệu Cloudflare gần nhất.
  • Khi người dùng gửi yêu cầu tới website, Cloudflare định tuyến yêu cầu qua các kết nối ngầm có sẵn này để đưa về cổng cục bộ của Nginx (127.0.0.1:80).
  • Máy chủ VPS không cần mở bất kỳ cổng dịch vụ web nào ra ngoài Internet, và thậm chí không cần gán địa chỉ IP công cộng tĩnh.

2. Cài đặt và cấu hình cloudflared

Tải về và cài đặt gói phần mềm trên hệ điều hành Ubuntu / Debian:

bash
# Tải về bản cài đặt chính thức của Cloudflare
curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared.deb

Đăng nhập và khởi tạo đường hầm liên kết với tài khoản Cloudflare:

bash
# Xác thực tài khoản với Cloudflare
cloudflared tunnel login

# Tạo một tunnel định danh cho cụm máy chủ
cloudflared tunnel create vps-production-tunnel

Hệ thống sẽ tạo ra một tệp thông tin xác thực dạng <TUNNEL_UUID>.json trong thư mục ~/.cloudflared/. Tạo tệp cấu hình /etc/cloudflared/config.yml:

yaml
tunnel: <TUNNEL_UUID>
credentials-file: /etc/cloudflared/<TUNNEL_UUID>.json

ingress:
  # Điều hướng tên miền chính về Nginx chạy trên localhost
  - hostname: example.com
    service: http://127.0.0.1:80
    originRequest:
      connectTimeout: 10s
      noTLSVerify: false

  # Điều hướng subdomain API về cổng backend riêng nếu cần
  - hostname: api.example.com
    service: http://127.0.0.1:3000

  # Khối bắt buộc cuối cùng để bắt các yêu cầu không khớp
  - service: http_status:404

Định tuyến tên miền trên Cloudflare DNS trỏ về Tunnel:

bash
cloudflared tunnel route dns vps-production-tunnel example.com
cloudflared tunnel route dns vps-production-tunnel api.example.com

Cài đặt cloudflared làm dịch vụ hệ thống tự khởi động:

bash
sudo cloudflared service install
sudo systemctl enable --now cloudflared

3. Đóng cổng tường lửa UFW an toàn

Sau khi kiểm tra tiến trình cloudflared đã kết nối thành công và website truy cập bình thường, bạn có thể khóa toàn bộ cổng web công cộng trên tường lửa UFW:

bash
# Thiết lập chính sách mặc định
sudo ufw default deny incoming
sudo ufw default allow outgoing

# Giữ cổng SSH để quản trị (khuyến nghị chỉ mở cho IP mạng riêng hoặc WireGuard)
sudo ufw allow 22/tcp

# Đảm bảo KHÔNG mở cổng 80 và 443 ra ngoài
# Kích hoạt tường lửa
sudo ufw enable

Nếu hệ thống của bạn cần sử dụng địa chỉ IP công cộng (chưa thể cài đặt cloudflared), bạn nên kích hoạt phương án thay thế là Cloudflare Authenticated Origin Pulls (AOP) để Nginx chỉ chấp nhận kết nối khi có chứng chỉ TLS hợp lệ từ Cloudflare.


Bảng so sánh định lượng: Pure VPS vs Cloud Hyperscaler vs Hybrid Model

Để giúp bạn hình dung rõ ràng hiệu quả kinh tế và vận hành, dưới đây là bảng tính toán chi phí ước tính cho một hệ thống phục vụ 5.000.000 lượt xem trang (Pageviews)/tháng, dung lượng tệp tin media tích lũy 500 GB, và lưu lượng truyền tải trung bình 8 TB dữ liệu/tháng:

Hạng mục chi phí / Tiêu chíPhương án 1: Pure Hyperscaler (AWS)Phương án 2: Pure VPS Scale-UpPhương án 3: Hybrid VPS + Cloudflare
Máy chủ tính toán (Compute)2 x t4g.medium + RDS db.t4g.small = ~$125/tháng1 VPS cấu hình cao (8 vCPU, 16GB RAM) = ~$45/tháng1–2 VPS tầm trung (4 vCPU, 8GB RAM) = ~20 –25/tháng
Băng thông mạng (Egress)8 TB x 0.09/GB = ~720/thángĐã bao gồm trong gói VPS = $0Cloudflare CDN + R2 gánh 90% = $0 (Zero Egress)
Lưu trữ tệp tin (Storage)S3 500 GB = ~$11.5/thángMua thêm Block Storage 500GB = ~$45/thángCloudflare R2 500 GB = $7.50/tháng
Cân bằng tải & Mạng (Network/ALB)1 AWS ALB + NAT Gateway = ~$50/thángNginx cài trên VPS = $0Cloudflare Anycast + Tunnel = 0 (hoặc20 gói Pro)
Tổng chi phí ước tính hàng tháng~$906.5 / tháng~$90 / tháng~27.5 –47.5 / tháng
Khả năng hấp thụ lượng truy cập tăng vọtTốt (tự co giãn), nhưng chi phí tăng không giới hạn theo lưu lượng.Hạn chế (dễ nghẽn connection pool và CPU khi có spike đột biến).Rất tốt (mạng biên hấp thụ 90% lưu lượng, chi phí duy trì cố định).
Thời gian phản hồi TTFB toàn cầu80ms – 250ms (tùy thuộc Region đặt máy chủ).150ms – 400ms đối với người dùng ở xa máy chủ.15ms – 45ms (trả về từ trung tâm dữ liệu Cloudflare gần nhất).
Rủi ro tài chính phát sinhRất cao nếu bị tấn công bot hoặc tải dữ liệu lớn ngoài tầm kiểm soát.Thấp (chi phí gói cố định).Thấp (chi phí dự đoán được 100%).

Mô hình Hybrid mang lại mức chi phí thấp hơn tới 18 lần so với việc chạy toàn bộ trên Cloud Hyperscaler, đồng thời đem lại tính ổn định và tốc độ phản hồi vượt trội so với giải pháp chạy thuần túy trên máy chủ đơn lẻ.


Các lưu ý kỹ thuật khi vận hành kiến trúc Hybrid

Dù mang lại nhiều lợi thế về chi phí và hiệu năng, việc đưa một lớp proxy biên vào giữa người dùng và máy chủ gốc đòi hỏi đội ngũ kỹ thuật phải xử lý đúng các vấn đề kiến trúc sau:

1. Kiến trúc phi trạng thái (Stateless) và Quản lý phiên đăng nhập

Khi lưu lượng người dùng được lưu đệm tại biên hoặc phân phối qua nhiều máy chủ VPS phía sau theo lộ trình chuyển dịch Multi-Server:

  • Ứng dụng không nên lưu trữ session người dùng trên filesystem cục bộ của từng VPS.
  • Toàn bộ phiên đăng nhập phải được quản lý tập trung trên cụm Redis hoặc sử dụng định dạng JSON Web Token (JWT) có chữ ký số an toàn.

2. Cơ chế xóa bộ nhớ đệm tự động (Cache Invalidation)

Điểm yếu thường gặp khi áp dụng cache biên là tình trạng "dữ liệu cũ bị kẹt trên CDN" sau khi biên tập viên cập nhật bài viết hoặc thay đổi giá sản phẩm. Để giải quyết:

  • Thiết lập webhook hoặc plugin tích hợp để tự động gọi API của Cloudflare xóa cache theo URL cụ thể (Purge by URL) ngay khi có sự kiện xuất bản nội dung mới.
  • Đối với các tài nguyên tĩnh (JS, CSS), luôn luôn sử dụng kỹ thuật đặt tên file kèm chuỗi băm (Content Hashing: main.d41d8c.js). Khi có bản cập nhật mới, tên file thay đổi hoàn toàn, giúp loại trừ nguy cơ trình duyệt hoặc CDN lưu giữ phiên bản cũ mà không cần chạy lệnh xóa toàn bộ cache (Purge Everything).

3. Tránh phụ thuộc độc quyền vào một nhà cung cấp biên (Vendor Lock-in)

Không nên viết quá nhiều logic nghiệp vụ phức tạp trực tiếp lên nền tảng Cloudflare Workers nếu không thực sự cần thiết. Hãy giữ cho ứng dụng backend và cấu hình Nginx của bạn tuân thủ các chuẩn HTTP tiêu chuẩn (như Cache-Control, Vary, ETag). Khi cấu hình máy chủ gốc chuẩn xác, bạn có thể dễ dàng chuyển đổi sang các dịch vụ CDN khác (như Fastly, CloudFront hoặc CDN nội địa) bất kỳ lúc nào mà không phải viết lại mã nguồn ứng dụng.


Lộ trình kiểm soát chi phí hạ tầng tiếp theo

Kiến trúc lai Hybrid VPS và Cloudflare là nền tảng cốt lõi giúp hệ thống đạt hiệu năng tối ưu với mức ngân sách tiết kiệm nhất. Để hoàn thiện quy trình quản trị chi phí hạ tầng (FinOps thực dụng) cho doanh nghiệp, bạn nên tiếp tục rà soát các khía cạnh liên quan:

Nội dung hướng dẫn này có hữu ích với hệ thống của bạn không?

Chia sẻ bài viết hữu ích

Gửi bài viết này cho đồng nghiệp

Đọc tiếp

Bài nên đọc tiếp

Xem tất cả bài về Quản trị VPS