Nginx bukan hanya web server cepat dan hemat resource, tetapi juga menjadi lapisan pertahanan pertama bagi website.
Mengamankan Nginx meliputi konfigurasi SSL/TLS, proteksi dari traffic berlebihan, dan mitigasi serangan DDoS. Artikel ini membahas praktik terbaik untuk membuat website aman, cepat, dan tahan terhadap serangan.
Contents
- 1 1. SSL/TLS: Mengamankan Data Transit
- 2 2. Rate Limiting: Mengontrol Traffic Berlebihan
- 3 3. DDoS Protection: Menghadang Serangan Traffic Tinggi
- 4 4. Header & Security Hardening
- 5 5. Load Balancing + Security
- 6 6. Monitoring & Alerting
- 7 7. Best Practices Nginx Security
- 8 8. Studi Kasus
- 9 Kesimpulan
- 10 Related Posts
1. SSL/TLS: Mengamankan Data Transit
SSL/TLS memastikan data antara client dan server terenkripsi, mencegah pencurian informasi sensitif.
1.1 Konfigurasi SSL di Nginx
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/nginx/certs/example.crt;
ssl_certificate_key /etc/nginx/certs/example.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'HIGH:!aNULL:!MD5';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
1.2 Best Practices SSL
- Gunakan TLSv1.2/1.3 → protokol modern dan aman
- Strong ciphers → hindari RC4, MD5, DES
- HTTP/2 → multiplexing untuk performa lebih baik
- OCSP stapling → mempercepat handshake SSL
- Redirect HTTP ke HTTPS untuk semua request
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
2. Rate Limiting: Mengontrol Traffic Berlebihan
Rate limiting mencegah abuse, brute-force, atau spam. Nginx dapat membatasi request per IP address.
2.1 Konfigurasi Rate Limiting
# Define zone
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
server {
location /login {
limit_req zone=one burst=20 nodelay;
proxy_pass http://backend;
}
}
Penjelasan:
10r/s→ 10 request per detik per IPburst=20→ toleransi spike 20 requestnodelay→ request ekstra langsung ditolak, tidak ditunda
2.2 Use Cases
- Halaman login → mencegah brute-force password
- API endpoint → mencegah abuse dan scraping
- Form submission → mengurangi spam
3. DDoS Protection: Menghadang Serangan Traffic Tinggi
DDoS (Distributed Denial of Service) menyerang server dengan traffic berlebihan. Nginx bisa mengurangi dampak serangan.
3.1 Connection Limiting
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
location / {
limit_conn addr 10; # Max 10 concurrent connections per IP
proxy_pass http://backend;
}
}
- Membatasi jumlah koneksi simultan per IP, mencegah satu attacker menghabiskan resource server.
3.2 Request Throttling
- Gabungkan rate limiting dengan burst handling untuk mencegah spike traffic.
- Tambahkan cache micro atau proxy cache untuk mengurangi load backend.
3.3 Fail2Ban Integration
- Monitoring log Nginx untuk IP yang mencurigakan
- Memblokir IP otomatis jika melanggar rate limit atau mencoba brute-force
- Contoh: memblokir IP yang gagal login >5 kali dalam 10 menit
4. Header & Security Hardening
4.1 HTTP Security Headers
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy no-referrer-when-downgrade;
- Mencegah clickjacking, XSS, dan sniffing.
4.2 Hide Nginx Version
server_tokens off;
- Tidak menampilkan versi Nginx → mengurangi risiko exploit targeting versi lama.
4.3 Buffer & Body Limits
- Batasi request body untuk mencegah buffer overflow / upload berlebihan
client_max_body_size 10M;
client_body_buffer_size 16k;
5. Load Balancing + Security
- Nginx dapat dikombinasikan load balancing dengan proteksi DDoS:
- Reverse proxy + cache layer + SSL termination + rate limiting
- Backend tetap aman dan stabil walau terjadi serangan traffic tinggi
upstream backend {
server backend1.example.com max_fails=3 fail_timeout=30s;
server backend2.example.com max_fails=3 fail_timeout=30s;
}
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/nginx/certs/example.crt;
ssl_certificate_key /etc/nginx/certs/example.key;
limit_req zone=one burst=20 nodelay;
limit_conn addr 10;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
6. Monitoring & Alerting
6.1 Metrics Penting
- Request per detik (RPS)
- Latency & response time
- Rate limit hits
- Error 4xx/5xx
- Worker CPU & memory
6.2 Tools
- Prometheus + Grafana → visualize metrics, set alert
- Fail2Ban → blokir IP mencurigakan otomatis
- Cloudflare / CDN → tambahan proteksi DDoS layer 7
7. Best Practices Nginx Security
- SSL/TLS modern: TLSv1.2/1.3, strong ciphers, HTTP/2
- Force HTTPS: redirect HTTP → HTTPS
- Rate limiting: untuk login, API, form submission
- Connection limiting: batasi concurrent connections per IP
- DDoS mitigation: combine rate limiting + fail2ban + CDN
- Security headers: X-Frame-Options, X-XSS-Protection, etc.
- Hide version:
server_tokens off - Limit body size & buffers
- Monitoring & alerting: RPS, error, CPU, memory, hits
8. Studi Kasus
Website e-commerce dengan 50k concurrent user:
- SSL termination di Nginx → backend HTTP → CPU backend turun 40%
- Rate limiting login form → mencegah brute-force password
- Limit connection per IP → mengurangi efek DDoS ringan
- Reverse proxy + microcaching → homepage response time <200ms
Hasil: website tetap stabil dan aman walau traffic meningkat drastis.
Kesimpulan
Mengamankan Nginx meliputi tiga aspek utama:
- SSL/TLS → data terenkripsi, protokol aman, HTTP/2 untuk performa
- Rate Limiting → mencegah abuse, brute-force, spam
- DDoS Protection → limit connection, microcaching, monitoring
Dengan kombinasi ini, website production tetap cepat, aman, dan scalable tanpa menambah biaya server secara signifikan.