HTTPS pada Nginx sering terlihat seperti satu perintah Certbot, padahal keberhasilannya bergantung pada DNS, firewall, virtual host, dan kepemilikan domain. Pada migrasi NgodingSantai, sertifikat diminta setelah domain akar serta www benar-benar mencapai VPS. Urutan ini penting karena server juga melayani aplikasi lain.

Prasyarat yang diperiksa
  • A dan CNAME menjawab host yang benar.
  • Port TCP 80 serta 443 diizinkan pada firewall cloud dan UFW.
  • Server block HTTP mempunyai server_name domain akar dan www.
  • nginx -t lolos sebelum Certbot mengubah konfigurasi.
Diagram urutan DNS, port, Nginx, Certbot dan uji renewal
Sertifikat adalah tahap keempat, bukan langkah pertama. DNS dan origin yang salah tidak dapat diperbaiki oleh HTTPS.

Pastikan domain mencapai server yang dimaksud

Challenge HTTP-01 memerlukan otoritas sertifikat mengakses token melalui domain. Karena itu jawaban DNS harus menunjuk ke VPS dan port 80 dapat dijangkau dari internet. Hasil curl lokal saja belum cukup; cek dari jaringan luar atau resolver publik.

Resolve-DnsName ozancicak.biz.id -Type A
Resolve-DnsName www.ozancicak.biz.id
curl.exe -I http://ozancicak.biz.id/
curl.exe -I http://www.ozancicak.biz.id/

Periksa dua lapis firewall

Tencent Lighthouse mempunyai firewall pada jaringan cloud, sedangkan Ubuntu dapat menjalankan UFW. Keduanya harus mengizinkan trafik. Membuka UFW tidak membantu jika firewall cloud masih menutup port, dan sebaliknya.

sudo ufw status
sudo ufw allow 'Nginx Full'
sudo ss -ltnp | grep -E ':80|:443'

Port SSH tidak diubah dalam prosedur ini. Pembatasan SSH dilakukan secara terpisah agar pemasangan web server tidak mengunci akses administrator.

Periksa server_name sebelum menerbitkan

Certbot plugin Nginx mencari blok yang cocok dengan nama domain. Jika nama tidak ada, Certbot dapat meminta pilihan manual atau menulis pada blok yang tidak diinginkan. Gunakan nginx -T untuk melihat konfigurasi efektif, bukan hanya file yang sedang terbuka di editor.

sudo nginx -T 2>&1 | grep -n -A3 -B3 'server_name ozancicak.biz.id'
sudo nginx -t

Pasang Certbot dari sumber yang dipilih

Panduan deployment proyek menggunakan paket snap. Satu metode instalasi dipilih agar tidak mencampur binary dari apt dan snap. Jika /usr/local/bin/certbot sudah ada, symlink tidak dibuat ulang.

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/local/bin/certbot
sudo certbot --nginx -d ozancicak.biz.id -d www.ozancicak.biz.id

Kedua hostname diminta sekaligus karena navigasi dan DNS mengizinkan domain akar serta www. Sesudah sertifikat terbit, salah satu hostname dapat menjadi canonical dan hostname lain diarahkan menuju canonical melalui redirect permanen.

Verifikasi sertifikat dan redirect

curl -I http://ozancicak.biz.id/
curl -I https://ozancicak.biz.id/
curl -I https://www.ozancicak.biz.id/
sudo certbot certificates

Periksa bahwa HTTP menuju HTTPS, hostname alternatif menuju canonical yang benar, tidak ada loop, dan sertifikat mencantumkan kedua nama. Browser tanpa peringatan belum cukup: uji status serta header agar perilaku crawler juga jelas.

Uji pembaruan otomatis

Sertifikat berumur pendek hanya aman jika pembaruan otomatis bekerja. renew --dry-run mensimulasikan proses tanpa menunggu masa berlaku mendekati akhir. Timer dan log juga diperiksa agar kegagalan berikutnya dapat ditemukan.

sudo certbot renew --dry-run
systemctl list-timers | grep -i certbot
sudo journalctl -u snap.certbot.renew.service --no-pager -n 50

Diagnosis kegagalan umum

UnauthorizedChallenge mencapai server yang salah, diblokir, atau token tidak disajikan oleh virtual host.
TimeoutPeriksa firewall cloud, UFW, proses yang mendengar port 80, dan A atau AAAA.
Wrong certificateHost jatuh ke server block HTTPS lain atau sertifikat belum memuat hostname tersebut.
Redirect loopAda aturan redirect ganda pada Nginx atau aplikasi di belakang proxy.

Jangan menambahkan HSTS terlalu awal

HSTS membuat browser mengingat bahwa domain hanya boleh memakai HTTPS. Header ini berguna setelah seluruh subdomain dan renewal stabil, tetapi menyulitkan pemulihan bila diterapkan prematur—terutama dengan opsi includeSubDomains. NgodingSantai memprioritaskan HTTPS dan uji renewal dahulu.

Referensi primer

Periksa sertifikat dari sisi klien

certbot certificates menunjukkan file lokal, tetapi klien dapat menerima sertifikat berbeda bila SNI masuk ke server block lain. Pemeriksaan eksternal membaca subject, issuer, SAN, serta masa berlaku dari koneksi domain yang sebenarnya.

openssl s_client -connect ozancicak.biz.id:443 -servername ozancicak.biz.id < /dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -dates -ext subjectAltName

Cadangkan konfigurasi yang diubah plugin

Plugin Nginx menyunting server block untuk menambahkan lokasi sertifikat dan redirect. Diff konfigurasi sebelum dan sesudah dibaca agar perubahan dipahami. Bila struktur server block kompleks, mode certonly dan konfigurasi manual dapat dipilih, tetapi membutuhkan ketelitian lebih besar.

Jangan menyalin private key sertifikat

Folder /etc/letsencrypt dibatasi root. Private key tidak masuk repository atau web root. Backup terenkripsi dan prosedur pemulihan server direncanakan terpisah. Jika server diganti, sertifikat dapat diterbitkan ulang setelah DNS mencapai origin baru daripada memindahkan key melalui kanal tidak aman.

Artikel terkait