Trong thời đại công nghệ số hiện nay, việc tối ưu hóa tốc độ tải trang và quản lý tài nguyên là điều vô cùng quan trọng đối với bất kỳ website nào. Một trong những giải pháp hiệu quả nhất là sử dụng CDN (Content Delivery Network) – mạng phân phối nội dung. Thay vì sử dụng dịch vụ CDN bên thứ ba, bạn hoàn toàn có thể tự tạo server CDN riêng để lưu trữ và phân phối file tĩnh như hình ảnh, video, CSS, JS,... Điều này giúp tiết kiệm chi phí, tăng quyền kiểm soát và tối ưu hiệu suất hệ thống.

CDN là gì?
CDN (Content Delivery Network) riêng là một hệ thống máy chủ do bạn tự thiết lập và quản lý để lưu trữ và phân phối các file tĩnh (như hình ảnh, CSS, JavaScript, video) tới người dùng. Không giống các dịch vụ CDN thương mại (Cloudflare, AWS CloudFront), CDN riêng cho phép bạn toàn quyền kiểm soát dữ liệu, bảo mật và cấu hình, đồng thời giảm chi phí dài hạn nếu được tối ưu tốt.
Tại sao nên tạo Server CDN riêng?
- Kiểm soát dữ liệu: Tránh rủi ro liên quan đến việc bên thứ ba thu thập hoặc sử dụng dữ liệu người dùng.
- Tùy chỉnh cao: Điều chỉnh cấu hình phù hợp với nhu cầu cụ thể của dự án.
- Tiết kiệm chi phí: Phù hợp cho các dự án có lưu lượng truy cập lớn, tránh lệ thuộc vào chi phí dịch vụ CDN thương mại.
- Bảo mật: Dễ dàng triển khai các biện pháp bảo mật riêng, như giới hạn truy cập theo khu vực hoặc mã hóa.
Khi nào nên tạo Server CDN riêng?
- Website có lượng truy cập cao hoặc người dùng phân bố ở nhiều khu vực địa lý.
- Cần lưu trữ các file tĩnh lớn (ví dụ: video, phần mềm).
- Muốn giảm tải cho máy chủ gốc (origin server).
- Có yêu cầu đặc biệt về bảo mật hoặc tuân thủ quy định (như GDPR).
Các bước tạo Server CDN riêng
Dưới đây là hướng dẫn từng bước để thiết lập một CDN riêng sử dụng Nginx – một web server mạnh mẽ và phổ biến để phân phối nội dung tĩnh. Hướng dẫn này giả định bạn có kiến thức cơ bản về Linux và quản trị server.
Bước 1: Chuẩn bị tài nguyên
- Máy chủ (Server):
- Thuê ít nhất 2-3 máy chủ ở các khu vực địa lý khác nhau, gần với đối tượng người dùng mục tiêu (ví dụ: Mỹ, châu Âu, châu Á). Các nhà cung cấp phổ biến:
- DigitalOcean, Linode, Vultr (cloud server).
- OVH, Hetzner (máy chủ chuyên dụng).
- Cấu hình tối thiểu: 2GB RAM, 1 CPU, 20GB SSD, băng thông tốt.
- Thuê ít nhất 2-3 máy chủ ở các khu vực địa lý khác nhau, gần với đối tượng người dùng mục tiêu (ví dụ: Mỹ, châu Âu, châu Á). Các nhà cung cấp phổ biến:
- Tên miền (Domain):
- Đăng ký một tên miền chính (ví dụ: yourdomain.com) và tạo subdomain cho CDN (như cdn.yourdomain.com).
- Sử dụng nhà cung cấp như Namecheap, GoDaddy hoặc Cloudflare (chỉ để quản lý DNS).
- Chứng chỉ SSL:
- CDN cần hỗ trợ HTTPS để đảm bảo bảo mật. Sử dụng Let’s Encrypt để lấy chứng chỉ SSL miễn phí.
- Phần mềm cần thiết:
- Nginx: Web server để làm máy chủ CDN.
- rsync: Đồng bộ file giữa máy chủ gốc và các máy chủ CDN (edge server).
- acme.sh: Tự động hóa cấp và gia hạn chứng chỉ SSL.
Bước 2: Thiết lập máy chủ gốc (Origin Server)
Máy chủ gốc là nơi lưu trữ tất cả các file tĩnh ban đầu. Các máy chủ CDN (edge server) sẽ lấy nội dung từ đây và lưu vào bộ nhớ cache.
Cài đặt hệ điều hành:
Chọn Ubuntu 22.04 LTS (hoặc phiên bản mới hơn) cho máy chủ gốc.
Cập nhật hệ thống:
sudo apt update && sudo apt upgrade -y
Cài đặt Nginx:
- Cài Nginx để phục vụ file tĩnh:
sudo apt install nginx -y
Khởi động và bật Nginx:
sudo systemctl start nginx
sudo systemctl enable nginx
Tạo thư mục lưu trữ file tĩnh:
- Tạo thư mục /var/www/cdn để lưu các file tĩnh:
sudo mkdir -p /var/www/cdn
sudo chown -R www-data:www-data /var/www/cdn
- Ví dụ, bạn có thể upload các file như style.css, script.js, image.jpg vào /var/www/cdn.
Cấu hình Nginx:
- Tạo tệp cấu hình cho CDN:
sudo nano /etc/nginx/sites-available/cdn
Thêm cấu hình sau:
server {
listen 80;
server_name cdn.yourdomain.com;
root /var/www/cdn;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
Kích hoạt cấu hình:
sudo ln -s /etc/nginx/sites-available/cdn /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Cấu hình DNS:
- Truy cập nhà cung cấp tên miền, tạo bản ghi A trỏ cdn.yourdomain.com tới địa chỉ IP của máy chủ gốc.
Bước 3: Thiết lập các máy chủ CDN (Edge Server)
Máy chủ CDN (edge server) sẽ lưu trữ bản sao của các file tĩnh và phục vụ người dùng từ vị trí gần nhất.
Cài đặt hệ điều hành và Nginx:
Lặp lại bước cài đặt Ubuntu và Nginx trên từng edge server (tương tự bước 2).
Cấu hình Nginx làm Proxy Cache:
- Tạo thư mục cache:
sudo mkdir -p /var/cache/nginx/cdn
sudo chown www-data:www-data /var/cache/nginx/cdn
- Tạo tệp cấu hình:
sudo nano /etc/nginx/sites-available/cdn
- Thêm cấu hình sau:
proxy_cache_path /var/cache/nginx/cdn levels=1:2 keys_zone=CDN:10m max_size=10g inactive=60m use_temp_path=off;
server {
listen 80;
server_name cdn.yourdomain.com;
location / {
proxy_pass http://<IP-máy-chủ-gốc>;
proxy_cache CDN;
proxy_cache_valid 200 302 60m;
proxy_cache_valid 404 1m;
proxy_cache_key "$scheme$request_uri";
proxy_set_header Host cdn.yourdomain.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header X-Cache-Status $upstream_cache_status;
}
}
- Thay <IP-máy-chủ-gốc> bằng địa chỉ IP của máy chủ gốc.
Kích hoạt cấu hình:
sudo ln -s /etc/nginx/sites-available/cdn /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Đồng bộ file tĩnh (Tùy chọn):
- Nếu muốn edge server lưu trữ file tĩnh thay vì chỉ làm cache, sử dụng rsync để đồng bộ từ máy chủ gốc:
rsync -avz /var/www/cdn/ user@<IP-edge-server>:/var/www/cdn/
- Tạo cron job để tự động đồng bộ (ví dụ: mỗi giờ):
crontab -e
- Thêm dòng:
0 * * * * rsync -avz /var/www/cdn/ user@<IP-edge-server>:/var/www/cdn/
Bước 4: Cài đặt SSL với Let’s Encrypt
Cài đặt acme.sh:
- Trên từng máy chủ (gốc và edge):
curl https://get.acme.sh | sh
source ~/.bashrc
Cấp chứng chỉ SSL:
- Trên máy chủ gốc:
acme.sh --issue -d cdn.yourdomain.com --webroot /var/www/cdn
- Sao chép chứng chỉ tới edge server:
scp -r ~/.acme.sh/cdn.yourdomain.com/* user@<IP-edge-server>:~/.acme.sh/cdn.yourdomain.com/
Cập nhật cấu hình Nginx:
- Sửa tệp /etc/nginx/sites-available/cdn trên mỗi máy chủ, thêm HTTPS:
server {
listen 80;
server_name cdn.yourdomain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name cdn.yourdomain.com;
ssl_certificate ~/.acme.sh/cdn.yourdomain.com/cdn.yourdomain.com.cer;
ssl_certificate_key ~/.acme.sh/cdn.yourdomain.com/cdn.yourdomain.com.key;
root /var/www/cdn; # Hoặc proxy_pass như ở edge server
index index.html;
location / {
try_files $uri $uri/ /index.html; # Hoặc proxy_cache như trước
}
}
- Kiểm tra và khởi động lại:
sudo nginx -t
sudo systemctl reload nginx
Tự động gia hạn SSL:
- Thêm cron job trên máy chủ gốc:
crontab -e
- Thêm:
0 0 * * * acme.sh --cron --home ~/.acme.sh
Bước 5: Cấu hình DNS Load Balancing
Để phân phối yêu cầu tới edge server gần nhất, sử dụng DNS load balancing.
Thêm bản ghi A:
- Trong giao diện quản lý DNS, tạo nhiều bản ghi A cho cdn.yourdomain.com, mỗi bản ghi trỏ tới IP của một edge server:
cdn.yourdomain.com A <IP-edge-server-1>
cdn.yourdomain.com A <IP-edge-server-2>
cdn.yourdomain.com A <IP-edge-server-3>
Kích hoạt GeoDNS (Tùy chọn):
- Sử dụng nhà cung cấp DNS hỗ trợ GeoDNS (như Cloudflare hoặc Amazon Route 53) để tự động chuyển hướng người dùng tới edge server gần nhất dựa trên vị trí địa lý.
Bước 6: Kiểm tra và tối ưu
Kiểm tra CDN:
Truy cập https://cdn.yourdomain.com/<tên-file> (ví dụ: https://cdn.yourdomain.com/image.jpg) từ các khu vực khác nhau.
Kiểm tra header X-Cache-Status để xác nhận cache hoạt động:
curl -I https://cdn.yourdomain.com/image.jpg
Tối ưu hiệu suất:
- Nén file: Kích hoạt Gzip trong Nginx:
gzip on;
gzip_types text/plain text/css application/json application/javascript image/*;
- Cache lâu dài: Điều chỉnh thời gian cache trong cấu hình Nginx:
location ~* \.(jpg|jpeg|png|css|js)$ {
expires 30d;
}
- Giới hạn truy cập: Thêm cấu hình để chỉ cho phép truy cập từ website của bạn:
location / {
valid_referers none blocked yourdomain.com;
if ($invalid_referer) {
return 403;
}
}
Giám sát:
- Sử dụng công cụ như Prometheus và Grafana để theo dõi hiệu suất và lưu lượng truy cập trên các edge server.
Kết luận
Bạn đã tạo CDN riêng để lưu trữ và phân phối file tĩnh! Hệ thống này sử dụng Nginx để làm máy chủ cache, đồng bộ file bằng rsync, và hỗ trợ HTTPS với Let’s Encrypt. Để mở rộng, bạn có thể thêm nhiều edge server hơn, tích hợp GeoDNS, hoặc triển khai các tính năng bảo mật nâng cao như WAF (Web Application Firewall).
CÔNG TY TNHH GIẢI PHÁP CÔNG NGHỆ TRANG DESIGNER
Trang Designer chuyên thiết kế website chuẩn SEO, thiết kế logo toàn diện giúp doanh nghiệp xây dựng một thương hiệu mạnh và bán hàng hiệu quả trên các nền tảng số cho nhiều lĩnh vực kinh doanh.
Vui lòng liên hệ: 138 Hiền Vương, Phường Phú Thạnh, Quận Tân Phú, TP. Hồ Chí Minh
Điện thoại: 0903.728.335
Website: www.trangdesigner.id.vn