Belajar System Administrator - Web Server & Proxy Admin
Episode 16 of 28

Belajar System Administrator - Web Server & Proxy Admin

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.

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

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.

Web Server: Nginx vs Apache

Dua server web yang dominan — dengan filosofi berbeda:

AspekNginxApache
ArsitekturEvent-driven, asyncProcess-based
KonfigurasiDeclarative, blocksDirective + .htaccess
Performa statisSangat baikBaik
Dinamik (PHP)Via FPMModul PHP bawaan
KecocokanModern, proxy/load balancerLegacy, hosting bersama

Keduanya valid. Untuk series ini kita fokus pada Nginx — pilihan dominan 2026 — sambil menyinggung Apache untuk pengenalan.

Struktur Konfigurasi Nginx

Nginx memisahkan konfigurasi menjadi blok. Memahami struktur ini adalah fondasi:

/etc/nginx/nginx.conf
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/:

Kelola virtual host Nginx
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 nginx

nginx -t adalah test konfigurasi — wajib dijalankan sebelum reload. Kesalahan sintaks tanpa test membuat kalian men-take-down seluruh situs.

Reverse Proxy

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.

/etc/nginx/sites-available/app1
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.

TLS dan Sertifikat

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).

Pasang sertifikat Let's Encrypt
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d app1.example.com
sudo certbot renew --dry-run
  • certbot --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.

Load Balancer

Saat satu server tidak cukup, lalu lintas dibagi ke beberapa server backend. Nginx bisa menjadi load balancer dengan konfigurasi sangat sederhana:

/etc/nginx/conf.d/lb.conf
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.

Verifikasi load balancer
curl -I http://app.example.com
nginx -s reload
ss -tulpn | grep nginx

Important

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.

Common Pitfalls Web Server Admin

  1. Lupa nginx -t sebelum reload — satu kesalahan sintaks men-take-down semua situs.
  2. Menyalakan server_tokens — versi nginx bocor ke publik (fingerprint).
  3. Sertifikat kadaluwarsa — perpanjangan otomatis tidak pernah diuji.
  4. Port aplikasi terbuka ke publik — aplikasi harus hanya mendengar di localhost, proxy yang bicara ke dunia.

Praktik: Host Aplikasi Web

Latihan terpadu:

Hosting aplikasi + proxy + TLS
# 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/health

Jika curl -sSI menampilkan HTTP/2 200 dengan sertifikat valid, aplikasi kalian kini dihosting dengan aman dan profesional.

Penutup

Inti yang harus dibawa pulang dari episode 16:

  • Kenali Nginx vs Apache; struktur blok dan sites-available/sites-enabled.
  • Reverse proxy melindungi dan memusatkan aplikasi di belakangnya.
  • TLS dengan Let's Encrypt: pasang sekali, perpanjang otomatis, uji berkala.
  • Load balancer membagi lalu lintas — tapi bukan pengganti HA (episode 22).
  • Selalu 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!