Nginx adalah web server yang paling sering dipilih jadi pintu depan server modern: melayani berkas statis dengan hemat sumber daya, sekaligus sanggup meneruskan trafik ke backend di belakangnya. Di Chapter Web Server
kita sudah memahami bahasa yang dibicarakan — permintaan, kode status, virtual host, dan header Host — sekarang kita memasang penuturnya. Paket nginx tidak terpasang di lingkungan latihan, jadi perintah instalasi kita lihat dalam prosa sementara struktur berkas konfigurasinya — inti dari pekerjaan harian — kita bangun dan bedah sungguhan, dari peta direktori, server block untuk situs statis, hingga reverse proxy ke backend.
Instalasi dan Peta Konfigurasi #
Di keluarga Debian, Nginx dipasang dengan sudo apt install nginx — paket tersebut langsung menyala dan menyajikan halaman selamat datang bawaan begitu selesai. Seluruh keputusan hidupnya ada di direktori /etc/nginx/, dan satu berkas utama menjahit semuanya: nginx.conf. Di dalam blok http { } berkas itu terdapat dua directive penting: include /etc/nginx/conf.d/*.conf; dan include /etc/nginx/sites-enabled/*; — artinya, berkas-berkas di lokasi tersebut ditarik masuk seolah ditulis langsung di dalam nginx.conf. Ditambah directive worker_processes auto di puncak berkas, yang memerintahkan Nginx menjalankan satu worker process per inti CPU.
Pola Debian membagi konfigurasi situs ke dua folder: sites-available menampung semua berkas konfigurasi, dan sites-enabled berisi tautan simbolik (symlink) ke berkas yang benar-benar aktif. Kita bangun strukturnya:
mkdir -p nginx/sites-available nginx/sites-enabled
printf 'server {\n listen 80;\n}\n' > nginx/sites-available/latihan.example.com
ln -s ../sites-available/latihan.example.com nginx/sites-enabled/latihan.example.com
tree nginxOutput yang Dihasilkan:
nginx
├── sites-available
│ └── latihan.example.com
└── sites-enabled
└── latihan.example.com -> ../sites-available/latihan.example.com
3 directories, 2 filesMari kita bedah baris demi baris:
- Baris 1 (
mkdir -p ...): membuat dua folder inti —sites-availablesebagai gudang konfigurasi,sites-enabledsebagai etalase aktif. - Baris 2 (
printf 'server { ... }' > ...): menulis konfigurasi situs ke gudangnya — berkas hanya tersimpan, belum aktif. - Baris 3 (
ln -s ../sites-available/... sites-enabled/...): membuat symlink yang menunjuk kembali ke berkas di gudang. Karenanginx.confmeng-includesites-enabled/*, keberadaan tautan inilah yang mengaktifkan situs — danrmtautan itu cukup untuk menonaktifkannya tanpa kehilangan berkas aslinya. - Baris 4 (
tree nginx): memetakan hasilnya — tampilan->pada baris terakhir adalah symlink dan targetnya.
Mekanisme symlink ini persis gagasan a2ensite milik Apache yang akan kita jumpai di Chapter Apache HTTP Server
— dua web server besar sama-sama memakai pola gudang-etalase. Situs bawaan bernama default juga hadir sebagai symlink di sites-enabled pada instalasi baru; situs itu menjadi default server penampung permintaan yang tidak cocok dengan server_name mana pun.
Server Block untuk Situs Statis #
Satu situs di Nginx berarti satu server block: kumpulan directive yang menjelaskan di pintu mana ia mendengarkan, nama apa yang dijawab, dan berkas mana yang dilayani. Kita tulis konfigurasi lengkap untuk situs statis latihan.example.com:
mkdir -p nginx/sites-available
cat > nginx/sites-available/latihan.example.com <<'EOF'
server {
listen 80;
server_name latihan.example.com;
root /var/www/latihan;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
EOF
cat nginx/sites-available/latihan.example.comOutput yang Dihasilkan:
server {
listen 80;
server_name latihan.example.com;
root /var/www/latihan;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}Mari kita bedah directive demi directive:
listen 80: server block ini menangani koneksi pada port 80 dari semua interface — konsep binding dari Chapter Server Basics . Bentuklisten 127.0.0.1:80akan membatasinya ke loopback saja.server_name latihan.example.com: nama yang dicocokkan dengan headerHost— mekanisme virtual host yang kita saksikan langsung di Chapter Web Server .root /var/www/latihan: akar dokumen; semua path pada URL diterjemahkan relatif terhadap direktori ini di disk.index index.html: bila klien meminta sebuah direktori, Nginx mencoba berkasindex.htmldi dalamnya.location / { ... }: blok aturan untuk seluruh path — tanda/berarti “semua yang diawali garis miring”.try_files $uri $uri/ =404: urutan percobaan saat permintaan datang — berkas persis dengan nama path ($uri), lalu path sebagai direktori ($uri/), dan bila dua-duanya tidak ada, jawab sendiri kode404.
Enam baris itu sudah merupakan satu situs statis yang lengkap dan siap produksi: taruh berkas di /var/www/latihan, aktifkan dengan symlink di sites-enabled, uji, lalu muat ulang.
Menguji dan Me-reload Konfigurasi #
Setiap selesai mengedit, dua perintah menutup prosedurnya. Pertama, sudo nginx -t menguji seluruh rangkaian konfigurasi — sintaks tiap berkas, directive yang tidak dikenal, hingga tanda kurung yang tidak tertutup. Berikut contoh tampilannya saat lulus:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulKedua, sudo systemctl reload nginx menerapkan perubahan tanpa memutus koneksi yang sedang berjalan: master process membaca konfigurasi baru, melahirkan worker baru, lalu memberi tahu worker lama untuk berhenti setelah menyelesaikan koneksi yang sedang digendongnya. restart berbeda — seluruh proses dibunuh dan dibangkitkan, koneksi aktif terputus — jadi reload adalah pilihan untuk perubahan konfigurasi harian.
Reverse Proxy ke Backend #
Model ketiga dari Chapter Web Server
— reverse proxy — adalah peran asli Nginx di banyak arsitektur. Satu directive proxy_pass cukup untuk meneruskan trafik yang jatuh pada sebuah location ke backend. Praktik yang baik mendahulukan satu langkah: mendefinisikan backend di blok upstream agar namanya bisa dirujuk, mudah diganti, dan kelak bisa ditambah rekan load balancing. Kita tulis konfigurasi untuk subdomain API:
mkdir -p nginx/sites-available
cat > nginx/sites-available/api.latihan.example.com <<'EOF'
upstream backend.example.com {
server 127.0.0.1:8080;
}
server {
listen 80;
server_name api.latihan.example.com;
location /api/ {
proxy_pass http://backend.example.com/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
EOF
cat nginx/sites-available/api.latihan.example.comOutput yang Dihasilkan:
upstream backend.example.com {
server 127.0.0.1:8080;
}
server {
listen 80;
server_name api.latihan.example.com;
location /api/ {
proxy_pass http://backend.example.com/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}Mari kita bedah directive demi directive:
upstream backend.example.com { server 127.0.0.1:8080; }: memberi nama pada backend — aplikasi yang berjalan di loopback port 8080, alamat yang tidak terjangkau dari luar mesin sehingga satu-satunya pintu masuknya adalah Nginx ini. Nama upstream hanyalah label pilihan kita, bukan alamat DNS.server_name api.latihan.example.com: subdomain berbeda pada mesin yang sama — virtual host memisahkan trafik situs utama dan API tanpa IP tambahan.location /api/: hanya permintaan di bawah path/api/yang diteruskan; path lain pada situs ini tetap dilayani sendiri oleh Nginx.proxy_pass http://backend.example.com/: meneruskan permintaan ke backend bernama itu. Garis miring di ujung punya makna penting: bagian yang cocok denganlocation(/api/) diganti dengan/— permintaan/api/penggunatiba di backend sebagai/pengguna. Tanpa garis miring tersebut, path asli diteruskan utuh.proxy_set_header Host $host: nama domain asli yang diminta klien diteruskan ke backend, bukan nama upstream — penting bila backend juga memakai virtual host.proxy_set_header X-Real-IP $remote_addr: dari sudut pandang backend, semua koneksi datang dari loopback; header ini meneruskan IP klien asli agar aplikasi bisa mencatat dan membatasinya.
Dengan tiga konfigurasi ini — peta direktori, situs statis, dan proxy — siklus hidup Nginx kita sudah lengkap. Variasi lanjutannya seperti load balancing antar beberapa backend, buffering, dan timeout dibedah di Chapter Reverse Proxy , sementara jejak semua trafiknya dibaca di Chapter Web Server Logs . Sebelum itu, mari berkenalan dengan sejawat tuanya yang punya cara kerja sama sekali berbeda: Apache HTTP Server, di Chapter Apache HTTP Server .
Referensi lanjut: panduan awal Nginx untuk peta konsepnya, serta dokumentasi ngx_http_proxy_module untuk daftar lengkap directive proxy.