Generator Konfigurasi Nginx

Buat Konfigurasi Nginx

Menulis konfigurasi Nginx dari nol berarti harus mengingat setiap baris proxy_set_header, setiap tipe MIME yang dikompresi gzip, dan beda halus antara try_files $uri/ /index.php?$args dengan versi yang diam-diam merusak routing. Generator ini menanyakan domain, upstream, handler PHP, dan lokasi file SSL, lalu menghasilkan sebuah server block dengan nilai bawaan yang masuk akal untuk TLS, HTTP/2, cache aset statis, dan kompresi.

Cara membuat server block Anda

  1. 1

    Pilih preset

    Situs statis, PHP-FPM (Laravel, WordPress), reverse proxy Node.js, atau sekadar redirect 301.

  2. 2

    Masukkan domain

    Sertakan daftar server_name, biasanya varian dengan www dan tanpa www.

  3. 3

    Atur detail SSL

    Arahkan ke file fullchain dan privkey Anda, atau lewati langkah ini jika hanya memakai HTTP.

  4. 4

    Sesuaikan upstream

    Port, path socket, atau URL backend untuk kasus proxy_pass.

  5. 5

    Salin dan pasang

    Simpan hasilnya di /etc/nginx/sites-available, jalankan nginx -t, lalu reload Nginx.

Seperti apa server block yang baik

Virtual host Nginx modern biasanya terdiri dari bagian-bagian berikut:

Bagian Fungsi
listen 443 ssl http2 Menerima HTTPS dengan HTTP/2 aktif
ssl_certificate + ssl_certificate_key Menunjuk ke sertifikat dan kunci TLS
ssl_protocols TLSv1.2 TLSv1.3 Membuang versi TLS lama
gzip on + daftar tipe Mengompresi teks/HTML/JSON/JS/CSS saat dikirim
Header expires untuk aset statis Mengurangi permintaan ulang dari pengunjung yang kembali
try_files Meneruskan ke front controller (PHP, Laravel, dll.)
HSTS + header keamanan Memaksa browser tetap memakai TLS

Dasar-dasar reverse proxy

Untuk aplikasi Node.js, Python, atau Ruby yang berjalan di belakang Nginx:

location / {
    proxy_pass http://127.0.0.1:3000;
    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 Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

Melupakan X-Forwarded-For adalah cara klasik untuk kehilangan alamat IP asli pengunjung di log aplikasi Anda.

Kesalahan yang sering terjadi

  • Tidak ada server_name cadangan. Bila tidak ada nama yang cocok, Nginx memakai server block pertama sebagai default. Pasang satu block penangkap server_name _ yang mengembalikan 444 agar terhindar dari serangan lewat header Host.
  • Urutan sertifikat salah. File ssl_certificate harus berisi rantai penuh (fullchain: sertifikat situs + sertifikat perantara), bukan hanya sertifikat situs.
  • Cache terlalu agresif. Mengirim expires 1y untuk /index.html akan mengacaukan setiap rilis. Gunakan URL aset yang diberi versi.
  • Reload tanpa tes. Selalu jalankan nginx -t sebelum systemctl reload nginx. Satu salah ketik pada sintaks bisa membuat situs mati.

Pertanyaan yang Sering Diajukan

HTTP/2 sudah stabil dan didukung penuh di Nginx 1.25+. HTTP/3 (QUIC) tersedia di Nginx 1.25+ tetapi masih berstatus eksperimental. Untuk konfigurasi produksi saat ini, aktifkan HTTP/2 dan, bila mau, tambahkan HTTP/3 lewat direktif http3 dan quic.

Konvensinya adalah /etc/ssl/certs/ untuk rantai publik dan /etc/ssl/private/ untuk kunci privat. Let’s Encrypt menaruh semuanya di /etc/letsencrypt/live/domain/. Ikuti lokasi yang diharapkan oleh alat pembaruan sertifikat Anda.

Ya, untuk hampir semua situs. Tambahkan server block terpisah di port 80 yang mengembalikan 301 https://$host$request_uri. Dipadukan dengan HSTS, block HTTP itu hampir tidak pernah tersentuh lagi setelah permintaan pertama.

Jalankan sudo nginx -t untuk memeriksa konfigurasi tanpa me-reload. Jika muncul “syntax is ok” dan “test is successful”, lakukan reload dengan sudo systemctl reload nginx. Jangan pernah memakai restart di produksi, karena reload berjalan tanpa memutus layanan.

Alat Terkait

Alat ini tersedia dalam bahasa lain