Nginx Worker & Bağlantı Yapılandırma Aracı

CPU çekirdek sayısı, RAM ve trafik profiline göre optimum nginx.conf parametrelerini hesaplar. Worker sayısı, bağlantı limitleri ve buffer ayarları için kopyalamaya hazır yapılandırma üretir.

📋 Sunucu bilgilerini öğrenmek için bu komutları çalıştırın
$ nproc # CPU çekirdek sayısı $ free -m | awk '/Mem:/ {print $2}' # Toplam RAM (MB) $ ulimit -n # Mevcut open files limiti $ nginx -V 2>&1 | grep "built with" # Nginx derleme bilgisi
Mevcut Nginx durumunu kontrol etmek için: nginx -t (config testi) ve systemctl status nginx komutlarını kullanın. Aktif bağlantıları görmek için: nginx -s status veya ss -s
Sunucu Bilgileri
core

nproc ile öğrenin.

MB

free -m ile öğrenin.

sendfile ve aio ayarlarını etkiler.

Kullanım Senaryosu

Buffer ve timeout değerlerini etkiler.

Gelişmiş Ayarlar
sn

0 = keepalive kapalı. Çoğu site için 65 önerilir.

Bant genişliğini %60-80 azaltır.

SSL session cache ayarları eklenir.

Hesaplama Sonuçları

worker_processes
worker sayısı
worker_connections
worker başına bağlantı
Toplam Max Bağlantı
workers × connections
worker_rlimit_nofile
open files limiti
client_max_body_size
max upload boyutu
keepalive_timeout
saniye
gzip
sıkıştırma
client_body_buffer
istek buffer
Eklenecek / güncellenecek değerler — mevcut dosyanızı silmeyin

    

Nginx Yapılandırması Rehberi

Nginx, event-driven (olay güdümlü) mimarisi sayesinde binlerce eş zamanlı bağlantıyı çok az bellek kullanarak yönetebilir. Apache’nin her istek için yeni bir thread/process açmasının aksine, Nginx tek bir worker process içinde yüzlerce bağlantıyı asenkron olarak işler.

Temel Hesaplama Formülleri

worker_processes    = CPU çekirdek sayısı  (veya "auto")
worker_connections  = Düşük trafik: 512 | Orta: 1024 | Yüksek: 2048+
Toplam max bağlantı = worker_processes × worker_connections
worker_rlimit_nofile= worker_connections × 2  (her bağlantı 2 fd kullanır)
multi_accept        = Yüksek trafikte "on" — aynı anda birden fazla bağlantı kabul et
Temel Kavramlar
⚙️

worker_processes

Her worker ayrı bir CPU çekirdeğinde çalışır. auto değeri CPU sayısını otomatik algılar. Genellikle CPU çekirdek sayısına eşit tutmak en verimli yapılandırmadır.

🔗

worker_connections

Bir worker’ın aynı anda yönetebileceği maksimum bağlantı sayısı. Reverse proxy kullanıyorsanız her istemci bağlantısı için bir de backend bağlantısı açılır — bu değeri 2 ile çarpın.

📁

worker_rlimit_nofile

Her worker’ın açabileceği maksimum dosya sayısı (file descriptor). worker_connections × 2 formülü kullanılır. OS’un ulimit -n değerinden yüksek olamaz.

use epoll

Linux’ta en verimli event model. Nginx bunu otomatik seçer ancak açıkça belirtmek iyi bir pratiktir. FreeBSD için kqueue, eski sistemler için select kullanılır.

🗜️

Gzip Sıkıştırma

HTML, CSS, JS gibi text tabanlı içerikleri sıkıştırarak bant genişliğini %60-80 azaltır. Görseller ve PDF’ler için etkisi azdır — bunları zaten sıkıştırılmış olduğundan Gzip’e dahil etmeyin.

🔒

SSL Session Cache

SSL handshake maliyetlidir. ssl_session_cache ile daha önce bağlanan istemciler handshake’i atlar. 1m boyut yaklaşık 4.000 oturum saklar. ssl_session_timeout ile süre belirlenir.

Parametre Referansı
Parametre Açıklama Önerilen
worker_processes Çalışacak worker process sayısı. CPU sayısına eşit tutun. auto veya CPU sayısı
worker_connections Worker başına maksimum eş zamanlı bağlantı sayısı. 1024 – 4096
worker_rlimit_nofile Worker başına açılabilecek maksimum dosya tanımlayıcısı sayısı. worker_connections × 2
multi_accept Aynı anda birden fazla bağlantı kabul eder. Yüksek trafikte performans artırır. on
keepalive_timeout Bağlantının açık tutulacağı süre. Düşük değer bağlantı sayısını azaltır. 15 – 65s
client_max_body_size İstemcinin gönderebileceği maksimum istek boyutu. Dosya upload için artırın. 16M – 100M
client_body_buffer_size İstek gövdesini bellekte tutma boyutu. Aşılırsa geçici dosya oluşturulur. 16K – 128K
sendfile Kernel seviyesinde dosya transferi. Statik dosyalar için büyük performans kazancı sağlar. on
tcp_nopush Küçük paketleri birleştirerek gönderir. sendfile ile birlikte kullanılır. on
tcp_nodelay Keepalive bağlantılarda gecikmeyi azaltır. tcp_nopush ile birlikte kullanılabilir. on
server_tokens Nginx versiyon bilgisini gizler. Güvenlik için kapatın. off
İzleme Komutları
Aktif bağlantı durumu (stub_status modülü gerekli)
$ curl http://localhost/nginx_status $ ss -s # Soket istatistikleri $ ss -tn state established | wc -l # Aktif TCP bağlantı sayısı
Config test ve yeniden yükleme
$ nginx -t # Config dosyasını test et $ systemctl reload nginx # Aktif bağlantıları kesmeden yeniden yükle
⚠ Dikkat worker_rlimit_nofile değeri OS’un izin verdiği limitten yüksek olamaz. ulimit -n ile mevcut limiti kontrol edin. Gerekirse /etc/security/limits.conf dosyasından artırın.
💡 Pro İpucu Nginx’i PHP-FPM ile kullanıyorsanız upstream bloğunda keepalive direktifini ekleyin. Bu, PHP-FPM’e olan bağlantıların yeniden kullanılmasını sağlar ve performansı önemli ölçüde artırır: keepalive 32;