Website

Cara Membuat Virtual Host (Server Block) di Nginx

12 Jun 2026 Administrator
Header Hero

Cara Membuat Virtual Host (Server Block) di Nginx

Arsitektur Multi-Tenancy: Pengelolaan Banyak Domain dalam Satu Server, Isolasi Berkas Web Root, Manajemen Log Spesifik, dan Pemetaan Struktur Tautan Simbolik

Menjalankan infrastruktur server secara efisien menuntut pengembang untuk memaksimalkan utilitas resource hardware yang tersedia. Membeli satu server VPS baru untuk setiap satu domain situs web tambahan tentu merupakan pemborosan finansial dan kapasitas komputasi server harian Anda. Solusi paling elegan yang diadopsi oleh industri adalah memanfaatkan fitur multi-tenancy pada web server modern melalui sistem Virtual Hosts atau yang lebih dikenal dengan istilah Server Blocks pada lingkungan Nginx.

Cara kerja *Server Block* diibaratkan seperti sebuah gedung apartemen besar. Seluruh website berbagi fondasi dan sumber daya server yang sama, namun masing-masing domain memiliki ruang kamar direktori (*document root*), hak akses berkas, catatan log kegagalan, serta aturan konfigurasi yang sepenuhnya terisolasi dan mandiri. Panduan ini akan membedah taktik menyusun struktur folder multi-domain, meracik skrip server block yang andal, hingga mengaktifkan tautan simbolik (*symlink*) untuk meluncurkan banyak website sekaligus dalam satu IP VPS Linux harian Anda.

Filosofi Struktur Berkas: Kunci dari kerapian server jangka panjang adalah kedisiplinan dalam menata struktur folder sejak awal. Menghindari penumpukan berkas konfigurasi secara acak akan mempermudah proses audit keamanan siber serta migrasi data pangkalan data di kemudian hari.

1. Pemetaan Struktur Web Root dan Penataan Izin Berkas

Langkah pertama adalah memprovisikan folder rumah yang terisolasi bagi masing-masing domain website, dilanjutkan dengan menyerahkan hak kepemilikan berkas secara penuh kepada user pembaca web server Nginx (www-data):

# 1. Membuat direktori root penampung multi-domain
sudo mkdir -p /var/www/myawesomeblog.com
sudo mkdir -p /var/www/mybusinesssite.com

# 2. HARDENING PERMISSIONS: Ubah kepemilikan grup folder secara mutlak ke www-data
sudo chown -R www-data:www-data /var/www/myawesomeblog.com
sudo chown -R www-data:www-data /var/www/mybusinesssite.com

# 3. Kunci hak akses ke standar aman 755 agar file tidak dimodifikasi pihak luar
sudo chmod -R 755 /var/www

Buat satu file indeks HTML sederhana pada direktori domain pertama (Blog) sebagai halaman pengujian visual awal Anda:

sudo nano /var/www/myawesomeblog.com/index.html

<!DOCTYPE html>
<html>
<head>
    <title>My Awesome Blog</title>
    <style>
        body { font-family: sans-serif; text-align: center; padding: 100px; background: #f8fafc; }
        h1 { color: #4361ee; font-size: 2.5rem; }
    </style>
</head>
<body>
    <h1>🎉 Selamat! Virtual Host Blog Berhasil Berjalan!</h1>
    <p>Domain <strong>myawesomeblog.com</strong> sukses diisolasi oleh Nginx Server Block.</p>
</body>
</html>
Server Block Template

2. Meracik Skrip Server Block untuk Domain Pertama

Manajemen berkas vhost Nginx yang terstandarisasi mewajibkan kita menyusun file templat dasar di folder sites-available, lalu mengaktifkannya menggunakan metode tautan simbolik ke folder sites-enabled tanpa merusak berkas inti:

sudo nano /etc/nginx/sites-available/myawesomeblog.com

Tempel struktur parameter penangkap trafik HTTP port 80 berikut, lengkap dengan pemisahan rute log pemicu kerusakan:

server {
    listen 80;
    listen [::]:80; # Memberikan dukungan penuh untuk jaringan interkoneksi IPv6
    
    server_name myawesomeblog.com www.myawesomeblog.com;
    
    # Mengarahkan target menuju folder dokumen root penampung yang sesuai
    root /var/www/myawesomeblog.com;
    index index.html index.htm;

    # PRO TIP SYSADMIN: Selalu pisahkan log pencatatan per situs demi mempermudah debugging harian
    access_log /var/log/nginx/myawesomeblog.com.access.log;
    error_log /var/log/nginx/myawesomeblog.com.error.log;

    location / {
        try_files $uri $uri/ =404;
    }

    # Pengetatan Sektor Keamanan UI Headers
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header X-Content-Type-Options "nosniff" always;
}
Multi-Site Isolation

3. Mendiversifikasikan Konfigurasi untuk Domain Kedua

Ulangi langkah di atas untuk memetakan domain kedua (Situs Bisnis). Kita akan menyuntikkan kustomisasi tambahan berupa optimalisasi cache kedaluwarsa berkas pada aset statis gambar dan gaya:

sudo nano /etc/nginx/sites-available/mybusinesssite.com

# Tempel struktur blok server penampung domain kedua:
server {
    listen 80;
    listen [::]:80;
    server_name mybusinesssite.com www.mybusinesssite.com;
    
    root /var/www/mybusinesssite.com;
    index index.html index.htm;

    access_log /var/log/nginx/mybusinesssite.com.access.log;
    error_log /var/log/nginx/mybusinesssite.com.error.log;

    location / {
        try_files $uri $uri/ =404;
    }

    # OPTIMASI ACCELERATION: Mengunci cache browser selama 1 tahun untuk file statis
    location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
        access_log off; # Matikan log penulisan aset kecil untuk menghemat resource I/O disk
    }

    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header X-Content-Type-Options "nosniff" always;
}

4. Aktivasi Server Block via Tautan Simbolik (Symlink)

Nginx hanya akan memproses berkas konfigurasi yang terdaftar aktif di dalam folder sites-enabled. Hubungkan kedua file templat tersebut menggunakan perintah pembuatan pintasan *symbolic link* berikut:

# 1. Membuat tautan simbolik aktivasi makro vhost
sudo ln -s /etc/nginx/sites-available/myawesomeblog.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/mybusinesssite.com /etc/nginx/sites-enabled/

# 2. Hapus tautan konfigurasi default bawaan Nginx agar tidak memicu port tumpang tindih
sudo rm /etc/nginx/sites-enabled/default

# 3. CRITICAL VALIDATION: Wajib tes struktur kode untuk mendeteksi salah ketik (typo)
sudo nginx -t

# 4. Jika muncul status 'test is successful', muat ulang layanan daemon web server
sudo systemctl reload nginx
Local DNS Testing

5. Trik Memanipulasi File hosts untuk Pengujian Lokal

Apabila domain myawesomeblog.com tersebut belum Anda beli secara sah namun Anda ingin menguji keberhasilan pemisahan trafiknya secara riil di browser, lakukan trik manipulasi pemetaan DNS lokal pada sistem operasi komputer klien Anda (bukan di dalam VPS):

  • Jika Menggunakan Sistem Operasi Windows: Buka aplikasi Notepad dengan hak klik kanan *Run as Administrator*, buka jalur file berkas: C:\Windows\System32\drivers\etc\hosts.
  • Jika Menggunakan Sistem Operasi Linux / MacOS: Jalankan perintah manipulasi teks via terminal komputer Anda: sudo nano /etc/hosts.

Sematkan baris pemetaan alamat IP publik server VPS Anda diikuti dengan string nama domain target di baris paling bawah berkas file:

# Struktur: IP_PUBLIK_VPS_ANDA NAMA_DOMAIN_TARGET
103.155.60.22 myawesomeblog.com
103.155.60.22 mybusinesssite.com

Simpan perubahan berkas file tersebut. Sekarang, buka browser harian Anda dan panggil alamat URL http://myawesomeblog.com. Browser Anda secara ajaib akan langsung terhubung ke server VPS baru tanpa melewati jaringan DNS publik luar.

Protokol Pemeliharaan, Penyelamatan, dan Pengamanan Lanjutan Multi-Site

Kepatuhan pada penataan konfigurasi Server Block Nginx akan menjamin keselamatan kelangsungan aset digital situs dari ancaman galat terintegrasi. Patuhi kaidah pemeliharaan berikut:

  • Gunakan Metode Kuncian 'snippets' untuk Reusable Config: Jika Anda memiliki baris parameter pengetatan keamanan atau konfigurasi SSL yang selalu sama di setiap situs web, jangan tulis ulang secara manual di setiap file vhost. Buat satu file penampung ringkas di /etc/nginx/snippets/security.conf, lalu panggil file tersebut di dalam blok server masing-masing situs lewat satu baris instruksi: include snippets/security.conf;.
  • Segera Naikkan Tingkat Proteksi ke Jalur HTTPS Let's Encrypt: Mengoperasikan website komersial modern mewajibkan enkripsi data pertukaran biner. Klaim sertifikat SSL gratis secara massal lintas domain terdaftar Anda lewat utility Certbot otomatisasi dengan mengeksekusi perintah terminal CLI:
    sudo apt install certbot python3-certbot-nginx -y && sudo certbot --nginx -d myawesomeblog.com -d mybusinesssite.com
  • Langkah Penyelamatan Masalah Port Konflik (Port 80 Already in Use): Apabila saat mengeksekusi perintah `nginx -t` sistem memunculkan galat bahwa port 80 telah dikuasai aplikasi lain, tandanya server VPS Anda sedang menjalankan web server Apache secara bersamaan. Matikan dan nonaktifkan layanan kompetitor tersebut lewat instruksi:
    sudo systemctl stop apache2 && sudo systemctl disable apache2 agar kendali port diserahkan utuh kepada Nginx.