NGINX Worker Settings nedir? Nginx Worker Settings Ayarları nasıl yapılır?
Worker Process Nedir?
NGINX, yüksek performanslı bir master-worker mimarisi kullanır:
- Master Process: Konfigürasyon dosyalarını okur, worker process’leri yönetir ve sinyal işleme görevlerini üstlenir
- Worker Process’ler: Gerçek HTTP isteklerini işler, istemci bağlantılarını kabul eder ve yanıtları döner
- Bu mimari sayesinde NGINX, aynı anda binlerce bağlantıyı verimli bir şekilde işleyebilir
Worker process’ler birbirinden bağımsız çalışır ve bir worker’da oluşan sorun diğerlerini etkilemez.
Temel Ayarlar
Worker Process Sayısı
# Ana worker process sayısını belirler
# auto: CPU çekirdek sayısına göre otomatik ayarlar
# Sayı: Manuel olarak worker process sayısını belirler
worker_processes auto;
Worker Connections
events {
# Her worker process'in aynı anda işleyebileceği maksimum EŞZAMANLI bağlantı sayısı
# bu değer worker_rlimit_nofile'dan küçük olmalı (eğer tanımlıysa)
# Hesaplama: worker_connections < (worker_rlimit_nofile - 500)
# hesaplamada 500, nginx'in kendi dosya açma işlemleri için ayrılan sayıdır
# NOT: Bu değer toplam istek sayısını değil, aynı anda açık olan bağlantı sayısını belirler
worker_connections 1024;
}
Dosya Limiti
# Worker process başına açık dosya limiti
# Bu değer ulimit -n değerinden küçük veya eşit olmalı
# Linux içerisinde olan limiti ezer yani aslında bu limit verilirse nginx bu limiti kullanır
# Eğer limit verilmezse container içerisindeki limit kullanılır(ulimit -n)
worker_rlimit_nofile 65535;
Gelişmiş Ayarlar
Event Model
events {
# Linux için en verimli I/O event model (epoll)
use epoll;
# bir worker'ın aynı anda birden fazla yeni bağlantıyı kabul edip edemeyeceği
# on: Performans artışı sağlar, off: Daha dengeli dağılım
multi_accept on;
# worker process'lerin yük dengeleme stratejisi
# off: Tüm worker'lar eşit şekilde bağlantı kabul eder (önerilen)
# on: Sıralı olarak bağlantı kabul eder (eski davranış)
accept_mutex off;
}
Worker Priority
# Worker process önceliği (-20 en yüksek, 20 en düşük)
# nginx worker process'lerinin işletim sistemi seviyesindeki önceliğini belirler. (Default: 0)
worker_priority 0;
Monitoring Endpoints
# Worker process bilgilerini gösteren endpoint
location /nginx-status {
stub_status on;
access_log off;
allow 127.0.0.1;
allow ::1;
deny all;
}
# Test endpoint - Worker process PID ve zaman bilgisi
location /test {
return 200 "Worker Process Test - PID: $pid \n Time: $time_local\n";
add_header Content-Type text/plain;
}
Kullanım
# Projeyi çalıştır
docker compose up -d
# Status kontrolü
#curl container içerisinden nginx-status'e istek atılırsa worker process sayısı ve bağlantı bilgileri gelir
# Worker bilgisi
curl http://localhost:8080/test
Optimizasyon İpuçları
- Worker Process Sayısı:
worker_processes auto
– CPU çekirdek sayısına göre otomatik ayarlar - Bağlantı Hesabı:
worker_processes × worker_connections = toplam eşzamanlı bağlantı
- Dosya Limiti Hesabı:
worker_connections < (worker_rlimit_nofile - 500)
- 500, nginx’in kendi dosya açma işlemleri için ayrılan dosya sayısıdır
- Sistem Limiti: worker_rlimit_nofile ≤ ulimit -n (sistem limiti)
Yaygın Hatalar
- “too many open files” →
worker_rlimit_nofile
artırın - Düşük performans →
worker_processes auto
kullanın - Connection refused →
worker_connections
artırın
ulimit -n Nedir?
ulimit -n
komutu, bir işlemin (process) aynı anda açabileceği maksimum dosya tanımlayıcı (file descriptor) sayısını gösterir ve kontrol eder. Bu limitler şunları kapsar:
Mevcut Limiti Görüntüleme
# Mevcut soft limit
ulimit -n
# Tüm limitler
ulimit -a
# Hard ve soft limitleri göster
ulimit -Hn # Hard limit
ulimit -Sn # Soft limit
Geçici Olarak Değiştirme
# Soft limiti artır (sadece mevcut session için)
ulimit -n 65536
# Hard limit aşılamaz, sadece soft limit değiştirilebilir
ulimit -n 100000 # Hard limitten büyükse hata verir
Kalıcı Hale Getirme
Sistem Geneli – /etc/security/limits.conf
# /etc/security/limits.conf dosyasına ekle
* soft nofile 65536
* hard nofile 65536
# Belirli kullanıcı için
nginx soft nofile 100000
nginx hard nofile 100000
⚠️ Önemli:
/etc/security/limits.conf
dosyasındaki değişiklikler sistem yeniden başlatıldığında veya kullanıcı yeniden login olduğunda etkili olur. Mevcut çalışan process’ler (NGINX dahil) bu değişiklikten etkilenmez. NGINX’i yeniden başlatmanız gerekir.
Önemli Notlar
- Soft Limit: Kullanıcının değiştirebileceği limit
- Hard Limit: Sadece root’un değiştirebileceği maksimum limit