Nginx; olay tabanlı (event-driven) mimarisi sayesinde yüksek eşzamanlı bağlantıları düşük bellekle yönetebilen, dünyada en çok kullanılan web sunucusu, ters proxy ve yük dengeleyicidir. Igor Sysoev tarafından 2002’de C2K problemine (10K eşzamanlı bağlantı) karşı yazılmış; bugün dünya web sitelerinin %30’undan fazlasını sunmaktadır.
Geleneksel Apache HTTPd’nin “her bağlantıya bir process/thread” modelinin aksine, Nginx tek bir worker’ın binlerce eşzamanlı bağlantıyı non-blocking I/O ile yönettiği bir mimari kullanır. Bu, modern statik sunum, ters proxy ve yük dengeleme yükleri için ideal bir profil oluşturur.
Mono’nun yaklaşımı
Mono ekibinin Nginx kurulumlarındaki standartları:
- TLS: TLS 1.2 minimum, TLS 1.3 etkin; ECDHE + AEAD şifrelemeler; HSTS + preload; OCSP stapling.
- Sıkıştırma:
gzipvebrotliikisi birden (Brotli içinngx_brotlimodülü);gzip_static/brotli_staticile pre-compressed dosyalar. - Cache: Statik dosyalar için
expires 1y immutable, dinamik içinproxy_cache+stale-while-revalidate. - Güvenlik başlıkları:
Strict-Transport-Security,Content-Security-Policy,X-Frame-Options,X-Content-Type-Options,Referrer-Policy,Permissions-Policy— tek bir include dosyasında. - Rate limiting:
limit_req_zoneile endpoint-bazlı;limit_conn_zoneile IP başına bağlantı sınırı. - Logging: JSON format ile Loki/ELK’a gönderim; hassas veri (cookie/auth header) loglanmaz.
Tipik üretim mimarisi
Tipik bir kurulum: CDN/Cloudflare → HAProxy/MetalLB (L4) → Nginx (L7 reverse proxy + TLS terminasyonu + cache) → uygulama backend’i (Tomcat/PHP-FPM/Node.js/Go). Static asset’ler aynı Nginx tarafından try_files ile sunulur; cache miss durumunda backend’e geri-validate.
K8s ortamında Nginx-Ingress Controller veya Traefik kullanılır; her ikisi de Nginx upstream stratejilerine yakındır.
Yaygın sorunlar ve çözümler
- 502/504 Bad Gateway: Backend ölçeklendirme zayıflığı veya
proxy_read_timeoutçok düşük. p99 latency’e göre timeout’u kalibre edin. - 413 Request Entity Too Large:
client_max_body_sizeartırılır (default 1M, dosya yüklemeleri için yetersiz). - Worker high CPU:
accept_mutex off,multi_accept on,events { use epoll; }ayarları kontrol edilir. - Connection refused (sysctl):
net.core.somaxconnvenginx.conf‘talisten ... backlog=4096paralel artırılmalı. - TLS handshake gecikmesi: Session ticket + session cache (
ssl_session_cache shared:SSL:50m) ile %30’a varan iyileşme.
İlgili hizmetlerimiz
Sıkça sorulan sorular
Nginx mi Caddy mi Traefik mi?
Nginx Open Source mu Plus mu?
TLS sertifikalarını nasıl yönetelim?
Yüksek trafikte nasıl ayarlamalıyız?
worker_processes auto, worker_connections 65536, keepalive_requests 1000, keepalive_timeout 65. Upstream tarafında keepalive 64. Sysctl seviyesinde net.core.somaxconn, net.ipv4.tcp_max_syn_backlog, ephemeral port aralığı ayarlanır.