CDN Là Gì?
CDN (Mạng phân phối nội dung) là một hệ thống các máy chủ nằm rải rác trên nhiều vị trí địa lý, làm việc cùng nhau để tối ưu hóa việc phân phối nội dung trên Internet. Nhiều người đã quen thuộc với việc sử dụng CDN thông qua các tài nguyên từ bên thứ ba như phông chữ, CSS, và một số thư viện JavaScript như Stripe để thanh toán an toàn. Trong bài viết này, chúng ta sẽ tìm hiểu các loại CDN phổ biến và hướng dẫn cách thiết lập chúng cho ứng dụng Vue và React của bạn.
Các Loại CDN Phổ Biến
Mỗi loại CDN đều có những ưu điểm và nhược điểm riêng, nhưng mục tiêu chung vẫn là cải thiện tốc độ tải nội dung.
1. Reverse Proxy với Bộ Nhớ Đệm
Ưu điểm:
- Dễ sử dụng: Ứng dụng không cần biết nhiều về CDN. Nếu bạn sử dụng Cloudflare làm nhà cung cấp DNS, chỉ cần một cú nhấp chuột, tất cả lưu lượng sẽ được chặn và lưu trữ đệm.
- Cung cấp nhiều dịch vụ hữu ích như tường lửa, quy tắc trang...
Nhược điểm: - Có thể gây ra vấn đề lưu trữ đệm quá mức.
- Khó khôi phục khi dịch vụ ngừng hoạt động.
- Nguy cơ bảo mật khi giao quyền kiểm soát cho bên thứ ba.
2. Push CDN
Push CDN yêu cầu bạn tải tài sản lên các máy chủ. Ví dụ như Google Cloud CDN. Trong cấu hình này, bạn cần tạo một bộ cân bằng tải và một bucket lưu trữ.
Ưu điểm:
- Bạn có quyền kiểm soát việc chấm dứt TLS và nội dung trình bày.
- Có thể biết chính xác tài sản được đẩy lên CDN.
Nhược điểm: - Thêm bước mới trong quy trình CI/CD có thể gây lỗi.
- Cần đảm bảo tài sản không bị ghi đè trong quá trình cập nhật.
3. No CDN
No CDN tức là bạn chỉ cần lưu trữ các tiêu đề điều khiển bộ nhớ đệm trên máy chủ web. Cách này có thể tốt nhưng thường gặp khó khăn khi người dùng cách xa máy chủ.
4. Pull CDN
Pull CDN, như BunnyCDN, lấy tài sản từ máy chủ gốc mà không proxy toàn bộ lưu lượng.
Ưu điểm:
- Dễ thiết lập.
- Thường rẻ hơn so với các CDN khác.
Nhược điểm: - Cần đảm bảo tài sản có ID bản dựng duy nhất để không phục vụ nội dung cũ.
- Nếu CDN gặp sự cố, tài sản có thể gặp lỗi.
Cách Thiết Lập Pull CDN Trong Ứng Dụng SPA
- Tạo Pull Zone: Nhận tên miền Pull Zone để kiểm tra reverse proxy.
- Tạo CNAME: Tạo CNAME từ tên miền của bạn đến tên miền Pull Zone (vd: cdn.example.com -> example.b-cdn.net).
- Cập Nhật Cấu Hình Webpack:
javascript
module.exports = { publicPath: process.env.NODE_ENV === 'production' ? 'https://cdn.your-domain-here.com/' : '/', };
- Cấu Hình Nginx: Đảm bảo cung cấp đúng tiêu đề cho các tệp js và css:
nginx
location ~* \\.css|js$ { expires 1y; add_header Cache-Control "public"; access_log off; }
Hy vọng rằng bạn đã có đủ thông tin để chọn loại CDN phù hợp cho website của mình và thực hiện thiết lập thành công. Cảm ơn bạn đã theo dõi bài viết này!
source: viblo