Struktur File Konfigurasi Nginx #
Semua konfigurasi Nginx dimulai dari satu file: nginx.conf. File ini adalah entry point yang dibaca Nginx saat pertama kali dijalankan atau saat menerima signal reload. Tapi dalam praktiknya, jarang ada yang menulis semua konfigurasi dalam satu file — Nginx menyediakan mekanisme include yang memungkinkan konfigurasi dipecah menjadi file-file yang lebih kecil dan terorganisir.
nginx.conf: Entry Point #
File nginx.conf biasanya ada di /etc/nginx/nginx.conf. Ini adalah tampilan tipikal file tersebut setelah instalasi bersih:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
}
Beberapa hal yang perlu diperhatikan:
Baris include /etc/nginx/conf.d/*.conf — ini yang menghubungkan nginx.conf ke file-file konfigurasi virtual host di direktori conf.d. Semua file dengan ekstensi .conf di direktori itu akan di-include secara otomatis.
Tidak ada server block di sini — nginx.conf hanya mendefinisikan konfigurasi global. Konfigurasi per-site diletakkan di file terpisah.
Sistem Include #
include adalah cara Nginx memecah konfigurasi menjadi beberapa file. Sintaksnya sederhana:
# Include satu file spesifik
include /etc/nginx/mime.types;
# Include semua file .conf dalam sebuah direktori
include /etc/nginx/conf.d/*.conf;
# Include menggunakan path relatif (relatif terhadap nginx.conf)
include sites-enabled/*;
Include bisa digunakan di mana saja dalam konfigurasi, tidak hanya di level atas. Ini memungkinkan kamu membuat “snippets” — potongan konfigurasi yang sering digunakan dan bisa di-include di beberapa tempat:
# /etc/nginx/snippets/ssl-params.conf
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
# Digunakan di banyak server block:
server {
listen 443 ssl;
include snippets/ssl-params.conf;
# ...
}
conf.d vs sites-available/sites-enabled #
Ada dua konvensi yang sering ditemui, dan ini kadang membingungkan:
Konvensi conf.d/ — digunakan oleh instalasi dari repository resmi Nginx. Semua file .conf di direktori ini langsung aktif. Ini yang akan kita gunakan di buku ini karena lebih sederhana.
Konvensi sites-available/ + sites-enabled/ — konvensi Debian/Ubuntu. Virtual host disimpan di sites-available/, lalu diaktifkan dengan membuat symlink ke sites-enabled/:
# Membuat virtual host baru (konvensi Ubuntu)
sudo nano /etc/nginx/sites-available/mysite.conf
# Aktifkan dengan membuat symlink
sudo ln -s /etc/nginx/sites-available/mysite.conf /etc/nginx/sites-enabled/
# Nonaktifkan dengan hapus symlink (file asli tetap ada di sites-available)
sudo rm /etc/nginx/sites-enabled/mysite.conf
Keduanya valid secara teknis — perbedaannya hanya workflow. Konvensi sites-available/sites-enabled lebih eksplisit karena kamu bisa melihat site mana yang “aktif” hanya dengan lihat isi sites-enabled/.
Jangan gunakan keduanya sekaligus tanpa sengaja. Jikanginx.confmeng-includeconf.d/*.confdan jugasites-enabled/*, pastikan tidak ada konfigurasi yang bertentangan antara keduanya. Instalasi Ubuntu bawaan kadang meng-include keduanya, yang bisa menyebabkan konflik.
Mengorganisasi Konfigurasi untuk Proyek yang Berkembang #
Untuk satu atau dua site, struktur flat sudah cukup. Tapi untuk server yang mengelola banyak site atau microservice, struktur yang lebih terorganisir sangat membantu:
/etc/nginx/
├── nginx.conf # Global config, hanya include saja
├── conf.d/
│ ├── 00-global-security.conf # Security headers, rate limit zones
│ ├── 01-gzip.conf # Kompresi global
│ └── 02-logging.conf # Format log kustom
├── sites-available/
│ ├── example.com.conf
│ ├── api.example.com.conf
│ └── admin.example.com.conf
├── sites-enabled/
│ ├── example.com.conf -> ../sites-available/example.com.conf
│ └── api.example.com.conf -> ../sites-available/api.example.com.conf
└── snippets/
├── ssl-params.conf # Parameter SSL yang dipakai ulang
├── proxy-headers.conf # Header standar untuk proxy
└── security-headers.conf # HTTP security headers
Dengan struktur ini, konfigurasi global (security, gzip, logging) terpisah dari konfigurasi per-site, dan snippet yang sering digunakan di-reuse daripada dicopy-paste.
Urutan Pembacaan dan Prioritas #
Satu hal yang perlu dipahami: ketika Nginx membaca konfigurasi, file-file yang di-include dibaca dalam urutan alfabetis (untuk wildcard *.conf). Ini berarti:
conf.d/*.conf dibaca dalam urutan:
00-global.conf (dibaca pertama)
01-rate-limit.conf
02-gzip.conf
api.example.com.conf
example.com.conf (dibaca terakhir)
Ini penting jika ada konfigurasi yang harus sudah terdefinisi sebelum digunakan. Misalnya, limit_req_zone yang mendefinisikan zone rate limiting harus di-include sebelum limit_req yang menggunakannya. Menggunakan prefix angka (00-, 01-) adalah cara umum untuk mengontrol urutan ini.
Verifikasi Struktur Konfigurasi #
# Test apakah seluruh konfigurasi (termasuk semua file yang di-include) valid
sudo nginx -t
# Lihat konfigurasi yang aktif setelah semua include di-resolve
# (berguna untuk debugging)
sudo nginx -T
# Output nginx -T akan menampilkan seluruh konfigurasi efektif
# dalam satu stream, termasuk nama file asal setiap bagian
nginx -T sangat berguna untuk debugging karena menampilkan konfigurasi akhir yang benar-benar digunakan Nginx, bukan hanya file-file yang kamu tulis. Dari sini kamu bisa melihat apakah include berjalan dengan benar dan tidak ada konfigurasi yang saling menimpa.
Ringkasan #
nginx.confadalah entry point — ia mendefinisikan konfigurasi global dan meng-include file-file lainnya.includememungkinkan konfigurasi dipecah menjadi file-file terpisah; gunakan snippets untuk konfigurasi yang sering dipakai ulang.conf.d/dansites-available/sites-enabled/adalah dua konvensi yang berbeda tapi setara — pilih salah satu dan konsisten.- File
*.confdi-include dalam urutan alfabetis — gunakan prefix angka untuk mengontrol urutan jika diperlukan.nginx -tuntuk validasi,nginx -Tuntuk melihat konfigurasi efektif final.
← Sebelumnya: Compile Source Berikutnya: Directive & Context →