Cara Setup Nginx Reverse Proxy dan SSL Let's Encrypt untuk Docker di Ubuntu 24.04

Cara Setup Nginx Reverse Proxy dan SSL Let's Encrypt untuk Docker di Ubuntu 24.04

Overview

Menjalankan aplikasi web dalam container Docker di VPS memerlukan reverse proxy untuk mengarahkan trafik domain ke port internal container, sekaligus menangani enkripsi HTTPS. Nginx dan Let's Encrypt adalah kombinasi paling handal untuk kebutuhan produksi pada Ubuntu 24.04 LTS.

Prasyarat

Pastikan sebelum memulai:

  • VPS Ubuntu 24.04 LTS dengan akses sudo/root
  • Docker sudah terinstall dan container aplikasi berjalan pada port lokal (contoh: 127.0.0.1:3000)
  • Domain telah dihubungkan ke IP publik VPS (A Record)

1. Install Nginx dan Certbot

Update indeks paket dan install Nginx beserta plugin Certbot Nginx:

sudo apt update
sudo apt install -y nginx certbot python3-certbot-nginx

2. Konfigurasi Nginx Server Block

Buat file konfigurasi Nginx baru untuk domain Anda:

sudo nano /etc/nginx/sites-available/example.com

Isi file dengan konfigurasi reverse proxy berikut (ganti example.com dan port 3000 sesuai aplikasi Anda):

server {
    listen 80;
    server_name example.com www.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        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;
    }
}

Aktifkan server block dengan membuat symbolic link dan uji sintaks:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Peringatan Keamanan: Pastikan port container Docker Anda dipublikasikan hanya ke 127.0.0.1 (contoh: 127.0.0.1:3000:3000 pada docker-compose) agar tidak dapat diakses langsung dari IP publik tanpa melewati Nginx.

3. Generate SSL Let's Encrypt dengan Certbot

Jalankan Certbot untuk mendapatkan sertifikat SSL dan mengonfigurasi HTTPS otomatis pada Nginx:

sudo certbot --nginx -d example.com -d www.example.com

Ikuti instruksi di layar. Certbot akan memperbarui file konfigurasi Nginx secara otomatis untuk mengalihkan HTTP ke HTTPS.

4. Menambahkan Hardening Security Headers

Buka kembali konfigurasi Nginx yang telah diperbarui oleh Certbot:

sudo nano /etc/nginx/sites-available/example.com

Tambahkan header keamanan berikut di dalam block listen 443 ssl:

add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "strict-origin-when-cross-origin";

Simpan file dan reload Nginx:

sudo systemctl reload nginx

5. Pengujian Auto-Renew SSL

Sertifikat Let's Encrypt berlaku selama 90 hari. Systemd timer Certbot aktif secara otomatis saat instalasi. Uji proses pembaharuan sertifikat:

sudo certbot renew --dry-run

Checklist Akhir

  • Aplikasi Docker terikat hanya ke 127.0.0.1
  • Nginx mem-proxy trafik port 80/443 ke port internal Docker
  • Sertifikat SSL Let's Encrypt terpasang dan auto-redirect HTTP ke HTTPS aktif
  • Security headers standar sudah terkonfigurasi
  • Dry-run certbot renew berhasil tanpa error

Related Posts

Comments (0)

Please login to post a comment

No comments yet. Be the first to share your thoughts!

Ilham Shofa

creativity is just connecting things. - Steve Jobs

ilhameid.© 2026