Mengelola layanan web sebagai sysadmin: administrasi Nginx/Apache, reverse proxy, TLS/certificate, dan load balancing, lalu praktik hosting aplikasi web dengan konfigurasi yang aman dan terstruktur.

Di episode 3 kalian pertama kali menyalakan nginx; di episode 13 kalian mengotomasinya dengan Ansible. Episode 16 menyatukan semuanya ke tingkat berikutnya: menjadi admin web server sungguhan — memahami konfigurasi Nginx/Apache, merancang reverse proxy, mengelola sertifikat TLS, dan memuat keseimbangan lalu lintas.
Hampir setiap organisasi menjalankan web server, dan hampir setiap aplikasi modern memakai reverse proxy di depannya. Ini adalah salah satu skill sysadmin yang paling sering dicari di dunia kerja.
Dua server web yang dominan — dengan filosofi berbeda:
| Aspek | Nginx | Apache |
|---|---|---|
| Arsitektur | Event-driven, async | Process-based |
| Konfigurasi | Declarative, blocks | Directive + .htaccess |
| Performa statis | Sangat baik | Baik |
| Dinamik (PHP) | Via FPM | Modul PHP bawaan |
| Kecocokan | Modern, proxy/load balancer | Legacy, hosting bersama |
Keduanya valid. Untuk series ini kita fokus pada Nginx — pilihan dominan 2026 — sambil menyinggung Apache untuk pengenalan.
Nginx memisahkan konfigurasi menjadi blok. Memahami struktur ini adalah fondasi:
user www-data;
worker_processes auto;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
server_tokens off;
server {
listen 80;
server_name app1.example.com;
root /var/www/app1;
}
}Untuk memelihara kebersihan, buat satu file per situs di sites-available/ lalu sites-enabled/:
sudo nano /etc/nginx/sites-available/app1
sudo ln -s /etc/nginx/sites-available/app1 /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginxnginx -t adalah test konfigurasi — wajib dijalankan sebelum reload. Kesalahan sintaks tanpa test membuat kalian men-take-down seluruh situs.
Reverse proxy berdiri di depan aplikasi dan meneruskan permintaan ke aplikasi yang berjalan di port lain. Manfaatnya: aplikasi tidak perlu langsung terekspos internet, TLS ditangani di satu tempat, dan log terpusat.
server {
listen 443 ssl;
server_name app1.example.com;
ssl_certificate /etc/letsencrypt/live/app1.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/app1.example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Aplikasi Node/Go/Python berjalan di port internal (3000), dan Nginx-lah yang tampil ke dunia. Pattern ini dipakai di hampir semua aplikasi modern.
Situs tanpa HTTPS di 2026 bukan sekadar "kurang rapi" — ia tidak dipercaya browser dan memaparkan data mentah. Standar untuk sertifikat adalah Let's Encrypt (gratis, otomatis).
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d app1.example.com
sudo certbot renew --dry-runcertbot --nginx — deteksi konfigurasi Nginx, pasang sertifikat, sesuaikan config.certbot renew --dry-run — uji perpanjangan otomatis (sertifikat berlaku 90 hari).Tip
Sertifikat Let's Encrypt berlaku 90 hari — percayakan perpanjangan ke certbot.timer (systemd), dan uji dengan renew --dry-run secara berkala. Sertifikat yang kedaluwarsa adalah salah satu penyebab "situs mati" paling umum — dan paling mudah dicegah.
Saat satu server tidak cukup, lalu lintas dibagi ke beberapa server backend. Nginx bisa menjadi load balancer dengan konfigurasi sangat sederhana:
upstream backend_app {
least_conn;
server 192.168.56.11:3000;
server 192.168.56.12:3000;
server 192.168.56.13:3000 backup;
}
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://backend_app;
}
}Strategi pembagian: round-robin (default), least_conn (ke backend paling longgar), ip_hash (user tetap di satu backend). Baris backup membuat server ketiga hanya dipakai saat yang lain mati — pola failover.
curl -I http://app.example.com
nginx -s reload
ss -tulpn | grep nginxImportant
Load balancer membagi lalu lintas — tetapi bukan pengganti high availability (episode 22). Jika load balancer sendiri jadi titik gagal, kalian hanya memindahkan masalah. HA memerlukan layer kedua, health check, dan failover otomatis — topik lengkap di episode 22.
nginx -t sebelum reload — satu kesalahan sintaks men-take-down semua situs.Latihan terpadu:
# 1. Jalankan aplikasi di port 3000 (container dari episode 8)
docker run -d -p 127.0.0.1:3000 --name app1 my-app:1.0.0
# 2. Konfigurasi reverse proxy (sites-available/app1)
# 3. Test + reload
sudo nginx -t && sudo systemctl reload nginx
# 4. Pasang TLS
sudo certbot --nginx -d app1.example.com
# 5. Verifikasi akses & header aman
curl -sSI https://app1.example.com
curl -sS http://localhost:3000/healthJika curl -sSI menampilkan HTTP/2 200 dengan sertifikat valid, aplikasi kalian kini dihosting dengan aman dan profesional.
Inti yang harus dibawa pulang dari episode 16:
sites-available/sites-enabled.nginx -t sebelum reload; matikan server_tokens.Di episode 17 selanjutnya kita akan membahas Database Server Administration — administrasi PostgreSQL/MySQL: instalasi, backup, user, dan monitoring, dengan praktik mengelola database server di lab. Database adalah jantung setiap aplikasi — mengelolanya dengan benar adalah skill yang sangat bernilai!