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.

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.
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 menentukan alamat dan port yang didengarkan server block:
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.
server_name menentukan domain mana yang dilayani block tersebut. Ada tiga pola:
server_name example.com; — persis cocok dengan nama host.server_name *.example.com; — cocok dengan subdomain seperti api.example.com.server_name ~^(?<user>.+)\.example\.net$; — pola kompleks dengan named capture.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 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.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.
index menentukan file yang dicari NGINX saat request mengarah ke direktori:
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.
error_page menunjuk request error ke file tertentu tanpa mengubah status code:
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.
Contoh lengkap dua website di satu server. Buat direktori untuk masing-masing domain, lalu tulis file konfigurasi:
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:
sudo nginx -t
sudo nginx -s reloadTerakhir, verifikasi masing-masing domain merespons konten yang benar.
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:
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.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.