DEV Community

Cover image for Cara Setup Reverse Proxy dan SSL Let's Encrypt
Dev Rama
Dev Rama

Posted on

Cara Setup Reverse Proxy dan SSL Let's Encrypt

Berikut adalah panduan lengkap langkah demi langkah untuk melakukan konfigurasi Reverse Proxy menggunakan Nginx yang diarahkan ke aplikasi di port 3030, menggunakan domain devrama.my.id, dan diamankan dengan SSL gratis dari Let's Encrypt.

🛠️ Langkah 1: Persiapan Awal (Prerequisites)
Sebelum memulai, pastikan:
Domain devrama.my.id sudah diarahkan (A Record) ke IP Publik Server/VPS kamu melalui DNS Management (misalnya via Cloudflare/IdCloudHost/Niagahoster).
Aplikasi kamu sudah berjalan di port 3030 (bisa dicek dengan perintah curl localhost:3030).

🚀 Langkah 2: Install Nginx dan Certbot
Masuk ke server kamu via SSH, lalu jalankan perintah berikut untuk memperbarui sistem dan menginstal Nginx serta Certbot (alat pengelola SSL Let's Encrypt).

sudo apt update
sudo apt install nginx certbot python3-certbot-nginx -y
Enter fullscreen mode Exit fullscreen mode

Pastikan Nginx sudah berjalan:

sudo systemctl start nginx
sudo systemctl enable nginx
Enter fullscreen mode Exit fullscreen mode

📄 Langkah 3: Konfigurasi Reverse Proxy Nginx
Kita akan membuat file konfigurasi baru khusus untuk domain kamu.
Hapus default Nginx port 80

sudo rm /etc/nginx/sites-enabled/default
Enter fullscreen mode Exit fullscreen mode

Buat file konfigurasi baru di direktori Nginx:

sudo nano /etc/nginx/sites-available/devrama.my.id
Enter fullscreen mode Exit fullscreen mode

Salin dan tempel kode berikut ke dalam file tersebut (konfigurasi HTTP port 80 untuk awal):

server {
    listen 80;
    server_name devrama.my.id;

    location / {
        proxy_pass http://127.0.0.1:3030; # Mengarahkan trafik ke port aplikasi
        proxy_http_version 1.1;

        # Header penting agar aplikasi tahu IP asli dari pengunjung
        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;
    }
}

Enter fullscreen mode Exit fullscreen mode

Simpan dan keluar (Tekan CTRL + O, lalu Enter, kemudian CTRL + X).
Aktifkan konfigurasi dengan membuat symlink ke folder sites-enabled:
sudo ln -s /etc/nginx/sites-available/devrama.my.id /etc/nginx/sites-enabled/

Tes apakah konfigurasi Nginx sudah benar dan tidak ada eror syntax:

sudo nginx -t
Enter fullscreen mode Exit fullscreen mode

Jika muncul pesan nginx: configuration file ... test is successful, artinya aman!
Restart Nginx untuk menerapkan perubahan:

sudo systemctl restart nginx
Enter fullscreen mode Exit fullscreen mode

🔒 Langkah 4: Install SSL Let's Encrypt
Sekarang, kita akan menggunakan Certbot untuk mengamankan domain dengan SSL (HTTPS). Kerennya, Certbot akan otomatis mengubah file konfigurasi Nginx kita tadi agar mendukung HTTPS.

Jalankan perintah Certbot berikut:

sudo certbot --nginx -d devrama.my.id
Enter fullscreen mode Exit fullscreen mode

Certbot akan menanyakan beberapa hal saat pertama kali dijalankan:
Email: Masukkan email aktifmu (untuk notifikasi jika SSL akan kedaluwarsa).

Terms of Service: Ketik A lalu Enter untuk menyetujui.
Share Email: Ketik Y atau N (bebas).
Redirect HTTP to HTTPS: Jika muncul pilihan untuk mengalihkan otomatis trafik HTTP ke HTTPS, pilih opsi Redirect (biasanya opsi nomor 2).

Jika berhasil, kamu akan melihat pesan sukses:
Congratulations! You have successfully enabled HTTPS on https://devrama.my.id

🔄 Langkah 5: Otomatisasi Perpanjangan SSL (Auto-Renewal)
SSL Let's Encrypt hanya berlaku selama 90 hari. Namun, Certbot secara otomatis membuat cron job di server untuk memperbaruinya sebelum kedaluwarsa.Untuk memastikan fitur auto-renewal ini berfungsi dengan baik, kamu bisa mengujinya dengan perintah:

sudo certbot renew --dry-run
Enter fullscreen mode Exit fullscreen mode

Jika tidak ada eror, maka SSL kamu akan diperbarui otomatis selamanya tanpa perlu kamu urus lagi secara manual.

Selesai!

Sekarang kamu bisa membuka browser dan mengakses https://devrama.my.id. Nginx akan otomatis menerima trafik aman (HTTPS) di port 443, meneruskannya ke aplikasi internal kamu di port 3030, dan mengembalikan responsnya ke pengguna dengan mulus.

Top comments (0)