Nginx, yüksek trafikli web sunucularında performans ve ölçeklenebilirlik açısından tercih edilen bir çözümdür.
Nginx, yüksek trafikli web sunucularında performans ve ölçeklenebilirlik açısından tercih edilen bir çözümdür. Özellikle worker_processes ve worker_connections parametreleri, sunucunuzun kapasitesini en verimli şekilde kullanmanızı sağlar. Bu parametreleri doğru optimize etmek, bağlantı gecikmelerini azaltır, kaynak kullanımını dengeler ve sistem çökmelerini önler. Bu makalede, bu iki kritik ayarı adım adım inceleyecek, pratik optimizasyon teknikleri sunacak ve gerçek dünya senaryolarında nasıl uygulanacağını açıklayacağız. Kurumsal ortamlarda, bu ayarlar trafiğin %30-50 oranında daha iyi yönetilmesini sağlayabilir, ancak her zaman sunucu donanımınıza göre uyarlanmalıdır.
Worker_processes direktifi, Nginx’in ana süreç (master process) altında çalıştıracağı işçi süreçlerinin sayısını belirler. Bu süreçler, gelen istekleri paralel olarak işler ve CPU çekirdeklerini tam olarak kullanır. Varsayılan değer 1’dir, ancak modern sunucularda bu değeri artırmak kritik öneme sahiptir. Worker_connections ise her bir worker sürecinin eşzamanlı olarak yönetebileceği maksimum bağlantı sayısını tanımlar. Toplam kapasite, worker_processes x worker_connections formülüyle hesaplanır ve bu, sunucunuzun teorik maksimum bağlantı limitini verir.
Bu kavramları anlamak için, sunucunuzun donanımını değerlendirin. Örneğin, 4 çekirdekli bir CPU’da worker_processes’i 4 olarak ayarlamak, her çekirdeğe bir süreç atar ve bağlam değiştirmeyi minimize eder. Worker_connections’ı 1024 olarak başlatmak yaygın bir pratiktir, ancak yüksek trafikli sitelerde 4096’ya çıkarılabilir. Bu ayarlar, events bloğu içinde tanımlanır ve nginx.conf dosyasını yeniden yükleyerek etkinleştirilir: nginx -s reload.
Worker_processes, Nginx’in çoklu süreç mimarisinin temel taşıdır. Her süreç, kendi event döngüsünü çalıştırır ve dosya tanımlayıcılarını (file descriptors) paylaşmaz. Bu sayede, bir süreçteki hata diğerlerini etkilemez. Optimizasyon için, grep ^processor /proc/cpuinfo | wc -l komutuyla CPU çekirdek sayısını öğrenin ve worker_processes’i buna eşitleyin. Auto modu (worker_processes auto;) modern Nginx sürümlerinde önerilir, çünkü dinamik olarak çekirdekleri algılar. Kurumsal sunucularda, bu ayar trafiğin ani artışlarında %20’ye varan CPU yükü tasarrufu sağlar. Uygulamada, conf dosyanızda worker_processes auto; yazarak başlayın ve yük testi yapın.
Worker_connections, her worker’ın ulimit -n ile belirlenen sistem limitine tabi olarak bağlantılarını yönetir. Yüksek değerler bellek kullanımını artırır, çünkü her bağlantı yaklaşık 1-2 KB bellek tüketir. Örneğin, 8 worker ve 1024 connections ile toplam 8192 bağlantı kapasitesi elde edilir. Linux’ta /etc/security/limits.conf’ta nginx kullanıcısına nginx soft nofile 65536 ekleyin. Bu, bağlantı reddetmelerini önler. Pratikte, ulimit -n 65536 ile test edin ve nginx.conf’ta events { worker_connections 4096; } tanımlayın. Bu değişiklikler, DDoS saldırılarına karşı direnci artırır.
Optimizasyon, sistem kaynaklarını analiz ederek başlar. Önce free -h ile RAM’i, nproc ile CPU’yu kontrol edin. Ardından, mevcut konfigürasyonu görüntüleyin: nginx -T. Worker_processes’i CPU çekirdeklerine, worker_connections’ı RAM kapasitesine göre ayarlayın. Bellek formülü: (worker_processes x worker_connections x 2 KB) + paylaşılan bellek. 16 GB RAM’li bir sunucuda, 8 worker x 2048 connections güvenli bir başlangıçtır. Değişiklikleri test etmek için ApacheBench veya wrk gibi araçlar kullanın: wrk -t12 -c400 -d30s http://localhost/.
nginx -t.tail -f /var/log/nginx/access.log.Bu adımlar, kurumsal deployment’larda standarttır ve manuel inceleme gerektirir. Yüksek trafik için, worker_rlimit_nofile direktifini ekleyin ki sistem limitlerini aşmasın.
Sunucu optimizasyonu, donanım envanteriyle başlar. CPU çekirdeklerini lscpu ile listeleyin; hiper-threading varsa fiziksel çekirdekleri tercih edin. RAM için, Nginx’in worker başına 10-50 MB kullandığı varsayılır. 32 GB RAM’de, worker_connections’ı 4096’ya çıkarabilirsiniz. Disk I/O’su SSD ise statik dosya servisi için worker_processes artışı faydalıdır. Örnek: 16 çekirdekli sunucuda worker_processes 16; events { worker_connections 2048; multi_accept on; }. Bu konfigürasyon, 32K+ eşzamanlı bağlantıyı destekler ve gecikmeyi 50 ms altına çeker. Her zaman benchmark yapın.
Optimizasyon sırasında güvenlik limitlerini unutmayın. Sysctl ile net.core.somaxconn = 65535 ayarlayın (/etc/sysctl.conf). Nginx’te limit_req_zone ve limit_conn_zone ile rate limiting entegre edin. Worker_connections yüksekken, connection pooling etkinleştirin. Pratik örnek: events { worker_connections 8192; use epoll; }. Epoll, Linux’ta en verimli event methodudur. Bu ayarlar, brute-force saldırılarını %90 azaltır ve kaynakları korur. Değişiklik sonrası sysctl -p çalıştırın.
Gerçek bir nginx.conf örneğiyle başlayalım: worker_processes auto; events { worker_connections 4096; worker_rlimit_nofile 16384; }. Bu, orta ölçekli bir e-ticaret sitesinde idealdir. Uygulamak için dosyayı düzenleyin, test edin ve reload edin. İzleme için Prometheus + Grafana entegrasyonu önerilir; nginx exporter ile worker kullanımını takip edin. Log formatını özelleştirin: log_format main ‘$remote_addr – $remote_user [$time_local] “$request” $status $body_bytes_sent “$http_referer” “$http_user_agent”;.
Sürekli optimizasyon, yük profiline göre ayarlama gerektirir. Yeni Relic veya Datadog gibi araçlarla CPU, bellek ve bağlantı metriklerini izleyin. Haftalık incelemelerde, worker_processes’i dinamik ölçeklendirin. Sonuç olarak, bu optimizasyonlar sunucunuzun verimliliğini maksimize eder ve kesintisiz hizmet sağlar.
Bu rehberi uygulayarak, Nginx sunucunuzu kurumsal standartlara ulaştırabilirsiniz. Düzenli testler ve incelemelerle, performansınızı sürekli iyileştirin ve iş kritik uygulamalarınızda güvenilirlik kazanın.