Belajar Nginx - Menyiapkan Static Web Server & Virtual Hosts (Server Blocks)
Episode 3 of 21

Belajar Nginx - Menyiapkan Static Web Server & Virtual Hosts (Server Blocks)

Episode ini menjelaskan cara menyajikan beberapa domain dari satu NGINX memakai server blocks, lengkap dengan directive listen, server_name, perbedaan root vs alias, index, dan error_page.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

Satu server NGINX bisa menyajikan banyak website sekaligus. Konsep ini disebut virtual host atau server block. Episode 3 ini mengajarkan kalian membuat static web server dan memisahkan beberapa domain berbeda dalam satu instalasi NGINX.

Di akhir episode, kalian akan bisa membangun struktur file web statis, mendefinisikan beberapa server block untuk domain berbeda, memahami kapan memakai root dan kapan alias, serta menangani halaman error kustom. Semua contoh langsung dijalankan di server sungguhan.

Konsep Server Block

Satu NGINX, Banyak Website

Server block adalah context server di dalam http. Setiap block mendefinisikan bagaimana NGINX merespons request untuk kombinasi tertentu dari port, IP, dan nama domain. Ketika request masuk, NGINX mencocokkan request tersebut ke server block yang paling tepat berdasarkan directive listen dan server_name.

Lokasi file server block pada Ubuntu biasanya di /etc/nginx/sites-available/, lalu dibuat symlink ke /etc/nginx/sites-enabled/. Pada distribusi lain seperti RHEL, cukup taruh file di /etc/nginx/conf.d/.

Directive listen

Port IPv4, IPv6, dan default_server

Directive listen menentukan alamat dan port yang didengarkan server block:

Varian directive listen
server {
    listen 80;
    listen [::]:80;
}
 
server {
    listen 443 ssl default_server;
    server_name _;
}

listen 80; mendengarkan IPv4, listen [::]:80; mendengarkan IPv6. Parameter default_server menandai server block sebagai tujuan fallback ketika tidak ada server_name yang cocok. Kuncinya: hanya boleh ada satu default_server per kombinasi alamat dan port.

Directive server_name

Exact, Wildcard, dan Regex

server_name menentukan domain mana yang dilayani block tersebut. Ada tiga pola:

  • Exact match: server_name example.com; — persis cocok dengan nama host.
  • Wildcard: server_name *.example.com; — cocok dengan subdomain seperti api.example.com.
  • Regex: server_name ~^(?<user>.+)\.example\.net$; — pola kompleks dengan named capture.
Server block dengan beberapa server_name
server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example;
}

Jika kalian memakai wildcard *.example.com, pastikan ada juga record DNS yang mengarahkan *.example.com ke IP server.

root vs alias

Perbedaan Mendasar

root dan alias menentukan cara path file digabung dengan URI, dan perbedaannya sering membingungkan:

  • root /var/www/site; — URI langsung ditambahkan: request /blog/halo mencari /var/www/site/blog/halo.
  • alias /var/www/files; — URI yang cocok dengan location diganti: location /assets/ dengan alias /var/www/files/ membuat request /assets/x.png mencari /var/www/files/x.png.
Perbedaan root dan alias
server {
    listen 80;
    server_name example.com;
    root /var/www/site;
 
    location /assets/ {
        alias /var/www/assets/;
    }
}

Aturan praktis: pakai root di level server untuk document root, dan alias ketika direktori di server tidak punya struktur yang sama dengan URI publik.

Directive index dan error_page

File Default

index menentukan file yang dicari NGINX saat request mengarah ke direktori:

Mengatur index
server {
    listen 80;
    server_name example.com;
    root /var/www/site;
    index index.html index.htm;
}

NGINX akan mencoba index.html dulu, lalu index.htm.

Halaman Error Kustom

error_page menunjuk request error ke file tertentu tanpa mengubah status code:

Halaman error kustom
server {
    listen 80;
    server_name example.com;
    root /var/www/site;
    error_page 404 /404.html;
    location = /404.html {
        internal;
    }
}

Syarat penting: file yang menjadi tujuan error_page harus diakses secara internal. Directive internal; mencegah file tersebut diakses langsung oleh pengguna.

Membuat Dua Server Block Lengkap

Dua Domain, Satu Server

Contoh lengkap dua website di satu server. Buat direktori untuk masing-masing domain, lalu tulis file konfigurasi:

Server block domain pertama
server {
    listen 80;
    server_name example.com;
    root /var/www/example;
    index index.html;
    error_page 404 /404.html;
}
 
server {
    listen 80;
    server_name blog.example.com;
    root /var/www/blog;
    index index.html;
    error_page 404 /404.html;
}

Simpan di /etc/nginx/conf.d/example.com.conf, uji dengan nginx -t, lalu reload:

Aktifkan konfigurasi baru
sudo nginx -t
sudo nginx -s reload

Terakhir, verifikasi masing-masing domain merespons konten yang benar.

Penutup

Episode 3 menuntaskan fondasi static web server: kalian bisa mendefinisikan banyak server block dalam satu NGINX, memilih block berdasarkan listen dan server_name, membedakan root dengan alias, serta mengatur index dan error_page.

Inti yang harus dibawa pulang:

  • Server block adalah virtual host: satu NGINX untuk banyak domain.
  • listen 80 default_server; menandai block fallback untuk alamat dan port.
  • server_name bisa exact, wildcard, atau regex.
  • root menggabungkan URI ke path; alias menggantikan prefix location.
  • index menentukan file default, error_page menangani halaman error.
  • Selalu uji konfigurasi dengan nginx -t sebelum reload.

Di episode 4 selanjutnya kita akan deep dive location block matching dan priority rules — lima tipe sintaks location mulai dari exact match sampai prefix, serta urutan prioritas NGINX dalam memilih location paling tepat untuk sebuah URI.