Mengirimkan konten ke pengguna global dengan cepat adalah tantangan utama bagi website modern, terutama e‑commerce, media, atau platform dengan traffic internasional.
Menggunakan CDN (Content Delivery Network) bersama Nginx dapat meningkatkan kecepatan, mengurangi latency, dan menghemat bandwidth server.
Artikel ini membahas langkah-langkah implementasi CDN dengan Nginx, termasuk konfigurasi caching, security headers, dan optimasi.
Contents
- 1 1. Apa Itu CDN dan Manfaatnya
- 2 2. Menyiapkan Nginx untuk CDN
- 3 3. Mengkonfigurasi Header untuk CDN
- 4 4. Menggunakan Subdomain untuk CDN
- 5 5. Optimasi Cache dan Purge CDN
- 6 6. Integrasi HTTPS
- 7 7. Mengatur Gzip dan Brotli Compression
- 8 8. Security Best Practices
- 9 9. Monitoring dan Analytics
- 10 Kesimpulan CDN + Nginx
- 11 Related Posts
1. Apa Itu CDN dan Manfaatnya
CDN adalah jaringan server global yang menyimpan salinan konten statis (gambar, CSS, JS, video) di berbagai lokasi. Saat pengunjung mengakses website, konten diambil dari server terdekat, bukan server utama.
Manfaat CDN:
- Performa global lebih cepat: Mengurangi latency karena konten dekat dengan user
- Beban server berkurang: Server utama fokus pada dynamic content
- Scalability: Traffic tinggi dapat ditangani tanpa downtime
- Keamanan: Banyak CDN menyediakan mitigasi DDoS dan SSL otomatis
Contoh penyedia CDN populer: Cloudflare, AWS CloudFront, Fastly, BunnyCDN.
2. Menyiapkan Nginx untuk CDN
Ada dua pendekatan utama:
- Origin Pull: CDN mengambil konten dari server Anda ketika diminta user pertama kali
- Origin Push: Konten diunggah ke CDN secara manual atau otomatis
Pada umumnya, origin pull lebih mudah dan dinamis.
Konfigurasi Nginx untuk Origin Pull
Misal domain: example.com, CDN domain: cdn.example.com.
Server block Nginx untuk origin:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/html;
location / {
try_files $uri $uri/ =404;
}
# Static content
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|webp)$ {
expires 30d;
add_header Cache-Control "public";
}
}
CDN akan menarik file dari example.com saat pertama kali diminta.
3. Mengkonfigurasi Header untuk CDN
Agar CDN bekerja optimal, pastikan cacheable content memiliki header yang tepat:
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|webp)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000, immutable";
add_header Access-Control-Allow-Origin "*"; # Jika perlu diakses dari domain lain
}
immutable→ memberitahu browser/CDN bahwa konten tidak berubahAccess-Control-Allow-Origin→ penting untuk font, JS, atau asset yang dibagikan lintas domain
4. Menggunakan Subdomain untuk CDN
Biasanya, CDN menggunakan subdomain: cdn.example.com. Anda bisa membuat CNAME record ke CDN provider:
- DNS:
cdn.example.com → cdn.provider.com - Di Nginx origin: tetap layani konten dari
example.com - CDN akan cache konten statis dan mengirim ke user
Contoh Nginx untuk subdomain CDN:
server {
listen 80;
server_name cdn.example.com;
root /var/www/example.com/html;
access_log off;
error_log /var/log/nginx/cdn.error.log;
location / {
try_files $uri $uri/ =404;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|webp)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000, immutable";
}
}
5. Optimasi Cache dan Purge CDN
Cache Control
- Static content:
max-agetinggi (hari/minggu) - Dynamic content: jangan cache, atau gunakan cache short-term
Purge CDN
- Setiap kali konten diperbarui, lakukan purge CDN supaya user mendapatkan versi terbaru
- Banyak CDN menyediakan API purge otomatis
6. Integrasi HTTPS
Pastikan CDN menggunakan HTTPS. Ada dua metode:
- Full SSL (strict): CDN memvalidasi SSL origin
- Flexible SSL: CDN mengakses origin via HTTP, user via HTTPS
Contoh origin SSL:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
location / {
try_files $uri $uri/ =404;
}
}
CDN akan mengakses HTTPS origin jika mode Full SSL digunakan.
7. Mengatur Gzip dan Brotli Compression
CDN bisa cache versi terkompresi. Aktifkan gzip/Brotli di Nginx:
gzip on;
gzip_types text/plain text/css application/javascript application/json image/svg+xml;
gzip_min_length 256;
gzip_comp_level 5;
brotli on;
brotli_types text/plain text/css application/javascript application/json image/svg+xml;
brotli_comp_level 5;
Ini akan mengurangi ukuran file yang diambil CDN → lebih cepat untuk user global.
8. Security Best Practices
- Hide server info:
server_tokens off; - Limit request untuk origin: hindari DDoS langsung ke server
- Enable WAF/CDN firewall: banyak CDN seperti Cloudflare menyediakan proteksi tambahan
9. Monitoring dan Analytics
CDN biasanya memberikan analytics:
- Traffic per region
- Bandwidth saved
- Cache hit/miss rate
Di sisi Nginx origin, tetap pantau log:
sudo tail -f /var/log/nginx/cdn.error.log
- Pastikan tidak ada request berulang yang seharusnya sudah di-cache
- Pantau error 404/403 yang mungkin muncul karena konfigurasi cache
Kesimpulan CDN + Nginx
Menggunakan CDN dengan Nginx memberikan manfaat besar bagi website global:
- Mengurangi latency dengan server dekat user
- Mengurangi beban server origin
- Meningkatkan kecepatan load halaman statis
- Menambahkan lapisan keamanan tambahan
- Mudah diintegrasikan via subdomain dan konfigurasi origin pull
Dengan konfigurasi caching yang tepat, HTTPS, dan monitoring, konten website Anda bisa diakses cepat dan aman di seluruh dunia.