Tutorial Ubuntu 26.04 / Mengatur situs Nginx dan memeriksa pemilihan Host
Kelola situs Nginx di Ubuntu dengan memeriksa struktur include yang benar-benar digunakan, lalu aktifkan konfigurasi sites-available melalui sites-enabled. Latihan ini menempatkan dua situs pada 127.0.0.1:8080 untuk menguji pemilihan situs berdasarkan header Host tanpa membuka situs latihan ke jaringan luar.
Hanya situs baru pada port 8080 yang dibatasi ke loopback, yaitu alamat untuk mengakses mesin itu sendiri. Pemasangan Nginx di Ubuntu dapat langsung menjalankan situs bawaan pada port 80. Sebelum memasang, pastikan akses pengelolaan dan pembatasan UFW sudah sesuai, atau gunakan VM khusus yang terisolasi dari jaringan luar.
Pasang dan periksa konfigurasi yang sudah ada
Nginx adalah server HTTP yang dapat melayani beberapa situs. Server block mengelompokkan pengaturan suatu situs, sedangkan document root adalah direktori berkas yang disajikan. Jalankan perintah satu per satu pada VM khusus dan periksa hasil setiap perintah sebelum melanjutkan.
sudo apt update
sudo apt install nginx curl
sudo nginx -t
sudo nginx -T
sudo ss -lntp
Jangan menghentikan paksa server web lain yang sudah memakai port tersebut. Periksa include, listen, server_name, dan default server yang dimuat melalui nginx -T. Struktur sites-available/sites-enabled berlaku bila nginx.conf benar-benar menyertakan direktori tersebut; menaruh berkas di sebuah direktori saja belum membuatnya aktif.
Opsi baris perintah Nginx membedakan -t, yang memeriksa sintaks dan mencoba membuka berkas rujukan konfigurasi, dari -T yang juga mencetak konfigurasi. Keluaran lengkap dapat memuat alamat atau pengaturan autentikasi sensitif; jangan memublikasikannya. Panduan konfigurasi Nginx Ubuntu menjelaskan tata letak situs dan document root.
Periksa paparan situs bawaan pada port 80
sudo ss -lntp
sudo ufw status verbose
ls -l /etc/nginx/sites-enabled
sudo nginx -T
Listener 0.0.0.0:80 atau [::]:80 menerima koneksi pada cakupan alamat yang berbeda dari 127.0.0.1:8080. UFW yang tidak aktif atau aturan port 80 yang luas dapat membuat situs bawaan terjangkau dari perangkat lain. Periksa pula jaringan VM, router, dan firewall penyedia; listener saja tidak membuktikan keterjangkauan dari luar. Bedakan respons lokal dengan koneksi baru dari klien yang diizinkan dan yang dikecualikan.
Pada VM baru khusus latihan yang tidak memerlukan situs bawaan, seluruh blok berikut menyimpan lalu menonaktifkan hanya symlink situs bawaan paket. Symlink adalah tautan ke berkas lain. Jangan terapkan blok ini pada situs produksi. Blok berhenti bila tautan atau target tidak sesuai, atau jika pencadangan maupun validasi gagal.
(
set -eu
link=/etc/nginx/sites-enabled/default
if [ ! -L "$link" ] || [ "$(readlink -f "$link")" != /etc/nginx/sites-available/default ]; then
printf 'Bukan symlink bawaan paket yang diharapkan; periksa secara manual.\n' >&2
exit 1
fi
backup_dir=$(sudo mktemp -d /root/nginx-default-link.XXXXXX)
sudo cp -a "$link" "$backup_dir/default"
printf 'Tautan disimpan: %s/default\n' "$backup_dir"
sudo rm -- "$link"
sudo nginx -t
sudo systemctl reload nginx
sudo ss -lntp
)
Berkas asli sites-available/default tetap ada. Jika port 80 masih mendengarkan, cari situs atau proses lain yang menggunakannya. Catat lokasi cadangan yang dicetak. Untuk memulihkan, periksa bahwa belum ada perubahan baru pada jalur asli, kembalikan symlink cadangan ke lokasi semula, lalu jalankan nginx -t dan reload hanya jika berhasil. Jangan menimpa perubahan administrator lain.
Panduan pemasangan Nginx Ubuntu menjelaskan bahwa pemasangan paket juga menyiapkan situs bawaan dan memulai layanan. Menonaktifkan satu tautan situs berbeda dari menghentikan seluruh layanan Nginx.
Siapkan document root dengan respons berbeda
Sebelum menjalankan blok berikut, periksa kedua direktori /srv/ubuntu-course-alpha dan /srv/ubuntu-course-beta serta nama konfigurasi ubuntu-course-lab di sites-available dan sites-enabled. Jika salah satunya sudah ada, berhenti dan pertahankan isinya. Pilih nama latihan baru dan sesuaikan semua jalur serta konfigurasi secara konsisten; jangan sekadar mengulang blok karena tee dapat menimpa index.html yang sudah ada.
Hanya pada jalur khusus yang kosong, buat dua respons berbeda berikut. Pengguna pekerja Nginx memerlukan akses menelusuri direktori dan membaca berkas, bukan izin tulis untuk semua orang.
sudo install -d -m 0755 /srv/ubuntu-course-alpha /srv/ubuntu-course-beta
printf '%s\n' 'alpha-site' | sudo tee /srv/ubuntu-course-alpha/index.html
printf '%s\n' 'beta-site' | sudo tee /srv/ubuntu-course-beta/index.html
Pastikan index.html pertama berisi alpha-site dan yang kedua beta-site, serta keduanya dapat dibaca oleh pengguna pekerja Nginx. Tinjau izin berkas dan setiap direktori induk; jangan mengatasi kegagalan akses dengan memberi izin 777 secara menyeluruh.
Definisikan server block lokal yang lengkap
Simpan seluruh konfigurasi berikut sebagai berkas baru /etc/nginx/sites-available/ubuntu-course-lab, misalnya dengan sudoedit /etc/nginx/sites-available/ubuntu-course-lab. Pastikan berkas belum ada sebelum menyimpan. Nama .test di sini hanya untuk dokumentasi dan pengujian lokal, bukan domain publik atau penerbitan sertifikat. Kelola situs bawaan port 80 secara terpisah dari latihan 8080 ini.
server {
listen 127.0.0.1:8080 default_server;
server_name _;
return 404;
}
server {
listen 127.0.0.1:8080;
server_name alpha.example.test;
root /srv/ubuntu-course-alpha;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 127.0.0.1:8080;
server_name beta.example.test;
root /srv/ubuntu-course-beta;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Ketiga blok memakai alamat dan port yang sama. Dua blok bernama memilih document root berdasarkan Host, sedangkan blok pertama mengembalikan 404 untuk nama yang tidak cocok. Menurut penjelasan pemilihan server Nginx, default_server adalah pengaturan listener. Karakter garis bawah pada server_name bukan mekanisme penolakan khusus; hindari dua default_server pada alamat dan port yang sama.
try_files mencoba berkas, lalu direktori, sebelum menghasilkan 404 bila jalur tidak tersedia. Dua nama berbeda dapat berbagi satu alamat dan port; yang harus dibedakan dalam latihan ini adalah server_name dan root. Konfigurasi ini tidak menambahkan listener IPv6 atau membuka port 8080 ke alamat jaringan VM.
Aktifkan, validasi, dan muat ulang
(
set -eu
sudo ln -s /etc/nginx/sites-available/ubuntu-course-lab /etc/nginx/sites-enabled/ubuntu-course-lab
sudo nginx -t
sudo systemctl reload nginx
)
Jika symlink sudah ada, periksa targetnya dan jangan menimpanya. Jika nginx -t gagal, jangan reload; perbaiki berkas, baris, include ganda, atau benturan listener yang dilaporkan. Periksa juga keberhasilan reload. Layanan yang masih berjalan dapat tetap memakai konfigurasi lama bila konfigurasi baru belum diterapkan.
Keberhasilan pemeriksaan sintaks belum membuktikan akses berkas oleh pekerja Nginx atau respons Host yang benar. Tinjau kembali konfigurasi yang dimuat dan lakukan pengujian HTTP berikut setelah reload berhasil.
Uji nama, jalur, dan respons bawaan
Jalankan di server Ubuntu yang sama karena 127.0.0.1 merujuk mesin tempat curl berjalan. Opsi --noproxy menghindarkan permintaan lokal ini dari proxy yang mungkin diatur pada lingkungan shell. Periksa respons dan status keluar tiap perintah secara terpisah.
curl --noproxy '*' --fail --show-error --resolve alpha.example.test:8080:127.0.0.1 http://alpha.example.test:8080/
curl --noproxy '*' --fail --show-error --resolve beta.example.test:8080:127.0.0.1 http://beta.example.test:8080/
curl --noproxy '*' -i -H "Host: unknown.example.test" http://127.0.0.1:8080/
Dua permintaan pertama harus menampilkan alpha-site dan beta-site. Permintaan terakhir harus menampilkan status HTTP 404. curl -i menampilkan header bersama isi respons dan tidak menjadikan 404 sebagai status keluar gagal; jangan menyimpulkan keberhasilan aplikasi hanya dari kode keluar nol pada perintah terakhir.
Dalam dokumentasi curl, --resolve menetapkan pasangan nama, port, dan alamat untuk permintaan tersebut tanpa mengubah DNS sistem. Opsi ini tetap menggunakan nama URL pada permintaan Host. --fail pada dua permintaan pertama membuat respons kesalahan HTTP diperlakukan sebagai kegagalan transfer.
Untuk menguji jalur yang tidak ada, ulangi permintaan alpha dengan jalur baru yang memang belum dibuat di document root. Dengan --fail, harapkan status keluar gagal untuk HTTP 404, bukan alpha-site. Jika hasil salah, bandingkan include, nama ganda, port permintaan, root, izin, serta lokasi access log dan error log yang benar-benar digunakan. Jangan membagikan log yang memuat data sensitif.
Untuk menonaktifkan latihan, lepaskan hanya symlink sites-enabled/ubuntu-course-lab setelah memeriksa targetnya, kemudian validasi dan reload. Pertahankan berkas sumber dan situs lain; jangan menghapus seluruh direktori sites-enabled. Sebelum membuka layanan ke internet, siapkan domain, alamat, firewall, HTTPS dan pembaruan sertifikat, serta kebijakan log secara terpisah.




