Instalasi Nginx di Ubuntu / Debian #
Ubuntu dan Debian merupakan dua distribusi Linux yang paling populer digunakan di lingkungan server, baik untuk hosting web tradisional maupun arsitektur microservices modern di cloud. Kedua distribusi ini menggunakan sistem manajemen paket yang sama, yaitu Advanced Package Tool (apt), yang membuat proses instalasi perangkat lunak menjadi sangat terstruktur.
Saat kita ingin memasang Nginx pada sistem berbasis Ubuntu atau Debian, kita dihadapkan pada dua jalur repositori utama: menggunakan repositori bawaan distribusi (distro repository) atau menggunakan repositori resmi yang dikelola langsung oleh tim pengembang Nginx (Nginx.org repository). Kedua opsi ini memiliki konsekuensi runtime dan siklus pemeliharaan yang berbeda. Artikel ini akan membahas kedua cara tersebut secara mendalam, memandu kita melakukan konfigurasi prioritas paket (apt pinning), mengelola layanan dengan pemahaman sinyal kernel, serta mengamankan server menggunakan firewall bawaan.
Memilih Repositori: Bawaan Distro vs Resmi Nginx #
Sebelum kita menjalankan perintah instalasi, kita harus memahami perbedaan mendasar antara kedua sumber paket ini. Pilihan ini akan memengaruhi versi fitur Nginx yang kita miliki dan bagaimana kita menerima pembaruan di masa mendatang.
Repositori Bawaan Distribusi (Distro Repo) #
Repositori bawaan Ubuntu dan Debian memprioritaskan stabilitas sistem operasi secara keseluruhan. Paket Nginx yang disediakan di sini telah diuji secara ketat agar kompatibel dengan library sistem yang lain.
- Karakteristik Versi: Paket ini biasanya menggunakan versi legacy stable yang sudah cukup berumur. Sebagai contoh, Ubuntu 22.04 LTS secara default menyediakan Nginx versi 1.18.0, padahal versi stabil resmi Nginx sudah jauh melampaui versi tersebut.
- Pemeliharaan: Pembaruan yang diberikan oleh tim keamanan distro umumnya berupa backporting (hanya menambal celah keamanan tanpa menaikkan nomor versi minor atau mayor).
- Kasus Penggunaan: Sangat cocok jika kita tidak membutuhkan fitur-fitur protokol web modern (seperti HTTP/3 atau QUIC) dan memprioritaskan server yang tidak memerlukan konfigurasi tambahan apa pun setelah instalasi.
Repositori Resmi Nginx (Nginx.org) #
Repositori ini dipelihara langsung oleh pengembang Nginx. Di sini, kita diberikan akses ke dua cabang rilis: Stable (fokus pada stabilitas dengan perbaikan bug penting) dan Mainline (dilengkapi dengan fitur-fitur performa terbaru).
- Karakteristik Versi: Menyediakan versi terbaru secara instan (misalnya 1.24.x atau 1.26.x ke atas), lengkap dengan dukungan penuh untuk HTTP/2, HTTP/3, dan algoritma enkripsi TLS terkini.
- Pemeliharaan: Pembaruan dirilis langsung begitu kode sumber hulu (upstream) dinyatakan stabil.
- Kasus Penggunaan: Sangat direkomendasikan untuk infrastruktur produksi bertrafik tinggi, server CDN, API Gateway, atau proyek apa pun yang ingin memaksimalkan efisiensi protokol web modern.
Berikut adalah alur keputusan konfigurasi repositori sebelum kita mulai menuliskan perintah di terminal:
flowchart LR
Start["Pilih Repositori"] --> CheckFitur{"Apakah kita butuh HTTP/3 <br> atau fitur TLS terbaru?"}
CheckFitur -->|"Tidak"| Distro["Gunakan Repositori Bawaan OS <br> (apt install nginx)"]
CheckFitur -->|"Ya"| NginxOrg["Gunakan Repositori Nginx.org <br> (Butuh GPG Key & Pinning)"]
NginxOrg --> ChooseBranch{"Pilih Cabang Rilis"}
ChooseBranch -->|"Stabil & Minim Risiko"| StableBranch["Cabang Stable <br> (Direkomendasikan untuk Production)"]
ChooseBranch -->|"Fitur Eksperimental / Baru"| MainlineBranch["Cabang Mainline <br> (Fitur Terkini)"]
style Distro stroke:#f57c00,stroke-width:2px
style StableBranch stroke:#388e3c,stroke-width:2px
style MainlineBranch stroke:#0288d1,stroke-width:2pxMetode 1: Instalasi dari Repositori Bawaan Distribusi #
Jika kita memilih stabilitas bawaan distro dan ingin setup cepat, kita bisa langsung menggunakan repositori bawaan OS. Di Debian dan Ubuntu, proses ini sangatlah mudah karena paket Nginx sudah terindeks secara default.
Kita dapat menginstalnya dengan menjalankan rangkaian perintah berikut:
# Perbarui indeks paket lokal untuk memastikan kita mendapat versi terbaru yang diindeks OS
sudo apt update
# Pasang paket Nginx beserta seluruh dependensinya
sudo apt install nginx -y
Setelah proses instalasi selesai, sistem operasi Ubuntu umumnya akan langsung menjalankan Nginx di latar belakang secara otomatis sebagai service systemd. Kita dapat melakukan verifikasi cepat untuk memeriksa versi Nginx yang terpasang:
# Periksa versi Nginx yang terinstal
nginx -v
# Output contoh di Ubuntu 22.04:
# nginx version: nginx/1.18.0 (Ubuntu)
Metode 2: Instalasi dari Repositori Resmi Nginx.org #
Untuk mendapatkan versi stabil terbaru langsung dari hulu, kita perlu menambahkan repositori resmi Nginx ke dalam sistem manajemen paket apt kita. Proses ini memerlukan beberapa langkah keamanan untuk memastikan paket yang kita unduh benar-benar ditandatangani secara sah oleh pengembang Nginx dan tidak dimodifikasi oleh pihak ketiga.
Langkah 1: Memasang Dependensi Awal #
Kita memerlukan beberapa peralatan bantu sistem untuk mengamankan proses transfer kunci kriptografi dan mendeteksi kode nama distribusi kita secara otomatis.
sudo apt update
sudo apt install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring
Langkah 2: Mengimpor GPG Signing Key Resmi Nginx #
Apt menggunakan sistem tanda tangan digital GNU Privacy Guard (GPG) untuk memverifikasi integritas paket. Kita harus mengunduh kunci publik resmi Nginx dan menyimpannya ke dalam keyring sistem kita:
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Setelah kunci diunduh, kita harus memverifikasi bahwa sidik jari (fingerprint) kunci publik tersebut cocok dengan kunci resmi yang dipublikasikan oleh Nginx. Hal ini penting untuk mencegah serangan Man-in-the-Middle:
gpg --dry-run --quiet --no-keyring \
--import --import-options import-show \
/usr/share/keyrings/nginx-archive-keyring.gpg
Periksa baris output sidik jari yang muncul di terminal kita. Pastikan sidik jari tersebut sama persis dengan kode berikut:
573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62
Jika sidik jari tidak cocok, hapus berkas keyring tersebut dan jangan lanjutkan instalasi.
Langkah 3: Menambahkan Sumber Repositori #
Setelah kunci diverifikasi, kita dapat menambahkan baris repositori resmi ke dalam berkas konfigurasi sumber apt kita. Perintah di bawah ini menggunakan perintah lsb_release -cs secara dinamis untuk mendeteksi versi Ubuntu atau Debian kita (misalnya jammy, focal, atau bookworm):
# Untuk Ubuntu (menggunakan cabang Stable):
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/ubuntu $(lsb_release -cs) nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
# Catatan untuk pengguna Debian, ganti link di atas menjadi:
# http://nginx.org/packages/debian $(lsb_release -cs) nginx
[!TIP] Jika kita ingin menggunakan cabang Mainline untuk mendapatkan fitur eksperimental terupdate, ubah URL repositori menjadi
http://nginx.org/packages/mainline/ubuntuatauhttp://nginx.org/packages/mainline/debian.
Langkah 4: Mengonfigurasi Preferensi APT (Apt Pinning) #
Langkah ini sangat krusial namun sering terlewatkan. Jika kita tidak mengatur preferensi prioritas paket (pinning), sistem operasi mungkin akan tetap memilih paket Nginx dari repositori bawaan distro saat kita melakukan pembaruan sistem (apt upgrade), karena paket distro sering kali memiliki struktur penamaan paket rilis OS yang dianggap lebih prioritas.
Kita harus menginstruksikan apt untuk memprioritaskan paket yang berasal dari nginx.org dengan membuat berkas konfigurasi preferensi:
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
| sudo tee /etc/apt/preferences.d/99nginx
Dengan prioritas bernilai 900, paket dari repositori resmi Nginx akan selalu diutamakan daripada paket bawaan distribusi yang biasanya memiliki prioritas default 500.
Langkah 5: Memasang Nginx Versi Terbaru #
Sekarang kita dapat memperbarui indeks lokal dan melakukan instalasi Nginx versi terbaru:
sudo apt update
sudo apt install nginx -y
Mari kita lakukan verifikasi untuk memastikan versi yang terpasang adalah versi terbaru:
nginx -v
# Output seharusnya menampilkan versi stable terbaru dari hulu:
# nginx version: nginx/1.26.1
Manajemen Layanan (Service Management) via Systemd #
Di Ubuntu dan Debian modern, layanan latar belakang dikelola oleh manajer sistem systemd. Nginx dipasang sebagai service unit bernama nginx.service. Kita dapat mengelola siklus hidup proses Nginx menggunakan perintah systemctl.
Perintah Dasar Manajemen Service #
Berikut adalah daftar perintah administrasi harian yang wajib kita ketahui:
# Memeriksa status keaktifan proses Nginx
sudo systemctl status nginx
# Menjalankan layanan Nginx
sudo systemctl start nginx
# Menghentikan layanan Nginx
sudo systemctl stop nginx
# Mengaktifkan autostart saat server melakukan booting/reboot
sudo systemctl enable nginx
# Menonaktifkan autostart saat booting
sudo systemctl disable nginx
Memahami Perbedaan restart vs reload (Tinjauan Sinyal OS) #
Banyak administrator web pemula menyamakan perintah restart dengan reload. Padahal, di level sistem operasi, keduanya memicu mekanisme kernel yang sangat berbeda:
flowchart TD
subgraph RestartAction ["systemctl restart nginx (Downtime)"]
direction TB
CmdRest["Kirim sinyal SIGTERM / SIGKILL"] --> StopProc["Seluruh proses Master & Worker dimatikan seketika"]
StopProc --> CloseSock["Socket TCP port 80/443 ditutup mendadak"]
CloseSock --> StartNew["Master Process baru dibuat, parse config, buka socket"]
StartNew --> DoneRest["Koneksi aktif klien terputus mendadak"]
end
subgraph ReloadAction ["systemctl reload nginx (Zero Downtime)"]
direction TB
CmdRel["Kirim sinyal SIGHUP (1) ke Master"] --> ParseNew["Master membaca & memvalidasi konfigurasi baru"]
ParseNew --> SpawnNew["Master spawn Worker baru dengan config baru"]
SpawnNew --> SignalOld["Master kirim sinyal SIGQUIT ke Worker lama"]
SignalOld --> GracefulOld["Worker lama selesaikan request aktif lalu mati mandiri"]
GracefulOld --> DoneRel["Koneksi klien tetap terlayani tanpa jeda"]
end
style RestartAction stroke:#d32f2f,stroke-width:1.5px
style ReloadAction stroke:#388e3c,stroke-width:1.5pxsystemctl restart nginx: Perintah ini mengirimkan sinyalSIGTERM(atauSIGKILLjika tidak merespons dalam waktu tertentu) ke master process. Hal ini mematikan seluruh proses Nginx seketika, menutup port TCP 80/443, dan memutuskan koneksi klien yang sedang mengunduh data secara paksa. Setelah itu, proses baru dijalankan dari nol. Ini memicu downtime singkat.systemctl reload nginx(ataunginx -s reload): Perintah ini mengirimkan sinyalSIGHUP(sinyal hangup nomor 1) ke master process Nginx. Master process akan membaca dan memvalidasi konfigurasi baru. Jika valid, ia akan melahirkan (spawn) proses worker baru yang langsung menangani koneksi masuk menggunakan konfigurasi baru. Secara bersamaan, master mengirimkan sinyalSIGQUITke worker lama, memerintahkan mereka masuk ke mode graceful shutdown (menyelesaikan transaksi klien yang sedang berjalan sebelum mati secara damai). Ini menjamin zero-downtime.
[!WARNING] Jangan pernah menjalankan
reloadataurestarttanpa menguji konfigurasi kita terlebih dahulu menggunakan perintahsudo nginx -t. Jika terdapat kesalahan sintaksis pada konfigurasi baru, dan kita langsung melakukanreload, master process Nginx memang akan menolak konfigurasi tersebut dan tetap berjalan dengan konfigurasi lama, namun di beberapa kasus kegagalan kritis (seperti kesalahan alokasi memori bersama atau sertifikat SSL yang hilang), proses Nginx bisa mati mendadak dan melumpuhkan situs web kita.
Biasakan untuk selalu menjalankan rangkaian perintah berikut saat menerapkan konfigurasi baru:
# Uji konfigurasi kita terlebih dahulu
sudo nginx -t
# Jika output menunjukkan "syntax is ok" dan "test is successful", lakukan reload
sudo nginx -s reload
Struktur Direktori dan Konvensi File #
Setelah Nginx terpasang di sistem Ubuntu/Debian kita, kita harus memahami struktur direktori default agar tidak kebingungan saat menaruh file konfigurasi atau file web statis kita.
1. Direktori Konfigurasi /etc/nginx/
#
Ini adalah pusat dari seluruh konfigurasi Nginx kita.
nginx.conf: Berkas konfigurasi global utama. File ini mengatur jumlah worker process, lokasi user sistem, format logging global, dan meng-include file konfigurasi dari sub-direktori lainnya.conf.d/: Direktori default untuk meletakkan berkas konfigurasi Virtual Host atau blok server kita. Semua berkas berakhiran.confdi folder ini akan otomatis dimuat oleh Nginx.sites-available/dansites-enabled/: Konvensi penataan konfigurasi warisan sistem kemasan Debian/Ubuntu. Konfigurasinya ditaruh disites-available/, lalu diaktifkan dengan membuat tautan simbolis (symbolic link) kesites-enabled/menggunakan perintahln -s.- Perbedaan Penting: Repositori resmi Nginx.org tidak menggunakan struktur ganda ini secara default demi efisiensi dan menyederhanakan konfigurasi langsung di dalam
conf.d/. Kita disarankan menggunakan direktoriconf.d/agar konfigurasi kita portabel di berbagai distribusi Linux.
- Perbedaan Penting: Repositori resmi Nginx.org tidak menggunakan struktur ganda ini secara default demi efisiensi dan menyederhanakan konfigurasi langsung di dalam
mime.types: Berkas yang memetakan ekstensi file (seperti.html,.css,.js,.png) ke tipe MIME HTTP yang sesuai agar browser klien dapat merender halaman dengan benar.
2. Direktori Berkas Log /var/log/nginx/
#
Nginx menuliskan seluruh catatannya di direktori ini:
access.log: Menyimpan riwayat setiap request HTTP yang masuk ke server kita (IP klien, URL yang diminta, kode status HTTP, agen browser, dll.).error.log: Menyimpan log kesalahan tingkat sistem, warning ssl, dan kegagalan koneksi proxy backend. Berkas ini adalah tempat pertama yang harus kita periksa saat melakukan troubleshooting.
3. Direktori Web Root /var/www/html/
#
Pada instalasi Ubuntu/Debian default, direktori ini berisi berkas HTML default Nginx. Ketika kita mengakses IP server di browser untuk pertama kali, berkas index.html di dalam direktori ini yang akan disajikan ke layar klien.
Membuka Akses Port Melalui UFW Firewall #
Sistem operasi Ubuntu menyertakan alat bantu manajemen firewall yang ramah pengguna bernama Uncomplicated Firewall (ufw). Secara default, setelah kita mengaktifkan UFW, semua port masuk (incoming ports) akan ditutup kecuali port yang kita izinkan secara eksplisit (seperti port SSH 22).
Jika kita ingin Nginx dapat diakses dari internet, kita harus membuka port HTTP (80) dan HTTPS (443). Nginx secara otomatis mendaftarkan profil aplikasi ke dalam sistem UFW saat terpasang.
Kita dapat memeriksa profil aplikasi Nginx yang terdaftar menggunakan perintah:
sudo ufw app list
# Output contoh:
# Available applications:
# Nginx Full (Membuka port 80 + 443)
# Nginx HTTP (Membuka port 80 saja)
# Nginx HTTPS (Membuka port 443 saja)
# OpenSSH
Untuk mengizinkan lalu lintas data web masuk, kita disarankan memilih profil Nginx Full agar server siap melayani trafik HTTP biasa maupun trafik terenkripsi HTTPS:
# Izinkan profil Nginx Full melalui firewall
sudo ufw allow 'Nginx Full'
# Periksa status firewall untuk memastikan aturan baru aktif
sudo ufw status
# Output contoh:
# Status: active
# To Action From
# -- ------ ----
# OpenSSH ALLOW Anywhere
# Nginx Full ALLOW Anywhere
Verifikasi Akhir Instalasi #
Untuk memastikan Nginx telah terpasang dengan sempurna, berjalan aktif, dan mendengarkan trafik jaringan di port yang tepat, lakukan tiga langkah verifikasi berikut:
1. Memeriksa Soket Listening Jaringan #
Kita dapat memeriksa proses apa yang sedang mendengarkan (listening) di port 80 menggunakan perintah ss:
sudo ss -tlnp | grep nginx
# Output seharusnya menunjukkan proses master Nginx mengikat port 80 (*:80 atau 0.0.0.0:80):
# LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1234,fd=6))
2. Menguji Respons HTTP Header #
Uji respons server Nginx secara lokal menggunakan utilitas curl untuk meminta headernya saja:
curl -I http://localhost
# Output contoh:
# HTTP/1.1 200 OK
# Server: nginx/1.26.1
# Content-Type: text/html
# ...
3. Memeriksa Proses Sistem #
Pastikan proses master berjalan sebagai root dan proses worker berjalan sebagai user non-privileged (misalnya user nginx atau www-data):
ps aux | grep nginx
# Output contoh:
# root 1234 0.0 0.1 40232 3120 ? Ss 12:00 0:00 nginx: master process /usr/sbin/nginx
# nginx 1235 0.0 0.2 40680 5210 ? S 12:00 0:00 nginx: worker process
# nginx 1236 0.0 0.2 40680 5210 ? S 12:00 0:00 nginx: worker process
Ringkasan #
- Repository Resmi Nginx (
nginx.org) memberikan versi stable upstream terbaru yang siap untuk implementasi protokol HTTP/3, sedangkan Repository Distro menyediakan kestabilan versi lawas.- Gunakan prioritas pinning (900) di
/etc/apt/preferences.d/99nginxuntuk mencegah repositori default menimpa paket resmi Nginx kita.systemctl reloadmengirim sinyal HUP (1) untuk pembaruan konfigurasi tanpa memutus koneksi klien (zero-downtime), sedangkanrestartmengirim sinyal TERM (15) yang memaksa seluruh proses mati seketika.- Selalu jalankan
nginx -tsebelum melakukan reload untuk menghindari downtime akibat kesalahan penulisan sintaksis konfigurasi.- Buka akses UFW firewall dengan profil
Nginx Fulluntuk membuka port 80 (HTTP) dan port 443 (HTTPS) secara bersamaan.