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.
$ 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
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
nproc ile öğrenin.
free -m ile öğrenin.
sendfile ve aio ayarlarını etkiler.
Buffer ve timeout değerlerini etkiler.
0 = keepalive kapalı. Çoğu site için 65 önerilir.
Bant genişliğini %60-80 azaltır.
SSL session cache ayarları eklenir.
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
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 | 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 |
$ curl http://localhost/nginx_status
$ ss -s # Soket istatistikleri
$ ss -tn state established | wc -l # Aktif TCP bağlantı sayısı
$ nginx -t # Config dosyasını test et
$ systemctl reload nginx # Aktif bağlantıları kesmeden yeniden yükle
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.
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;