Struktur File Config

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 sininginx.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. Jika nginx.conf meng-include conf.d/*.conf dan juga sites-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.conf adalah entry point — ia mendefinisikan konfigurasi global dan meng-include file-file lainnya.
  • include memungkinkan konfigurasi dipecah menjadi file-file terpisah; gunakan snippets untuk konfigurasi yang sering dipakai ulang.
  • conf.d/ dan sites-available/sites-enabled/ adalah dua konvensi yang berbeda tapi setara — pilih salah satu dan konsisten.
  • File *.conf di-include dalam urutan alfabetis — gunakan prefix angka untuk mengontrol urutan jika diperlukan.
  • nginx -t untuk validasi, nginx -T untuk melihat konfigurasi efektif final.

← Sebelumnya: Compile Source   Berikutnya: Directive & Context →

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact