Struktur File Config

Struktur File Konfigurasi Nginx #

Setiap kali web server Nginx dinyalakan atau melakukan reload konfigurasi, ada satu titik awal (single entry point) di mana seluruh roda gigi penanganan request mulai berputar: berkas nginx.conf. Berkas ini bertindak sebagai jembatan instruksi utama yang dibaca langsung oleh sistem operasi dan kernel Linux. Namun, seiring dengan berkembangnya aplikasi kita dari satu situs web sederhana menjadi infrastruktur multi-domain, menuliskan ratusan baris konfigurasi ke dalam satu berkas tunggal akan menjadi mimpi buruk pemeliharaan (maintenance nightmare).

Untuk mengatasi masalah ini, Nginx menyediakan mekanisme modularitas yang sangat tangguh melalui directive include dan pembagian struktur direktori. Artikel ini akan membedah secara mendalam bagaimana Nginx memuat konfigurasinya, membongkar anatomi berkas nginx.conf standar produksi baris demi baris, menganalisis perbedaan konvensi pengelolaan virtual host, serta memberikan praktik terbaik (best practices) dalam menyusun konfigurasi modular untuk sistem berskala besar.

nginx.conf: Bedah Baris-demi-Baris Entry Point Produksi #

Berkas nginx.conf utama (biasanya terletak di /etc/nginx/nginx.conf) mendefinisikan konfigurasi sistem tingkat global (global scope atau main context). Konfigurasi di tingkat ini berkaitan dengan manajemen proses sistem operasi, alokasi thread pool, logging dasar, dan pembatasan low-level soket jaringan.

Berikut adalah contoh konfigurasi nginx.conf standar produksi yang telah dioptimalkan untuk performa tinggi dan keamanan:

# /etc/nginx/nginx.conf

# 1. Konfigurasi Sistem Operasi & Proses
user nginx;
worker_processes auto;
worker_cpu_affinity auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;

# 2. Pengaturan Event Loop (Koneksi Jaringan)
events {
    worker_connections 1024;
    multi_accept on;
    use epoll;
}

# 3. Pengaturan Web Services (HTTP Protocol)
http {
    # Pemetaan tipe file (MIME)
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    # Format pencatatan log akses
    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;

    # Optimasi I/O Kernel Linux
    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     on;

    # Persistent Connection Timeout
    keepalive_timeout  65;
    keepalive_requests 1000;

    # Kompresi Data Global
    gzip on;
    gzip_types text/plain text/css application/javascript application/json;

    # Memuat Konfigurasi Modular Virtual Host
    include /etc/nginx/conf.d/*.conf;
}

Mari kita bedah alasan teknis di balik setiap baris konfigurasi penting di atas:

1. Konfigurasi Sistem Operasi & Proses (Main Context) #

  • user nginx;
    • Mengapa ini penting? Ini menentukan kredensial sistem operasi yang digunakan oleh worker process untuk berjalan. Kita menjalankan master process sebagai root agar ia dapat mengikat (bind) port jaringan privileged di bawah 1024 (seperti 80 dan 443). Namun, demi keamanan, penanganan request klien didelegasikan ke user sistem non-privileged nginx yang tidak memiliki folder home dan shell interaktif. Ini membatasi kerusakan sistem jika terjadi eksploitasi eksekusi kode (remote code execution).
  • worker_processes auto;
    • Mengapa ini penting? Ini menentukan jumlah proses pekerja yang dibuat Nginx. Nilai auto memerintahkan Nginx untuk mendeteksi jumlah core CPU fisik yang tersedia pada server dan membuat jumlah worker yang sama secara otomatis. Hal ini dilakukan untuk mencegah overhead akibat peralihan konteks CPU (CPU context switching) jika jumlah worker melebihi jumlah core CPU fisik.
  • worker_cpu_affinity auto;
    • Mengapa ini penting? Directive ini secara ketat mengikat (bind) setiap worker process ke core CPU tertentu. Ini mengoptimalkan pemanfaatan L1/L2 cache CPU (cache locality) dan mencegah sistem operasi memindahkan proses worker antar core secara dinamis, yang dapat menurunkan performa CPU.
  • error_log /var/log/nginx/error.log notice;
    • Mengapa ini penting? Menentukan lokasi file log kesalahan sistem dan tingkat keparahannya (severity level). Tingkat notice adalah pilihan seimbang untuk production: ia tidak akan memenuhi disk dengan pesan debug tak penting, namun tetap mencatat kejadian krusial seperti proses worker yang crash atau warning konfigurasi.
  • pid /var/run/nginx.pid;
    • Mengapa ini penting? Menyimpan nomor Process ID (PID) dari master process Nginx yang sedang aktif. File ini dibaca oleh program init sistem operasi (seperti systemd) untuk mengirimkan sinyal kontrol (seperti reload, stop, atau rotate log) secara presisi ke proses Nginx.

2. Pengaturan Event Loop (Events Context) #

  • worker_connections 1024;
    • Mengapa ini penting? Menentukan jumlah koneksi simultan maksimum yang dapat ditangani oleh satu worker process. Dengan 4 core CPU (4 worker) dan worker_connections 1024, server kita secara teoritis dapat menangani hingga $4 \times 1024 = 4096$ koneksi aktif secara bersamaan. Di server bertrafik sangat tinggi, nilai ini dapat ditingkatkan menjadi 4096 atau 8192 setelah menaikkan batas berkas terbuka (ulimit -n) sistem operasi.
  • multi_accept on;
    • Mengapa ini penting? Secara default, Nginx worker hanya menerima satu koneksi baru dari antrean soket pada satu waktu. Mengaktifkan multi_accept memaksa worker untuk menerima semua koneksi baru yang masuk dalam antrean secara instan dalam satu siklus event loop, mengurangi latensi jabat tangan (handshake) TCP saat trafik melonjak.
  • use epoll;
    • Mengapa ini penting? Menentukan metode pemrosesan event (connection polling) tingkat kernel. Pada Linux, epoll adalah metode non-blocking I/O paling efisien yang mampu memonitor ribuan koneksi tanpa degradasi performa linear seperti metode lawas select atau poll. Nginx mendeteksi ini secara otomatis, tetapi menyatakannya secara eksplisit menjamin kita menggunakan fitur terbaik kernel Linux.

3. Pengaturan Web Services (HTTP Context) #

  • include /etc/nginx/mime.types;
    • Mengapa ini penting? Berkas mime.types memetakan ekstensi file (seperti .html, .css, .js, .png) ke tipe konten HTTP (Content-Type header). Jika baris ini hilang, peramban klien akan gagal merender halaman web dengan benar karena Nginx mengirimkan file CSS atau gambar dengan header text biasa, yang ditolak oleh browser demi keamanan (MIME sniffing protection).
  • sendfile on; tcp_nopush on; tcp_nodelay on;
    • Mengapa ini penting? Trio directive ini memaksimalkan kecepatan transfer data statis. sendfile mengaktifkan fitur Zero-Copy tingkat kernel, di mana data file statis ditransfer langsung dari page cache disk ke buffer soket kartu jaringan tanpa perlu menyalin data ke memori aplikasi Nginx terlebih dahulu. tcp_nopush memastikan paket data TCP dikirimkan dalam ukuran penuh (maksimum MTU) untuk efisiensi bandwidth, sementara tcp_nodelay mematikan algoritma Nagle pada koneksi keep-alive agar respons kecil terkirim instan tanpa menunggu buffer penuh.

Mekanisme Kerja Sistem Include #

Mekanisme include adalah fitur luar biasa yang memungkinkan kita membagi konfigurasi yang rumit menjadi potongan-potongan kecil yang terorganisir dengan rapi. Nginx memproses include dengan cara membaca file target dan menyisipkan seluruh baris kodenya tepat di posisi directive include tersebut ditulis, layaknya proses copy-paste otomatis pada saat inisialisasi memori.

Berikut adalah diagram relasi pemuatan file include dari nginx.conf utama ke berkas-berkas konfigurasi modular:

flowchart TD
    Main["/etc/nginx/nginx.conf <br> (Entry Point Utama)"]
    
    Main -->|"include mime.types"| MIME["/etc/nginx/mime.types <br> (Daftar Pemetaan Ekstensi File)"]
    
    Main -->|"include conf.d/*.conf"| ConfD["Direktori /etc/nginx/conf.d/ <br> (Virtual Hosts & Global Zones)"]
    ConfD -->|"Pemuatan Alfabetis"| V1["00-rate-limit.conf"]
    ConfD -->|"Pemuatan Alfabetis"| V2["example.com.conf"]
    ConfD -->|"Pemuatan Alfabetis"| V3["api.example.com.conf"]
    
    V2 -->|"include snippets/ssl.conf"| SSL["/etc/nginx/snippets/ssl.conf <br> (Reusable SSL Parameters)"]
    V2 -->|"include snippets/cors.conf"| CORS["/etc/nginx/snippets/cors.conf <br> (Reusable CORS Configuration)"]
    
    style Main stroke:#0288d1,stroke-width:2.5px
    style ConfD stroke:#388e3c,stroke-width:2px
    style SSL stroke:#f57c00,stroke-width:1.5px

Sintaksis dan Aturan Penulisan Path #

Sintaks dasar directive ini sangat lugas:

include nama_file_atau_pola_path;

Kita dapat menuliskan path dengan dua cara:

  1. Path Absolut: Menentukan lokasi file secara lengkap dari root direktori sistem operasi.
    include /var/www/my-app/custom-nginx.conf;
    
  2. Path Relatif: Menentukan lokasi relatif terhadap direktori konfigurasi utama Nginx (yang didefinisikan oleh flag --prefix saat kompilasi, standarnya adalah /etc/nginx/).
    # Mencari file di /etc/nginx/snippets/ssl.conf
    include snippets/ssl.conf;
    

Kekuatan Reusable Snippets #

Salah satu implementasi terbaik sistem include adalah pembuatan Snippets — file konfigurasi kecil yang berisi instruksi berulang yang sering digunakan di banyak server block berbeda.

Sebagai contoh, kita dapat membuat snippet untuk parameter keamanan SSL/TLS produksi:

# /etc/nginx/snippets/ssl-params.conf
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;

Dan snippet untuk header proxy standar yang diteruskan ke backend (Node.js/Go/Python):

# /etc/nginx/snippets/proxy-headers.conf
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Connection "";

Dengan snippet di atas, konfigurasi server block kita menjadi sangat ringkas dan mudah dibaca:

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/ssl/certs/example.pem;
    ssl_certificate_key /etc/ssl/private/example.key;

    # Menggunakan reusable snippets
    include snippets/ssl-params.conf;

    location /api/ {
        proxy_pass http://localhost:8080;
        # Menggunakan reusable proxy headers
        include snippets/proxy-headers.conf;
    }
}

Jika di masa mendatang kita perlu mengganti port backend atau memperketat protokol TLS dari TLSv1.2 ke TLSv1.3 murni, kita hanya perlu mengubah berkas snippet bersangkutan sekali saja. Perubahan tersebut akan langsung diterapkan di seluruh virtual host setelah Nginx direload.


Pola Organisasi: conf.d/ vs sites-available/sites-enabled/ #

Di dunia administrasi sistem Linux, terdapat perdebatan klasik mengenai bagaimana cara terbaik menyusun berkas virtual host. Ada dua konvensi utama yang dominan:

1. Konvensi conf.d/ (Flat & Praktis) #

Pola ini merupakan standar bawaan yang didistribusikan langsung oleh tim resmi Nginx (nginx.org). Di dalam direktori /etc/nginx/conf.d/, kita menyimpan semua konfigurasi virtual host dengan ekstensi .conf secara langsung.

  • Workflow: Buat berkas baru (misal example.com.conf), jalankan nginx -t, lalu systemctl reload nginx. Situs tersebut langsung aktif melayani trafik.
  • Kelebihan: Sangat sederhana, tidak membingungkan, dan sangat cocok untuk lingkungan modern berbasis container (Docker) di mana kita ingin konfigurasi sekecil dan se-flat mungkin.

2. Konvensi sites-available/ & sites-enabled/ (Debian/Ubuntu Style) #

Konvensi ini diwarisi dari model pengelolaan situs Apache HTTP Server dan diterapkan secara default pada instalasi Nginx di distribusi Debian dan Ubuntu.

  • Workflow: Kita menulis berkas konfigurasi situs di dalam direktori sites-available/. Situs ini belum aktif. Untuk mengaktifkannya, kita harus membuat tautan simbolik (symbolic link atau symlink) dari berkas tersebut ke direktori sites-enabled/.
  • Kelebihan: Sangat eksplisit. Kita dapat dengan mudah menonaktifkan suatu situs untuk pemeliharaan (maintenance) hanya dengan menghapus symlink-nya di folder sites-enabled/, tanpa perlu menghapus berkas konfigurasi asli yang ada di sites-available/.

Matriks Perbandingan Mendalam #

Kriteria EvaluasiKonvensi conf.d/Konvensi sites-available/sites-enabled/
Siklus Hidup KonfigurasiSekali buat langsung aktif (flat).Butuh dua tahap: pembuatan file lalu link manual.
Kompatibilitas DistroStandar resmi Nginx.org, RHEL, CentOS, Rocky Linux.Default pada Debian, Ubuntu, Linux Mint.
Kemudahan Otomatisasi (CI/CD)Sangat tinggi (cukup salin file via pipeline).Sedang (pipeline harus mengelola pembuatan symlink).
Kemudahan DebuggingTinggi (seluruh file aktif ada di satu folder).Sedang (harus melacak tautan rusak / broken symlinks).
Rekomendasi Kontainer (Docker)Sangat Direkomendasikan (menjaga image tetap minimal).Kurang Cocok (menambahkan overhead struktur direktori).

Jika kita memilih menggunakan konvensi Debian/Ubuntu, berikut adalah perintah terminal sistem yang wajib kita gunakan untuk mengelola siklus hidup virtual host kita secara aman:

# 1. Membuat file konfigurasi baru di folder available
sudo nano /etc/nginx/sites-available/example.com.conf

# 2. Mengaktifkan situs dengan membuat symbolic link (symlink)
# PERINGATAN: Selalu gunakan path absolut untuk target ln -s agar link tidak rusak!
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/

# 3. Memverifikasi apakah symlink terbentuk dengan benar
ls -la /etc/nginx/sites-enabled/
# Output harus menunjukkan: example.com.conf -> ../sites-available/example.com.conf

# 4. Menonaktifkan situs sementara (cukup hapus symlink-nya)
sudo rm /etc/nginx/sites-enabled/example.com.conf
# File asli tetap aman tersimpan di /etc/nginx/sites-available/

Hindari Bentrokan Impor Ganda! Banyak administrator sistem pemula secara tidak sengaja meng-include kedua folder tersebut di dalam http context pada file nginx.conf:

# ANTI-PATTERN: Menyebabkan duplikasi server_name jika file yang sama di-include dua kali
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

Jika kita melakukan ini, dan secara tidak sengaja meletakkan file konfigurasi dengan server name yang sama di kedua direktori tersebut, Nginx akan menolak berjalan karena konflik definisi nama server (duplicate server_name). Pilih salah satu konvensi yang sesuai dengan standar tim kita, dan hapus baris include yang tidak digunakan dari nginx.conf.


Urutan Pemuatan Wildcard (*.conf) dan Prioritas #

Nginx memuat berkas konfigurasi eksternal menggunakan sistem pencocokan wildcard (seperti conf.d/*.conf). Di balik layar, parser Nginx menggunakan fungsi pustaka standar sistem operasi glob() untuk memperluas nama file tersebut. Fungsi ini mengembalikan daftar file yang cocok dan mengurutkannya secara alfabetis (ASCII order).

Berikut adalah diagram alur visual yang menjelaskan bagaimana urutan penamaan file memengaruhi parsing konfigurasi global:

flowchart LR
    Start["glob() scan conf.d/*.conf"] --> Sort["Urutan Alfabetis (ASCII)"]
    
    Sort --> F1["00-rate-limit.conf <br> (Mendefinisikan limit_req_zone)"]
    F1 --> F2["05-gzip-global.conf <br> (Mengatur kompresi global)"]
    F2 --> F3["10-api.conf <br> (Menggunakan limit_req zone)"]
    F3 --> F4["20-website.conf <br> (Virtual Host utama)"]
    
    F4 --> Active["Nginx memuat seluruh konfigurasi ke RAM"]
    
    style Sort stroke:#388e3c,stroke-width:2px
    style F1 stroke:#0288d1,stroke-width:1.5px
    style F3 stroke:#f57c00,stroke-width:1.5px

Konsekuensi Urutan Pemuatan #

Pemuatan berdasarkan abjad ini memiliki konsekuensi kritis jika kita mendefinisikan elemen konfigurasi yang saling bergantung (dependency).

Sebagai contoh, jika kita ingin mengaktifkan Rate Limiting pada Nginx, kita harus mendefinisikan zona penyimpanan memori bersama (shared memory zone) menggunakan directive limit_req_zone di tingkat global sebelum zona tersebut dapat dipanggil oleh directive limit_req di tingkat server/location block.

  • Skenario SALAH:
    • File api.example.com.conf memuat: limit_req zone=ip_limit;
    • File rate_limit_zone.conf memuat: limit_req_zone $binary_remote_addr zone=ip_limit:10m rate=10r/s;
    • Karena api.example.com.conf secara alfabetis dibaca sebelum rate_limit_zone.conf, Nginx akan mengeluarkan error fatal saat startup: nginx: [emerg] unknown limit_req_zone "ip_limit" karena zona tersebut belum sempat terdefinisi saat dipanggil.
  • Solusi Rekomendasi (Sistem Prefix Angka): Kita wajib menggunakan prefix angka dua digit pada nama file konfigurasi di folder conf.d/ untuk mengendalikan urutan pemuatannya secara ketat:
    • 00-rate-limit-zones.conf (berisi semua definisi zona global, dibaca paling awal)
    • 01-cache-zones.conf (berisi definisi proxy cache path)
    • 10-api.example.com.conf (berisi server block API)
    • 20-website.example.com.conf (berisi server block website biasa)

Visualisasi Struktur Direktori /etc/nginx/ Tingkat Produksi #

Sebagai referensi praktis, berikut adalah representasi pohon direktori lengkap untuk /etc/nginx/ tingkat produksi yang menggabungkan prinsip modularitas, snippets reuse, dan pemisahan tugas secara terstruktur:

/etc/nginx/
├── nginx.conf                      # File entry point utama (hanya berisi global settings)
├── mime.types                      # File pemetaan ekstensi file ke Content-Type
├── fastcgi_params                  # Parameter standar untuk PHP-FPM integration
├── scgi_params                     # Parameter standar untuk SCGI protocol
├── uwsgi_params                    # Parameter standar untuk Python uWSGI integration
│
├── conf.d/                         # Seluruh virtual host & zone global diletakkan di sini
│   ├── 00-global-security.conf     # Rate limit zones, global security configurations
│   ├── 01-cache-paths.conf         # Definisi proxy_cache_path dan temp paths
│   ├── 10-api.example.com.conf     # Virtual host untuk API Gateway backend
│   └── 20-www.example.com.conf     # Virtual host untuk Frontend Website
│
├── snippets/                       # Potongan konfigurasi reusable (snippet)
│   ├── ssl-params.conf             # Cipher & parameter keamanan TLS tingkat tinggi
│   ├── proxy-headers.conf          # Header proxy standar untuk diteruskan ke backend
│   ├── security-headers.conf       # HTTP security headers (X-Frame-Options, CSP, etc.)
│   └── letsencrypt-acme.conf       # Lokasi verifikasi SSL Let's Encrypt HTTP-01 challenge
│
└── ssl/                            # Folder penyimpanan sertifikat SSL lokal (opsional)
    ├── example.com.pem             # Sertifikat SSL publik gabungan (fullchain)
    └── example.com.key             # Kunci privat sertifikat SSL (privkey)

Verifikasi dan Debugging Struktur Konfigurasi #

Salah satu keunggulan Nginx dibandingkan web server lainnya adalah kemudahan verifikasi konfigurasi tanpa perlu menghentikan proses server yang sedang aktif melayani pengguna.

1. Uji Sintaksis (nginx -t) #

Sebelum melakukan reload konfigurasi pada server produksi, kita wajib menjalankan uji sintaksis menggunakan perintah berikut:

sudo nginx -t
  • Perintah ini akan membaca seluruh file konfigurasi (termasuk menelusuri semua file include) dan memeriksa kebenaran penulisan syntax, keberadaan file target, kecocokan tipe context, dan ketersediaan memori untuk shared zone.
  • Jika konfigurasi aman, output akan menunjukkan:
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    
  • Jika terjadi kesalahan (misalnya lupa menulis titik koma), Nginx akan menunjukkan secara spesifik berkas mana, nomor baris ke berapa, dan alasan kegagalannya:
    nginx: [emerg] invalid number of arguments in "worker_connections" directive in /etc/nginx/nginx.conf:23
    

2. Tampilkan Konfigurasi Efektif Gabungan (nginx -T) #

Ketika kita bekerja dengan puluhan file include, melacak file mana yang mendefinisikan directive tertentu bisa menjadi hal yang sangat sulit. Nginx menyediakan opsi -T untuk melakukan verifikasi sekaligus memuntahkan (dump) seluruh isi konfigurasi yang telah digabungkan ke layar:

sudo nginx -T

Karena outputnya bisa sangat panjang, kita direkomendasikan untuk menyalurkan output tersebut ke utilitas pencari seperti grep atau pembaca halaman seperti less:

# Mencari di mana directive proxy_pass didefinisikan dalam seluruh sistem
sudo nginx -T | grep proxy_pass

# Membaca konfigurasi gabungan baris demi baris secara interaktif
sudo nginx -T | less

Output nginx -T akan menampilkan komentar pembatas berkas seperti # configuration file /etc/nginx/conf.d/10-api.conf: yang sangat membantu kita mengidentifikasi file asal suatu konfigurasi saat melakukan debugging.

3. Hot Reload Tanpa Downtime #

Setelah nginx -t memastikan konfigurasi kita aman tanpa error, kita dapat menginstruksikan Nginx untuk menerapkan perubahan tersebut secara instan tanpa memutuskan koneksi pengguna aktif menggunakan systemd service manager:

sudo systemctl reload nginx

Di balik layar, perintah ini mengirimkan sinyal HUP (SIGHUP) ke master process Nginx. Master process akan membaca ulang file konfigurasi di disk, memvalidasi ulang, membuat worker process baru dengan konfigurasi baru, dan menginstruksikan worker process lama secara graceful untuk berhenti menerima koneksi baru tetapi tetap menyelesaikan transaksi koneksi klien yang sedang berjalan saat itu. Setelah seluruh koneksi lama habis melayani klien, worker process lama akan mati secara alami, meninggalkan worker process baru beroperasi penuh tanpa downtime satu milidetik pun.


Ringkasan #

  • nginx.conf bertindak sebagai gerbang masuk utama yang mendefinisikan global settings sistem (seperti jumlah worker CPU, logging, dan event polling kernel).
  • Directive include menyisipkan isi file eksternal secara transparan pada posisi include tersebut dipanggil. Manfaatkan absolute path untuk kejelasan dan snippets untuk efisiensi penulisan SSL/Proxy berulang.
  • Gunakan prefix penomoran numerik (misal 00-, 10-) pada folder conf.d/ untuk menjamin file zona global dimuat lebih awal sebelum dipanggil di file berikutnya secara alfabetis.
  • Pilih salah satu konvensi virtual host yang konsisten (conf.d/ flat untuk Docker/cloud-native, atau sites-available/sites-enabled/ untuk manajemen manual via Debian symlink).
  • Selalu jalankan nginx -t sebelum reload untuk mendeteksi error konfigurasi dini, dan gunakan nginx -T untuk melihat hasil kompilasi konfigurasi akhir di memori RAM.

← Sebelumnya: Konfigurasi Dasar   Berikutnya: Directive & Context →

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