Coba Instal NGINX (lagi) + SSL-nya

Hai semuanya, apa kabar? Kali ini saya mau nulis lagi tentang Linux, tepatnya mengenai NGINX dan SSL-nya. Sebenarnya saya sudah pernah nulis ini sih, tapi saya mau coba lagi biar makin ngerti.

Target dari pengujian kali ini adalah:

  • Membuat CT Ubuntu yang nantinya akan diinstal NGINX.
  • Untuk sample tampilan situs web pakai AI (Deepsite).
  • Generate SSL (Let’sEncrypt).
  • Instalasi SSL pada NGINX dan SSL dapat terdeteksi di web browser (walaupun di pengujian kali ini hanya local saja, tidak di-publish ke publik).

Persiapan CT

CT yang digunakan pada pengujian kali ini adalah Ubuntu 20 dan diinstal di atas Proxmox VE 8.4.9. Untuk resource yang digunakan gak terlalu besar, CPU 1 core, RAM-swap masing-masing 512MB, dan penyimpanan sebesar 5 GB.
Kita instal terlebih dulu paket-paket yang dibutuhkan, yaitu nginx, certbot, dan python3-certbot-dns-cloudflare.

Persiapan File /etc/hosts di Komputer Lokal

Karena saya mau akses/uji coba buka situs web-nya di laptop (Linux Mint) dan karena domain yang akan saya gunakan bukanlah FQDN atau alamat yang benar-benar bisa diakses di internet, maka saya perlu untuk set file /etc/hosts agar dapat “mengenali” domain tersebut dan diarahkan ke alamat IP dari server NGINX-nya.
Contoh sintaks yang saya tambahkan pada file /etc/hosts:

192.168.1.20 linux.zaidan.web.id

Issuing SSL

SSL yang akan saya gunakan pada pengujian kali ini menggunakan Let’s Encrypt. Untuk metode validasinya menggunakan DNS. Sintaks yang dapat digunakan contohnya adalah seperti ini:

certbot certonly --manual --preferred-challenges=dns -d "*.domain.xyz" -d "domain.xyz"

Nantinya, kita akan diberikan record yang perlu kita masukkan pada panel DNS. Apabila berhasil, maka file sertifikat dan private key akan dibuat.

Sample Web Page

Sebagai contoh saja, untuk tampilan situs web-nya saya menggunakan AI tool yaitu Deepsite. Kita tinggal masukkan tampilan situs web seperti apa yang kita inginkan, nanti Deepsite akan menampilkan sample tampilan dan juga kode HTML-nya.
image host

Buat Folder HTML

Untuk menyimpan file HTML untuk isi dari situs web-nya, kita buat terlebih dahulu foldernya. Berikut contoh sintaks yang dapat digunakan:

mkdir -p /var/www/domain.xyz/html
chown -R www-data:www-data /var/www/domain.xyz/html
chmod -R 755 /var/www/domain.xyz

Lalu, untuk file HTML (konten webnya) bisa dimasukkan pada direktori /var/www/domain.xyz/html/index.html.

Konfigurasi Virtualhost

Secara default, konfigurasi NGINX terletak pada file /etc/nginx/sites-available/default. Namun konfigurasi ini sifatnya umum/global. Apabila ingin memiliki konfigurasi spesifik untuk tiap situs web, kita bisa menambahkan virtual host. Dengan virtual host, kita bisa memiliki konfigurasi spesifik untuk tiap situs web tanpa “saling ganggu”.
Berikut ini adalah contoh sintaks yang bisa digunakan untuk membuat virtual host baru:

nano /etc/nginx/sites-available/domain.xyz.conf

Isi dari file tersebut (domain.xyz.conf) terdiri dari dua blok utama:

  • Blok pertama: konfigurasi HTTP. Fungsi blok ini adalah untuk mengarahkan koneksi HTTP ke HTTPS.
    image host

    • listen 80 : port yang digunakan NGINX untuk menerima request HTTP.
    • server_name: nama domain yang di-handle oleh virtualhost ini.
    • root & index: lokasi file situs web dan index.html.
    • location...: mengecek apakah file di atas ada. Kalau tidak ada, maka akan menampilkan Error 404.
    • return 301 https...: Mengarahkan HTTP ke HTTPS.
  • Blok kedua: konfigurasi untuk port 443 (HTTPS)
    image host

    • listen 443: port yang digunakan NGINX untuk menerima request HTTPS.
    • server_name: nama domain yang akan di-handle oleh NGINX.
    • ssl_certificate & ssl_certificate_key: File SSL dan private key.
    • ssl_protocols: menentukan versi TLS mana saja yang diaktifkan.
    • ssl_prefer_server_ciphers on: memerintahkan server untuk menggunakan urutan cipher yang ditentukan.
    • ssl_ciphers: daftar ciphers yang digunakan.
    • root & index: lokasi file situs web dan index.html.
    • add_header Strict-Transport-Security "max-age=63072000; preload";: “memaksa” browser agar selalu menggunakan HTTPS untuk domain ini.
    • location...: mengecek apakah file di atas ada. Kalau tidak ada, maka akan menampilkan Error 404.

Aktifkan Virtual Host

ln -s /etc/nginx/sites-available/domain.xyz.conf /etc/nginx/sites-enabled/

Fungsinya adalah membuat symlink dari file konfigurasi sites-available(konfigurasi yang tersedia) ke sites-enabled (konfigurasi aktif).

nginx -t

Mengecek apakah file konfigurasi NGINX valid atau error. Kalau ada error, maka akan terlihat.

systemctl restart nginx

Me-restart NGINX supaya konfigurasi baru diterapkan.

Testing

Saat pengujian, apabila konfigurasi sesuai maka apabila mengunjungi domain di web browser maka SSL akan terbaca. Tentunya pengujian kali ini agak berbeda karena tidak menggunakan FQDN dan domain ditambahkan pada file /etc/hosts. Namun secara umum konfigurasinya sama apabila diterapkan pada situs web asli dengan FQDN.
image host

Tulisan saya kali ini sampai di sini dulu ya. Sampai jumpa. Bye.

Leave a Reply

Your email address will not be published. Required fields are marked *