Deploy Nginx di Ubuntu Server

Memasang Nginx, menyajikan halaman web pertama, lalu memahami konfigurasi dan log-nya. Tiap perintah dijelaskan fungsinya.

Gambaran besar

Nginx (dibaca "engine-x") adalah web server: program yang menerima permintaan dari browser lalu mengirimkan file website sebagai jawabannya. Nginx juga bisa berperan sebagai reverse proxy dan load balancer, tapi di halaman ini kita fokus ke fungsi dasarnya.

Nginx hanya "pelayan". Ia tidak menyimpan website, ia mengambil file dari folder yang ditunjuk konfigurasi.

Tiga hal yang perlu kamu pahami dari awal sampai akhir:

  1. File website ditaruh di sebuah folder.
  2. Konfigurasi memberi tahu Nginx: "untuk alamat ini, sajikan folder itu".
  3. Setelah konfigurasi diubah: tes (nginx -t), lalu reload.

Persiapan

Kebutuhan VM (Proxmox)

KomponenKebutuhan
CPU1 core sudah cukup
RAM1 GB sudah cukup
Disk10 GB atau lebih
OSUbuntu Server 22.04 atau 24.04

Yang perlu disiapkan

  • Network VM memakai bridge vmbr0 (Hardware → Network Device) agar VM dapat IP di jaringan yang sama dengan laptopmu.
  • Bisa login ke VM lewat Console Proxmox atau SSH, dan user punya hak sudo.
  • IP yang tetap. Di halaman ini contohnya 172.16.6.200. Ganti dengan IP VM-mu.
  • Snapshot Proxmox sebelum mulai (VM → Snapshot → Take Snapshot).
Cara pakai halaman ini: klik Salin di kotak hitam, tempel di terminal (di PuTTY/Terminal Windows: klik kanan). Jalankan berurutan, lalu centang Sudah selesai untuk melacak progres. Perintah dijalankan di terminal VM, sedangkan alamat http://... dibuka di browser.
1

Cek IP dan koneksi

Pastikan VM punya IP yang benar dan bisa terhubung ke internet untuk mengunduh paket.

ip -br a
ping -c 3 google.com

Fungsi tiap perintah

PerintahArtinya
ip -br aMenampilkan interface jaringan dan IP-nya dalam satu baris ringkas (-br = brief, a = address). Catat IP di baris ens18 atau sejenisnya.
ping -c 3 google.comKirim 3 paket tes ke google.com (-c 3 = count 3). Kalau dibalas, internet VM jalan.

Hasil yang benar: ada IP seperti 172.16.6.200/24 dan ping menampilkan 0% packet loss.

2

Update sistem

Memperbarui daftar dan versi paket Ubuntu sebelum memasang program baru.

sudo apt update && sudo apt upgrade -y

Fungsi tiap bagian

BagianArtinya
sudoJalankan dengan hak administrator (root).
apt updateAmbil daftar terbaru paket yang tersedia. Belum menginstal apa pun.
&&"Kalau perintah sebelumnya berhasil, lanjut ke perintah berikutnya."
apt upgrade -yPerbarui semua paket terpasang. -y = otomatis jawab "ya".

Hasil yang benar: selesai tanpa tulisan E: (error). Kalau kernel ikut diperbarui, jalankan sudo reboot lalu login lagi.

3

Install Nginx

Memasang program Nginx dari repositori resmi Ubuntu.

sudo apt install nginx -y
nginx -v

Fungsi tiap perintah

PerintahArtinya
apt install nginx -yUnduh dan pasang Nginx beserta pendukungnya. Nginx langsung dijalankan otomatis setelah terpasang.
nginx -vMenampilkan versi Nginx untuk memastikan terpasang.

Hasil yang benar: nginx -v menampilkan sesuatu seperti nginx version: nginx/1.x.x (Ubuntu).

4

Cek service

Pastikan Nginx berjalan dan akan menyala sendiri setiap VM dihidupkan.

sudo systemctl status nginx --no-pager
sudo systemctl enable nginx

Fungsi tiap perintah

PerintahArtinya
systemctlAlat untuk mengatur layanan (service) di Ubuntu.
status nginxTampilkan status layanan Nginx dan beberapa baris log terakhirnya.
--no-pagerTampilkan semuanya langsung, tidak masuk mode baca per halaman.
enable nginxNginx otomatis menyala saat boot. Biasanya sudah aktif otomatis, perintah ini menjamin.

Hasil yang benar: ada tulisan hijau active (running). Kalau failed, lihat bagian Kalau error.

5

Buka firewall

Izinkan orang mengakses web lewat port 80. Lewati langkah ini jika firewall (ufw) tidak kamu pakai.

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx HTTP'
sudo ufw enable
sudo ufw status

Fungsi tiap perintah

PerintahArtinya
ufw allow OpenSSHIzinkan SSH (port 22). Wajib dijalankan sebelum enable, kalau tidak koneksi SSH-mu bisa terputus.
ufw allow 'Nginx HTTP'Izinkan port 80 lewat profil bawaan Nginx. Profil lain: 'Nginx HTTPS' (port 443) dan 'Nginx Full' (80 dan 443).
ufw enableAktifkan firewall. Ketik y jika ditanya.
ufw statusTampilkan aturan yang sedang aktif.

Hasil yang benar: Status: active, dengan OpenSSH dan Nginx HTTP berstatus ALLOW.

6

Tes di browser

Membuktikan Nginx benar-benar melayani pengunjung.

Tes cepat dari dalam VM:

curl -I http://localhost
BagianArtinya
curlProgram untuk membuka alamat web lewat terminal.
-IHanya tampilkan header jawaban (bukan seluruh isi halaman).
http://localhostAlamat komputer ini sendiri.

Lalu dari browser di laptop (satu jaringan dengan Proxmox), buka:

http://172.16.6.200

Hasil yang benar: curl menampilkan HTTP/1.1 200 OK, dan browser menampilkan halaman Welcome to nginx!.

7

Edit halaman default

Cara paling mudah membuat website sendiri: ubah file di folder bawaan Nginx.

ls -la /var/www/html/
sudo nano /var/www/html/index.html

Di editor nano, hapus isi lama (tekan Ctrl+K berulang untuk menghapus baris demi baris), lalu tempel isi ini:

<!DOCTYPE html>
<html lang="id">
<head>
  <meta charset="utf-8">
  <title>Websiteku</title>
</head>
<body>
  <h1>Halo dari Proxmox!</h1>
  <p>Server ini jalan pakai Nginx.</p>
</body>
</html>

Simpan dengan Ctrl+O, Enter, lalu keluar dengan Ctrl+X.

Fungsi tiap bagian

BagianArtinya
ls -la /var/www/html/Lihat isi folder website. -l = detail, -a = termasuk file tersembunyi.
nanoEditor teks sederhana di terminal.
/var/www/html/index.htmlindex.html adalah halaman yang tampil otomatis saat orang membuka alamat tanpa nama file.

Hasil yang benar: refresh browser (Ctrl+F5), tulisan berubah menjadi "Halo dari Proxmox!". Tidak perlu reload Nginx, karena kamu hanya mengubah isi website, bukan konfigurasi.

Nama file = alamat halaman. File tentang.html di folder itu dibuka lewat http://172.16.6.200/tentang.html. .html di alamat wajib ditulis, kecuali kamu mengatur konfigurasi khusus.

8

Buat server block sendiri

Cara yang lebih rapi: folder website dan konfigurasi milikmu sendiri, terpisah dari bawaan. Di sinilah kamu belajar membaca konfigurasi Nginx.

A. Buat folder dan salin halaman yang sudah ada

sudo mkdir -p /var/www/belajar
sudo cp -n /var/www/html/*.html /var/www/belajar/
sudo chown -R www-data:www-data /var/www/belajar
PerintahArtinya
mkdir -p /var/www/belajarBuat folder baru. -p = tidak error kalau sudah ada.
cp -n ...*.html ...Salin semua file .html dari folder lama (termasuk index.html dan wazuh.html kalau ada). -n = jangan timpa file yang sudah ada.
chown -R www-data:www-dataSerahkan kepemilikan folder ke www-data, user yang dipakai Nginx. -R = termasuk semua isinya.

B. Tulis konfigurasi

sudo nano /etc/nginx/sites-available/belajar

Isi dengan (ganti IP dengan IP VM-mu):

server {
    listen 80;
    server_name 172.16.6.200;

    root /var/www/belajar;
    index index.html;

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

Arti tiap baris konfigurasi

BarisArtinya
server { ... }Satu blok = satu website.
listen 80;Dengarkan port 80 (port HTTP standar).
server_name 172.16.6.200;Blok ini melayani permintaan yang ditujukan ke alamat ini. Nanti bisa diganti nama domain.
root /var/www/belajar;Folder tempat file website berada.
index index.html;Kalau alamat tanpa nama file, tampilkan index.html.
location / { ... }Aturan untuk semua alamat yang diawali / (yaitu semuanya).
try_files $uri $uri/ =404;Cari file yang diminta, lalu foldernya. Kalau tidak ada, tampilkan error 404.

C. Aktifkan, tes, lalu reload

sudo ln -s /etc/nginx/sites-available/belajar /etc/nginx/sites-enabled/belajar
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx
PerintahArtinya
ln -s A BBuat shortcut (symlink) ke file A di lokasi B. Konfigurasi hanya aktif kalau shortcut-nya ada di sites-enabled.
rm .../sites-enabled/defaultMatikan situs bawaan supaya tidak bentrok. Ini hanya menghapus shortcut, file aslinya di sites-available tetap aman.
nginx -tTes: apakah konfigurasi yang kamu tulis benar? Selalu jalankan sebelum reload.
systemctl reload nginxTerapkan konfigurasi baru tanpa memutus koneksi pengunjung yang sedang aktif.
Perhatikan: setelah langkah ini, Nginx menyajikan /var/www/belajar, bukan /var/www/html lagi. Untuk halaman baru (misalnya wazuh.html), taruh di folder belajar.

Hasil yang benar: nginx -t menampilkan syntax is ok dan test is successful. Browser tetap menampilkan websitemu di http://172.16.6.200.

9

Baca log

Log adalah cara utama mencari tahu siapa yang mengakses dan apa yang salah.

sudo tail -f /var/log/nginx/access.log
sudo tail -n 30 /var/log/nginx/error.log
BagianArtinya
tail -fTampilkan akhir file dan terus mengikuti baris baru secara langsung. Keluar dengan Ctrl+C.
tail -n 30Tampilkan 30 baris terakhir saja.
access.logCatatan setiap permintaan yang masuk.
error.logCatatan kesalahan (konfigurasi salah, file tidak ditemukan, izin ditolak).

Jalankan perintah pertama, lalu buka atau refresh websitemu di browser. Satu baris baru muncul, kira-kira seperti ini:

172.16.6.10 - - [20/Sep/2026:10:15:32 +0700] "GET /index.html HTTP/1.1" 200 156 "-" "Mozilla/5.0 ..."
BagianArtinya
172.16.6.10IP pengunjung (laptopmu).
[20/Sep/2026:10:15:32 +0700]Waktu permintaan.
"GET /index.html HTTP/1.1"Yang diminta: metode GET, halaman /index.html.
200Kode status jawaban (lihat tabel di bawah).
156Ukuran jawaban dalam byte.
"Mozilla/5.0 ..."Jenis browser pengunjung.

Kode status yang sering muncul

KodeArtinya
200Berhasil.
301 / 302Dialihkan ke alamat lain.
403Ditolak: izin file atau folder salah, atau tidak ada file index.html.
404File tidak ditemukan (nama salah atau folder salah).
502Nginx tidak bisa menghubungi aplikasi di belakangnya (pada mode reverse proxy).
10

Bonus: kunci website dengan password

Untuk membuat websitemu benar-benar meminta login. Nginx bisa melakukannya lewat Basic Auth. Butuh langkah 8 sudah selesai.

A. Buat file password

sudo apt install apache2-utils -y
sudo htpasswd -c /etc/nginx/.htpasswd admin
BagianArtinya
apt install apache2-utilsMemasang alat htpasswd (dipakai untuk membuat password terenkripsi).
htpasswd -c ...Buat file password baru. -c = create. Untuk menambah user berikutnya, jalankan tanpa -c agar file tidak tertimpa.
/etc/nginx/.htpasswdLokasi file. Titik di depan membuatnya file tersembunyi.
adminNama user. Kamu akan diminta mengetik password dua kali.

B. Aktifkan di konfigurasi

sudo nano /etc/nginx/sites-available/belajar

Ubah blok location / menjadi:

    location / {
        auth_basic "Area terbatas";
        auth_basic_user_file /etc/nginx/.htpasswd;
        try_files $uri $uri/ =404;
    }
Baris baruArtinya
auth_basic "Area terbatas";Aktifkan kotak login. Teks di dalam tanda kutip tampil sebagai judul kotak login.
auth_basic_user_file ...;Lokasi file daftar user dan password tadi.

C. Tes dan reload

sudo nginx -t && sudo systemctl reload nginx

Di sini && membuat reload hanya berjalan kalau tes konfigurasi lolos.

Hasil yang benar: membuka http://172.16.6.200 memunculkan kotak login dari browser. Username admin dan password yang kamu buat membuka websitenya. Password salah menghasilkan status 401 di access log.

Keterbatasan: lewat http biasa, username dan password dikirim tanpa enkripsi kuat, jadi bisa dibaca orang yang menyadap jaringan. Untuk latihan di jaringan lokal tidak masalah. Untuk akses dari internet, wajib pakai HTTPS. Ini juga bukan pengganti login aplikasi sungguhan (dengan database dan backend), hanya pintu berkunci untuk seluruh website.

Perintah harian

sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx
sudo nginx -t
sudo nginx -T | less
PerintahKapan dipakai
startMenyalakan Nginx yang sedang mati.
stopMematikan Nginx. Website tidak bisa diakses.
restartMatikan lalu nyalakan lagi. Koneksi aktif terputus sebentar.
reloadTerapkan konfigurasi baru tanpa putus koneksi. Pilihan utama setelah mengubah konfigurasi.
nginx -tTes konfigurasi. Jalankan sebelum reload.
nginx -T | lessTampilkan seluruh konfigurasi aktif yang dibaca Nginx, lengkap dengan nama file asalnya. | menyalurkan hasilnya ke less supaya bisa dibaca per halaman (keluar dengan q). Ini cara terbaik melihat "apa saja yang sedang aktif".

Lokasi file penting

LokasiIsi
/etc/nginx/nginx.confKonfigurasi utama. Di dalamnya ada perintah include yang memuat isi sites-enabled.
/etc/nginx/sites-available/Semua konfigurasi website (aktif maupun tidak).
/etc/nginx/sites-enabled/Konfigurasi yang aktif, berupa shortcut ke sites-available.
/etc/nginx/conf.d/Alternatif tempat konfigurasi tambahan (semua file .conf di sini otomatis dibaca).
/var/www/Folder file website (html bawaan, belajar milikmu).
/var/log/nginx/Log akses dan error.
/usr/sbin/nginxProgram Nginx itu sendiri.

Alur pembacaan Nginx: nginx.confinclude sites-enabled/* → blok server milikmu → folder root → file website.

Kalau error

GejalaPenyebab dan solusi
nginx -t menampilkan errorBaca pesannya, biasanya menyebut nama file dan nomor baris. Paling sering: lupa titik koma ; di akhir baris atau kurung } tidak lengkap. Perbaiki lalu tes ulang. Jangan reload sebelum lolos.
Browser: halaman tidak bisa dibukaCek systemctl status nginx (harus active), IP benar, dan port 80 dibuka di ufw. Pastikan laptop satu jaringan dengan VM.
403 ForbiddenTidak ada index.html di folder root, atau izin folder salah. Coba sudo chown -R www-data:www-data /var/www/belajar.
404 Not FoundNama file salah atau ada di folder lain. Cek dengan ls /var/www/belajar/ dan pastikan root di konfigurasi menunjuk folder yang benar.
Perubahan file tidak terlihatCache browser. Tekan Ctrl+F5.
Perubahan konfigurasi tidak berlakuLupa reload, atau shortcut belum ada di sites-enabled (cek ls -la /etc/nginx/sites-enabled/).
Nginx gagal start: address already in usePort 80 sudah dipakai program lain. Cek dengan sudo ss -tlnp | grep :80.

Untuk penyebab detail, selalu lihat log error:

sudo tail -n 30 /var/log/nginx/error.log

Hapus Nginx (kalau mau mengulang)

Cara termudah adalah rollback snapshot di Proxmox. Alternatif lewat terminal:

sudo systemctl stop nginx
sudo apt purge nginx nginx-common -y
sudo apt autoremove -y
PerintahArtinya
systemctl stop nginxMatikan Nginx dulu.
apt purge nginx nginx-commonHapus program beserta file konfigurasinya di /etc/nginx. (remove biasa akan menyisakan konfigurasi.)
apt autoremoveBersihkan paket pendukung yang tidak terpakai lagi.

Folder website di /var/www tidak ikut terhapus, jadi isi websitemu aman.