Bayangkan Anda punya satu server, tapi tiga proyek yang harus jalan bersamaan: website perusahaan, blog pribadi, dan aplikasi API internal. Membeli tiga server terpisah jelas boros. Untungnya, Nginx menyediakan solusi elegan bernama virtual host (vhost) yang memungkinkan satu mesin Debian melayani banyak domain sekaligus, masing-masing dengan konfigurasi, root direktori, dan bahkan sertifikat SSL sendiri.
Bagi sysadmin, mahasiswa jaringan, maupun pemilik startup kecil, memahami cara kerja vhost Nginx adalah keterampilan wajib. Selain menghemat biaya infrastruktur, konfigurasi yang rapi juga membuat server lebih mudah dipelihara, lebih aman, dan lebih siap untuk skala produksi.
Pada artikel ini, kita akan membahas tuntas cara menginstal Nginx di Debian (Debian 12 “Bookworm” dan Debian 13 “Trixie”), lalu mengonfigurasi tiga domain berbeda dalam satu server menggunakan pendekatan sites-available dan sites-enabled yang menjadi standar Debian. Kita juga akan membahas kesalahan umum, tips keamanan, hingga cara menambahkan SSL gratis dengan Let’s Encrypt.
Pembahasan Utama
Apa Itu Virtual Host di Nginx?
Virtual host adalah mekanisme yang memungkinkan satu server web menjalankan beberapa situs berbeda berdasarkan nama domain yang diminta oleh browser (teknik ini disebut name-based virtual hosting). Setiap domain memiliki file konfigurasi (disebut server block di Nginx) yang menentukan:
- Root direktori file website
- Port yang digunakan (biasanya 80 untuk HTTP, 443 untuk HTTPS)
- Nama domain (
server_name) - Aturan logging, caching, dan keamanan tambahan
Analoginya seperti gedung apartemen: satu alamat gedung (IP server), tapi banyak unit (domain) yang masing-masing punya pintu dan nomor sendiri. Nginx berperan sebagai resepsionis yang mengarahkan tamu (request) ke unit yang tepat berdasarkan nama yang mereka sebutkan.
Kenapa Memilih Nginx?
Dibanding Apache, Nginx dikenal lebih ringan dalam penggunaan memori dan lebih efisien menangani banyak koneksi bersamaan karena arsitekturnya berbasis event-driven, bukan berbasis proses/thread per koneksi. Ini membuatnya populer sebagai web server maupun reverse proxy di lingkungan produksi modern, termasuk untuk hosting multi-domain.
Persiapan Sebelum Instalasi
Sebelum mulai, pastikan:
- Server menjalankan Debian 12 (Bookworm) atau Debian 13 (Trixie)
- Anda memiliki akses
rootatau user dengan haksudo - Tiga domain (misal
domain1.com,domain2.com,domain3.com) sudah diarahkan (DNS A Record) ke IP server Anda - Port 80 dan 443 tidak diblokir firewall
Tutorial Step-by-Step
Langkah 1: Update Sistem
Selalu mulai dengan memperbarui daftar paket agar instalasi berjalan lancar dan menghindari konflik versi.
sudo apt update && sudo apt upgrade -y
Langkah 2: Instal Nginx
Debian menyediakan paket Nginx langsung dari repository resminya. Pada Debian 13, repository default menyertakan Nginx versi 1.26, sementara Debian 12 menyertakan versi 1.22 — keduanya sudah cukup stabil untuk kebutuhan produksi umum.
sudo apt install nginx -y
Setelah instalasi selesai, cek status service untuk memastikan Nginx berjalan:
sudo systemctl status nginx
Jika belum aktif, jalankan dan aktifkan agar otomatis start saat boot:
sudo systemctl enable --now nginx
Uji dengan membuka http://IP-server-anda di browser. Anda akan melihat halaman “Welcome to nginx!” sebagai tanda instalasi berhasil.
Langkah 3: Buka Akses Firewall (jika menggunakan UFW)
Jika Anda menggunakan UFW sebagai firewall, izinkan trafik HTTP dan HTTPS:
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status
Langkah 4: Siapkan Struktur Direktori untuk 3 Domain
Buat direktori terpisah untuk masing-masing domain agar file setiap website tidak tercampur.
sudo mkdir -p /var/www/domain1.com/html
sudo mkdir -p /var/www/domain2.com/html
sudo mkdir -p /var/www/domain3.com/html
Atur kepemilikan direktori agar Nginx (dan user Anda) bisa mengelolanya:
sudo chown -R $USER:$USER /var/www/domain1.com/html
sudo chown -R $USER:$USER /var/www/domain2.com/html
sudo chown -R $USER:$USER /var/www/domain3.com/html
sudo chmod -R 755 /var/www
Buat file index.html sederhana untuk setiap domain sebagai tes awal:
echo "<h1>Selamat Datang di Domain1.com</h1>" | sudo tee /var/www/domain1.com/html/index.html
echo "<h1>Selamat Datang di Domain2.com</h1>" | sudo tee /var/www/domain2.com/html/index.html
echo "<h1>Selamat Datang di Domain3.com</h1>" | sudo tee /var/www/domain3.com/html/index.html
Langkah 5: Buat File Konfigurasi Server Block
Debian menggunakan struktur sites-available (tempat menyimpan semua konfigurasi) dan sites-enabled (tempat konfigurasi yang aktif, biasanya berupa symlink). Buat file konfigurasi untuk domain pertama:
sudo nano /etc/nginx/sites-available/domain1.com
Isi dengan konfigurasi berikut:
server {
listen 80;
listen [::]:80;
server_name domain1.com www.domain1.com;
root /var/www/domain1.com/html;
index index.html index.htm;
access_log /var/log/nginx/domain1.com.access.log;
error_log /var/log/nginx/domain1.com.error.log;
location / {
try_files $uri $uri/ =404;
}
}
Ulangi langkah yang sama untuk domain kedua dan ketiga, cukup ganti nama domain dan path root-nya:
sudo nano /etc/nginx/sites-available/domain2.com
sudo nano /etc/nginx/sites-available/domain3.com
Gunakan pola konfigurasi yang sama, sesuaikan server_name dan root untuk masing-masing.
Langkah 6: Aktifkan Server Block
Buat symlink dari sites-available ke sites-enabled agar Nginx membaca konfigurasi tersebut:
sudo ln -s /etc/nginx/sites-available/domain1.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/domain2.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/domain3.com /etc/nginx/sites-enabled/
Jika file default masih aktif dan tidak dibutuhkan, sebaiknya nonaktifkan untuk menghindari konflik konfigurasi:
sudo rm /etc/nginx/sites-enabled/default
Langkah 7: Uji dan Reload Konfigurasi
Sebelum menerapkan perubahan, selalu uji sintaks konfigurasi terlebih dahulu:
sudo nginx -t
Jika muncul pesan syntax is ok dan test is successful, lanjutkan dengan reload:
sudo systemctl reload nginx
Sekarang, buka masing-masing domain di browser — setiap domain akan menampilkan halaman index.html yang berbeda sesuai konfigurasi server block-nya.
Langkah 8: Tambahkan SSL Gratis dengan Let’s Encrypt (Opsional tapi Sangat Direkomendasikan)
Untuk keamanan, aktifkan HTTPS menggunakan Certbot:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d domain1.com -d www.domain1.com
sudo certbot --nginx -d domain2.com -d www.domain2.com
sudo certbot --nginx -d domain3.com -d www.domain3.com
Certbot akan otomatis mengubah konfigurasi server block untuk mendukung HTTPS dan mengarahkan trafik HTTP ke HTTPS. Sertifikat juga akan diperbarui otomatis melalui systemd timer bawaan Certbot.
Studi Kasus Sederhana
Misalkan sebuah agensi digital mengelola tiga klien kecil dalam satu VPS: website company profile, landing page promosi, dan blog SEO klien. Dengan konfigurasi vhost seperti di atas, agensi cukup menambahkan satu server block baru setiap kali ada klien baru, tanpa perlu server tambahan. Log access dan error yang terpisah per domain juga memudahkan troubleshooting saat salah satu situs bermasalah, tanpa memengaruhi domain lain.
Kesalahan yang Sering Terjadi
1. Lupa Membuat Symlink ke sites-enabled Penyebab: File konfigurasi dibuat di sites-available tapi tidak di-link ke sites-enabled. Dampak: Domain tidak bisa diakses meski konfigurasi sudah benar. Solusi: Selalu jalankan ln -s setelah membuat file konfigurasi baru, lalu reload Nginx.
2. Konflik default_server Penyebab: Lebih dari satu server block menggunakan directive default_server pada listen. Dampak: Nginx gagal reload dengan error konfigurasi. Solusi: Pastikan hanya satu server block yang memiliki default_server, atau hapus jika tidak diperlukan.
3. DNS Belum Terarah dengan Benar Penyebab: A Record domain belum diarahkan ke IP server, atau propagasi DNS belum selesai. Dampak: Domain tidak bisa diakses meski server sudah dikonfigurasi dengan benar. Solusi: Cek dengan dig domain1.com atau nslookup domain1.com, tunggu propagasi DNS (bisa memakan waktu beberapa jam).
4. Permission Direktori Salah Penyebab: Direktori root website tidak bisa dibaca oleh user Nginx (www-data). Dampak: Muncul error 403 Forbidden. Solusi: Pastikan permission direktori minimal 755 dan file minimal 644.
5. Lupa Uji Konfigurasi Sebelum Reload Penyebab: Langsung reload tanpa nginx -t. Dampak: Jika ada typo, seluruh service Nginx bisa gagal jalan dan semua domain down bersamaan. Solusi: Jadikan nginx -t sebagai kebiasaan wajib sebelum reload atau restart.
Tips dan Rekomendasi
- Gunakan penamaan file konfigurasi yang konsisten, misalnya sesuai nama domain, agar mudah dikelola saat jumlah domain bertambah.
- Pisahkan access log dan error log per domain agar analisis trafik dan debugging lebih mudah.
- Aktifkan kompresi Gzip di level
httppada/etc/nginx/nginx.confuntuk mempercepat loading halaman. - Gunakan
certbot renew --dry-runsecara berkala untuk memastikan proses perpanjangan SSL otomatis berjalan lancar. - Pertimbangkan menambahkan header keamanan seperti
X-Frame-OptionsdanX-Content-Type-Optionspada setiap server block. - Backup folder
/etc/nginx/sites-availablesecara rutin sebelum melakukan perubahan besar.

Kesimpulan
Mengelola tiga domain dalam satu server Debian menggunakan Nginx bukan hal yang rumit jika dilakukan langkah demi langkah dengan rapi. Kunci utamanya ada pada tiga hal: struktur direktori yang jelas, file konfigurasi server block yang terpisah untuk tiap domain, serta kebiasaan menguji konfigurasi sebelum menerapkannya. Dengan menambahkan SSL gratis dari Let’s Encrypt, website Anda juga akan lebih aman dan lebih dipercaya oleh pengunjung maupun mesin pencari.
Poin penting yang perlu diingat:
- Setiap domain memiliki file konfigurasi sendiri di
sites-available, diaktifkan lewat symlink kesites-enabled - Selalu jalankan
nginx -tsebelum reload - Gunakan direktori root dan log terpisah per domain
- Aktifkan HTTPS untuk semua domain demi keamanan dan kepercayaan pengguna
Bagaimana pengalaman Anda mengonfigurasi Nginx untuk multi-domain? Punya kendala saat setup vhost atau SSL?
Tulis pertanyaan atau pengalaman Anda di kolom komentar, ya! Jangan lupa bagikan artikel ini ke rekan sysadmin atau komunitas Linux Anda, dan jelajahi artikel terkait lainnya seputar server, networking, dan DevOps di blog ini.
Frequently Asked Questions (FAQ)
Pertanyaan: Apakah bisa menjalankan lebih dari 3 domain dengan cara yang sama? Jawaban: Bisa. Cukup ulangi langkah pembuatan direktori dan server block untuk setiap domain tambahan, lalu buat symlink ke sites-enabled dan reload Nginx.
Pertanyaan: Apakah Nginx dan Apache bisa berjalan bersamaan di satu server? Jawaban: Bisa, tapi keduanya tidak boleh menggunakan port yang sama (80/443) secara bersamaan tanpa konfigurasi tambahan, misalnya dengan mengatur salah satunya sebagai reverse proxy di depan yang lain.
Pertanyaan: Berapa lama proses propagasi DNS setelah mengarahkan domain ke server? Jawaban: Umumnya beberapa menit hingga 24-48 jam, tergantung TTL (Time to Live) record DNS dan provider domain yang digunakan.
Pertanyaan: Apakah SSL dari Let’s Encrypt gratis selamanya? Jawaban: Ya, Let’s Encrypt gratis dan sertifikatnya berlaku 90 hari, namun dapat diperpanjang otomatis menggunakan Certbot tanpa biaya tambahan.
Pertanyaan: Apa perbedaan antara sites-available dan sites-enabled? Jawaban: sites-available berisi semua file konfigurasi yang ada, sedangkan sites-enabled berisi symlink ke konfigurasi yang benar-benar aktif digunakan oleh Nginx.
Suka dengan panduan ini? Yuk, tinggalkan komentar tentang pengalaman Anda mengelola multi-domain di Nginx,
bagikan artikel ini ke komunitas atau rekan kerja Anda, dan ikuti terus blog ini untuk update tutorial server, networking, dan DevOps terbaru lainnya!