TLDR #
Nginx adalah web server ringan dan cepat yang digunakan oleh 30% website di dunia. Certbot adalah tool gratis dari Let’s Encrypt untuk memasang SSL/HTTPS otomatis. Artikel ini akan memandumu dari nol: instalasi Nginx, konfigurasi server block, pasang SSL gratis, hingga optimasi keamanan — semuanya dalam satu panduan.
Pendahuluan #
Pernah membuka website dan melihat tulisan “Not Secure” di browser? Atau ingin website-mu menggunakan HTTPS tapi bingung caranya?
Nginx + Certbot adalah solusi yang paling banyak digunakan. Nginx menangani permintaan HTTP dengan cepat dan efisien, sementara Certbot menyediakan SSL certificate gratis dari Let’s Encrypt yang otomatis diperpanjang.
Kabar baiknya: semua gratis. Kamu hanya perlu domain dan VPS (atau server lokal) — sisanya bisa diikuti langkah demi langkah.
Panduan ini berdasarkan pengalaman langsung setup blog GezyTech di info.gezytech.web.id.
Konten Utama #
1. Apa Itu Nginx? #
Nginx (dibaca “engine-x”) adalah web server open-source yang dirancang untuk performa tinggi dan penggunaan memori rendah. Berbeda dengan Apache yang membuat koneksi baru per request, Nginx menggunakan arsitektur event-driven asynchronous yang bisa menangani ribuan koneksi simultan dengan satu thread.
Perbandingan Nginx vs Apache:
| Fitur | Nginx | Apache |
|---|---|---|
| Arsitektur | Event-driven | Process-driven |
| Memori per koneksi | Sangat rendah (~2.5 KB) | Tinggi (~8-10 KB) |
| Static file serving | Sangat cepat | Cepat |
| Konfigurasi | Sederhana | Kompleks (.htaccess) |
| Load balancing | ✅ Bawaan | ❌ Perlu modul |
| Popularitas | ~30% website | ~25% website |
2. Instalasi Nginx #
Di Ubuntu/Debian #
sudo apt update
sudo apt install nginx -y
# Cek status
sudo systemctl status nginx
# Seharusnya: active (running)
# Cek versi
nginx -vSetelah instalasi, buka http://IP-VPS-mu di browser. Jika muncul halaman “Welcome to nginx”, instalasi berhasil.
Firewall (UFW) #
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status3. Struktur Dasar Nginx #
| Path | Fungsi |
|---|---|
/etc/nginx/nginx.conf |
Konfigurasi utama |
/etc/nginx/sites-available/ |
Tempat file konfigurasi website (virtual host) |
/etc/nginx/sites-enabled/ |
Symlink ke sites-available yang aktif |
/var/www/html/ |
Root folder default |
/var/log/nginx/access.log |
Log akses |
/var/log/nginx/error.log |
Log error |
4. Membuat Server Block (Virtual Host) #
Server block di Nginx setara dengan VirtualHost di Apache. Untuk setiap website, buat file konfigurasi terpisah.
Step 1: Buat folder website #
sudo mkdir -p /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example.com/htmlStep 2: Buat file index.html #
echo '<h1>Website Saya!</h1>' > /var/www/example.com/html/index.htmlStep 3: Buat konfigurasi server block #
sudo nano /etc/nginx/sites-available/example.comIsi dengan:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location /robots.txt {
add_header Cache-Control "no-cache";
}
location ~* \.(css|js|png|jpg|jpeg|svg|gif|ico|woff2?)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
error_page 404 /404.html;
}Step 4: Aktifkan site #
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
# Test konfigurasi
sudo nginx -t
# Reload Nginx
sudo systemctl reload nginxStep 5: Test #
Buka http://example.com di browser. Seharusnya muncul “Website Saya!” 🎉
5. Reverse Proxy untuk Aplikasi #
Jika website-mu adalah aplikasi (Node.js, Python, dll.) yang berjalan di port tertentu, gunakan reverse proxy.
Contoh untuk aplikasi Bun/Hono di port 3000:
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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;
}
# Batasi ukuran upload (jika perlu)
client_max_body_size 10M;
}6. Instalasi Certbot untuk SSL Gratis #
Certbot otomatis mendapatkan dan menginstall SSL certificate dari Let’s Encrypt.
Instalasi Certbot #
# Untuk Ubuntu 20.04+
sudo apt install certbot python3-certbot-nginx -yDapatkan SSL Certificate #
sudo certbot --nginx -d example.com -d www.example.comCertbot akan:
- Memverifikasi kepemilikan domain
- Mendapatkan sertifikat dari Let’s Encrypt
- Mengupdate konfigurasi Nginx secara otomatis
- Mengatur redirect HTTP → HTTPS
Hasilnya, file konfigurasi Nginx akan berubah menjadi:
server {
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
server {
if ($host = example.com) {
return 301 https://$host$request_uri;
}
listen 80;
server_name example.com www.example.com;
return 404;
}Auto-renewal #
Let’s Encrypt sertifikat berlaku 90 hari. Certbot otomatis mengatur cron job untuk renew.
# Test renewal
sudo certbot renew --dry-runCek cron job:
systemctl list-timers | grep certbot
# Atau
sudo crontab -l7. Optimasi Keamanan SSL #
Tambah konfigurasi keamanan di /etc/nginx/nginx.conf di dalam blok http { }:
# Keamanan SSL
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
# HTTP Strict Transport Security (HSTS)
add_header Strict-Transport-Security "max-age=63072000" always;8. Konfigurasi untuk Static Site (Hugo) #
Untuk blog Hugo, konfigurasi server block yang digunakan di GezyTech:
server {
server_name info.gezytech.web.id;
root /var/www/info.gezytech.web.id;
index index.html;
location / {
try_files $uri $uri/ =404;
}
location = /robots.txt {
add_header Cache-Control "no-cache";
}
location ~* \.(css|js|png|jpg|jpeg|svg|gif|ico|woff2?)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
error_page 404 /404.html;
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/info.gezytech.web.id/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/info.gezytech.web.id/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}9. Multiple Website dalam Satu Server #
Kamu bisa menjalankan banyak website dalam satu VPS. Cukup buat file server block terpisah:
# Website 1
sudo nano /etc/nginx/sites-available/situs1.com
# Website 2
sudo nano /etc/nginx/sites-available/situs2.com
# Aktifkan keduanya
sudo ln -s /etc/nginx/sites-available/situs1.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/situs2.com /etc/nginx/sites-enabled/
# Test dan reload
sudo nginx -t && sudo systemctl reload nginxSemua website mendapat SSL masing-masing:
sudo certbot --nginx -d situs1.com -d www.situs1.com
sudo certbot --nginx -d situs2.com -d www.situs2.com10. Troubleshooting Umum #
| Masalah | Solusi |
|---|---|
| Nginx tidak start | sudo nginx -t untuk cek error konfigurasi. Cek sudo journalctl -xeu nginx |
| Domain tidak muncul | Pastikan DNS sudah mengarah ke IP VPS. Cek dengan dig example.com |
| SSL error | sudo certbot renew --dry-run. Pastikan port 443 terbuka di firewall |
| 403 Forbidden | Cek permission folder: sudo chown -R www-data:www-data /var/www/example.com |
| Redirect loop | Pastikan tidak ada double redirect. Cek konfigurasi Nginx tidak kontradiktif |
| Certbot tidak bisa verify | Pastikan port 80 terbuka dari internet. Cek dengan nc -zv domain.com 80 |
| SSL tidak auto-renew | Cek sudo systemctl status certbot.timer |
11. Perintah Nginx yang Sering Dipakai #
# Service management
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx # reload tanpa downtime
sudo systemctl status nginx
# Test konfigurasi
sudo nginx -t
# Lihat log
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
# Enable/disable site
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/example.comKesimpulan #
Nginx + Certbot adalah kombinasi terbaik untuk website modern:
- Nginx — web server cepat, ringan, dan stabil untuk production
- Certbot — SSL gratis dari Let’s Encrypt dengan auto-renewal
- Semua gratis — tidak perlu bayar untuk web server atau SSL
Yang sudah kamu pelajari:
- Instalasi Nginx dan konfigurasi server block
- Setup reverse proxy untuk aplikasi
- Pasang SSL gratis dengan Certbot
- Optimasi keamanan HTTPS
- Multiple website dalam satu server
- Troubleshooting umum
Langkah selanjutnya:
- Install Nginx di VPS-mu
- Buat server block untuk domainmu
- Pasang SSL dengan Certbot
- Deploy website atau aplikasi
Website GezyTech sendiri (info.gezytech.web.id) menggunakan setup persis seperti di artikel ini. Jadi kalau ada yang bingung, tinggal tanya! 🚀
Artikel ini ditulis berdasarkan pengalaman langsung setup GezyTech. Ditulis dengan bantuan AI dan telah diedit oleh tim GezyTech.