Nginx Yapılandırma Üreteci

Nginx Yapılandırmasını Oluştur

Nginx yapılandırmalarını sıfırdan yazmak; her proxy_set_header'ı, her gzip MIME türünü ve try_files $uri/ /index.php?$args ile yönlendirmeyi ince bir şekilde bozan sürüm arasındaki farkı hatırlamak demektir. Bu üreteç alan adını, upstream'i, PHP işleyiciyi ve SSL yollarını sorar, sonra TLS, HTTP/2, statik önbellekleme ve sıkıştırma için makul varsayılanlarla bir sunucu bloğu çıkarır.

Sunucu bloğunuz nasıl oluşturulur

  1. 1

    Bir hazır ayar seçin

    Statik site, PHP-FPM (Laravel, WordPress), Node.js ters proxy ya da düz bir 301 yönlendirmesi.

  2. 2

    Alan adını girin

    server_name listesini ekleyin: genellikle www ve www'siz varyantlar.

  3. 3

    SSL ayrıntılarını belirleyin

    fullchain ve privkey dosyalarınızı gösterin ya da yalnızca HTTP kullanmak için atlayın.

  4. 4

    Upstream'i ayarlayın

    proxy_pass durumları için port, soket yolu ya da arka uç URL'si.

  5. 5

    Kopyalayın ve dağıtın

    Çıktıyı /etc/nginx/sites-available içine bırakın, nginx -t çalıştırın ve yeniden yükleyin.

İyi bir sunucu bloğu nasıl görünür

Modern bir Nginx sanal ana bilgisayarında genellikle şu parçalar bulunur:

Bölüm Amaç
listen 443 ssl http2 HTTP/2 etkin HTTPS’i kabul et
ssl_certificate + ssl_certificate_key TLS materyalini göster
ssl_protocols TLSv1.2 TLSv1.3 Eski TLS sürümlerini at
gzip on + türler Metin/HTML/JSON/JS/CSS’i anında sıkıştır
Statik varlıklar için expires başlıkları Tekrar gelen ziyaretçilerden gidiş-dönüşleri azalt
try_files Bir ön denetleyiciye yönlendir (PHP, Laravel vb.)
HSTS + güvenlik başlıkları Tarayıcıyı TLS konusunda dürüst tut

Ters proxy temelleri

Nginx arkasında çalışan Node.js, Python, Ruby uygulamaları için:

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";
}

X-Forwarded-For‘u unutmak, uygulama günlüklerinizdeki gerçek istemci IP’lerini kaybetmenin klasik yoludur.

Yaygın hatalar

  • Eksik server_name yedeği. Hiçbir ad eşleşmezse Nginx ilk sunucu bloğunu varsayılan olarak kullanır. Host başlığı saldırılarından kaçınmak için 444 döndüren bir tümünü-yakala server_name _ bloğu koyun.
  • Yanlış sertifika sırası. ssl_certificate dosyası yalnızca yaprak değil, fullchain (yaprak + ara sertifikalar) olmalıdır.
  • Aşırı hevesli önbellekleme. /index.html‘e expires 1y göndermek dağıtımları mahveder. Bunun yerine varlık URL’lerini sürümlendirin.
  • Yeniden yüklemeden önce test yok. systemctl reload nginx’ten önce her zaman nginx -t çalıştırın: bir sözdizimi hatası siteyi çevrimdışı yapar.

Sık Sorulan Sorular

HTTP/2 kararlıdır ve Nginx 1.25+‘ta evrensel olarak desteklenir. HTTP/3 (QUIC) Nginx 1.25+‘ta deneysel olarak mevcuttur. 2025’te bir üretim yapılandırması için HTTP/2’yi etkinleştirin ve isteğe bağlı olarak http3 ve quic yönergeleriyle HTTP/3’ü katmanlayın.

Yaygın uygulama, herkese açık zincirler için /etc/ssl/certs/ ve anahtarlar için /etc/ssl/private/‘dır. Let’s Encrypt her şeyi /etc/letsencrypt/live/domain/ altına koyar. Yenileme aracınızın beklediğini kullanın.

Çoğu site için evet. 301 https://$host$request_uri döndüren ayrı bir port-80 sunucu bloğu ekleyin. HSTS ile birleştirildiğinde, ilk istekten sonra HTTP bloğuna neredeyse hiç başvurulmaz.

Yapılandırmayı yeniden yüklemeden ayrıştırmak için sudo nginx -t çalıştırın. “syntax is ok” ve “test is successful” yazdırırsa, sudo systemctl reload nginx ile yeniden yükleyin. Üretimde asla restart kullanmayın: reload atomiktir.

İlgili Araçlar

Araç diğer dillerde mevcuttur