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.
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.
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 danindex.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)
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 danindex.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.
Tulisan saya kali ini sampai di sini dulu ya. Sampai jumpa. Bye.
Leave a Reply