Modul Pihak Ketiga #
Ekosistem modul pihak ketiga Nginx sangat kaya. Ada ratusan modul yang dikembangkan komunitas untuk berbagai keperluan. Section ini membahas yang paling sering digunakan dan memberikan nilai nyata di production.
ngx_brotli: Kompresi Brotli #
Brotli adalah algoritma kompresi Google yang menghasilkan ukuran file 15-25% lebih kecil dari gzip untuk konten web. Semua browser modern mendukungnya.
# Instalasi di Ubuntu dengan paket yang tersedia
sudo apt install libnginx-mod-http-brotli -y # Tersedia di beberapa distro
# Atau kompilasi sebagai dynamic module (lihat bagian kompilasi di bawah)
# Di /etc/nginx/nginx.conf
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;
http {
brotli on;
brotli_comp_level 6;
brotli_static on; # Sajikan file .br yang sudah ada
brotli_types
text/html
text/css
application/javascript
application/json
image/svg+xml;
# Bisa berjalan bersamaan dengan gzip
# Browser modern akan memilih brotli (lebih baik)
gzip on;
gzip_types text/html text/css application/javascript;
}
headers-more-nginx-module: Kontrol Header Penuh #
Modul bawaan Nginx hanya bisa menambah (add_header) atau menyembunyikan (proxy_hide_header) header. headers-more memungkinkan mengganti, menghapus, atau menset header dengan lebih fleksibel:
sudo apt install libnginx-mod-http-headers-more-filter -y
load_module modules/ngx_http_headers_more_filter_module.so;
http {
# Ubah header Server (default: "nginx" atau "nginx/1.x.x")
more_set_headers "Server: myapp";
server {
# Hapus header yang mengekspos teknologi backend
more_clear_headers "X-Powered-By";
more_clear_headers "X-AspNet-Version";
# Set header hanya untuk response tertentu
location /api/ {
more_set_headers "Access-Control-Allow-Origin: *";
more_set_headers "Access-Control-Allow-Methods: GET, POST, OPTIONS";
}
# Ganti header yang sudah ada (bukan tambah)
more_set_headers -t "text/html" "Cache-Control: no-store";
}
}
more_set_headers mengganti header yang sudah ada jika namanya sama, sedangkan add_header bawaan Nginx menambahkan header baru tanpa menghapus yang lama — yang bisa menghasilkan header duplikat.
nginx-module-vts: Monitoring Traffic per Virtual Host #
Virtual Host Traffic Status memberikan metrics yang jauh lebih detail dari stub_status — per virtual host, per upstream server, per zone cache:
# Kompilasi atau gunakan paket yang tersedia di beberapa distro
# Tersedia juga sebagai dynamic module di beberapa distribusi Nginx
http {
vhost_traffic_status_zone;
server {
# Dashboard monitoring
location /status {
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
allow 10.0.0.0/8;
deny all;
}
}
}
Dashboard menampilkan: requests per second, bytes per second, response time rata-rata, dan status code breakdown — semua per server name dan per upstream. Format JSON juga tersedia untuk integrasi dengan Prometheus atau Grafana.
ModSecurity: Web Application Firewall #
ModSecurity adalah WAF (Web Application Firewall) yang bisa diintegrasikan ke Nginx untuk memfilter serangan web umum (SQL injection, XSS, path traversal, dll.) berdasarkan rule set OWASP Core Rule Set:
# Install connector ModSecurity untuk Nginx
sudo apt install libmodsecurity3 libnginx-mod-security2 -y
load_module modules/ngx_http_modsecurity_module.so;
http {
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
server {
location / {
proxy_pass http://backend;
}
}
}
# /etc/nginx/modsec/main.conf
Include /etc/nginx/modsec/modsecurity.conf
Include /usr/share/modsecurity-crs/crs-setup.conf
Include /usr/share/modsecurity-crs/rules/*.conf
ModSecurity bisa berjalan dalam dua mode: DetectionOnly (log tapi tidak blokir — bagus untuk audit awal) dan On (blokir request yang melanggar rule). Mulai dengan DetectionOnly, evaluasi false positive, lalu switch ke enforcement mode.
ngx_http_geoip2_module: Geolocation #
Memungkinkan keputusan routing atau pembatasan akses berdasarkan negara/kota, menggunakan database MaxMind GeoLite2:
sudo apt install libnginx-mod-http-geoip2 mmdb-bin -y
# Download database gratis (butuh akun MaxMind)
# https://dev.maxmind.com/geoip/geolite2-free-geolocation-data
load_module modules/ngx_http_geoip2_module.so;
http {
geoip2 /etc/nginx/geoip/GeoLite2-Country.mmdb {
$geoip2_country_code country iso_code;
}
geoip2 /etc/nginx/geoip/GeoLite2-City.mmdb {
$geoip2_city city names en;
}
server {
# Blokir akses dari negara tertentu
map $geoip2_country_code $allowed_country {
default 1;
CN 0; # Blokir Tiongkok
RU 0; # Blokir Rusia
}
location / {
if ($allowed_country = 0) {
return 403;
}
# Teruskan info negara ke backend
proxy_set_header X-Country-Code $geoip2_country_code;
proxy_set_header X-City $geoip2_city;
proxy_pass http://backend;
}
}
}
Mengkompilasi Modul dari Source #
Jika modul tidak tersedia sebagai paket binary, kamu perlu mengkompilasi sendiri:
# 1. Cek versi Nginx yang sedang berjalan
nginx -v
# nginx version: nginx/1.24.0
# 2. Download source Nginx versi yang sama
wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar xzf nginx-1.24.0.tar.gz
# 3. Download source modul yang ingin dikompilasi
git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli && git submodule update --init
# 4. Kompilasi sebagai dynamic module
cd nginx-1.24.0
./configure \
--with-compat \ # Penting: kompatibel dengan binary Nginx yang ada
--add-dynamic-module=../ngx_brotli
make modules
# 5. Copy .so ke direktori module Nginx
sudo cp objs/ngx_http_brotli_filter_module.so /etc/nginx/modules/
sudo cp objs/ngx_http_brotli_static_module.so /etc/nginx/modules/
# 6. Load module di nginx.conf
echo 'load_module modules/ngx_http_brotli_filter_module.so;' | \
sudo tee -a /etc/nginx/nginx.conf
Ringkasan #
- ngx_brotli memberikan kompresi 15-25% lebih baik dari gzip — bisa berjalan bersamaan dengan gzip, browser pilih yang terbaik.
- headers-more lebih powerful dari
add_headerbawaan — bisa mengganti header yang sudah ada dan menghapus header backend yang mengekspos info sensitif.- ModSecurity + OWASP CRS menyediakan proteksi WAF untuk serangan web umum — mulai dengan mode DetectionOnly untuk evaluasi false positive.
- GeoIP2 memungkinkan routing dan pembatasan akses berdasarkan negara — butuh database MaxMind yang diperbarui secara berkala.
- Saat mengkompilasi modul dari source, selalu gunakan
--with-compatdan source Nginx dengan versi yang persis sama dengan yang berjalan.
← Sebelumnya: Lua dan OpenResty Berikutnya: Dynamic Module →