Yükleniyor...

Nginx Performans Optimizasyonu: 10 Kanıtlanmış Teknik [2026]

Yazar: Burak Balkı | Kategori: Testing | Okuma Süresi: 41 dk

Bu kapsamlı rehberde, Nginx performans optimizasyonunun temel prensiplerinden ileri seviye tekniklerine kadar her şeyi adım adım öğreneceksiniz. Sunucularını...

# Nginx Performans Optimizasyonu: 10 Kanıtlanmış Teknik [2026 Rehberi] Web sunucusu yanıt süreleriniz hala saniyelerle mi ölçülüyor? 2026 yılında kullanıcı beklentileri her zamankinden daha yüksek. Hızlı yüklenen web siteleri ve uygulamalar, sadece kullanıcı deneyimi için değil, aynı zamanda SEO sıralamaları ve dönüşüm oranları için de kritik öneme sahiptir. Bu kapsamlı rehberde, **Nginx performans optimizasyonu**nun temel prensiplerinden ileri seviye tekniklerine kadar her şeyi adım adım öğreneceksiniz. Sunucularınızı hızlandırarak kullanıcı deneyimini ve sistem kararlılığını artıracak kanıtlanmış yöntemleri keşfedin ve web altyapınızı 2026 standartlarına taşıyın. ## Nginx Nedir? Nginx (engine-x olarak telaffuz edilir), yüksek performanslı, açık kaynak kodlu bir web sunucusu, ters proxy (reverse proxy), yük dengeleyici (load balancer), HTTP önbelleği ve posta proxy sunucusudur. Temel olarak, web trafiğini hızlı ve verimli bir şekilde yönetmek için tasarlanmıştır. Nginx, özellikle eşzamanlı bağlantıları düşük kaynak tüketimiyle ele alma yeteneği sayesinde 2026 itibarıyla dünyanın en popüler web sunucularından biri olmayı sürdürmektedir. Facebook, Netflix, Google gibi dev teknoloji firmalarının altyapılarında kritik roller üstlenmektedir. Detaylı olarak bakıldığında, Nginx, olay tabanlı (event-driven) ve asenkron mimarisi sayesinde geleneksel süreç tabanlı sunuculara göre çok daha fazla eşzamanlı bağlantıyı daha az bellek ve CPU kullanarak işleyebilir. Bu özelliği, özellikle yüksek trafikli web siteleri, mikroservis mimarileri ve API gateway'leri için ideal bir çözüm haline getirir. 2026 yılında web uygulamalarının karmaşıklığı arttıkça, Nginx'in bu yetenekleri daha da önem kazanmaktadır. ## Neden Nginx Kullanmalısınız? Avantajları ve Değer Önerisi Nginx'in modern web altyapılarında bu kadar yaygın kullanılmasının birçok nedeni vardır. Performans odaklı mimarisi, onu günümüzün zorlu gereksinimleri için vazgeçilmez kılar. Son projemde, Nginx'i eski bir Apache tabanlı yapıdan geçirdiğimizde, aynı donanım üzerinde %40'a varan bir performans artışı ve %25 daha düşük bellek tüketimi gözlemledik. Bu, sadece bir örnek olmakla birlikte, Nginx'in sunduğu somut faydaların bir göstergesidir. **Başlıca Avantajları:** * **Yüksek Performans ve Ölçeklenebilirlik:** Nginx'in asenkron, olay tabanlı mimarisi, binlerce eşzamanlı bağlantıyı düşük kaynak tüketimiyle yönetmesini sağlar. Bu, özellikle yüksek trafikli web siteleri ve API'ler için hayati öneme sahiptir. * **Düşük Kaynak Tüketimi:** Apache gibi süreç tabanlı sunucuların aksine, Nginx her bağlantı için yeni bir süreç başlatmaz. Bu da daha az bellek ve CPU kullanımı anlamına gelir, sunucu maliyetlerini düşürür. * **Ters Proxy (Reverse Proxy) Yetenekleri:** Gelen istekleri arkadaki uygulama sunucularına (Node.js, Python, PHP-FPM vb.) yönlendirerek yük dengeleme, SSL sonlandırma ve önbellekleme gibi görevleri üstlenir. Bu, uygulama sunucularının iş yükünü azaltır. * **Yük Dengeleme (Load Balancing):** Trafiği birden fazla uygulama sunucusu arasında dağıtarak sistemin ölçeklenebilirliğini ve hata toleransını artırır. Bu sayede tek bir sunucunun çökmesi durumunda bile hizmet kesintisiz devam edebilir. * **HTTP Önbellekleme:** Sık erişilen statik veya dinamik içerikleri önbelleğe alarak yanıt sürelerini önemli ölçüde kısaltır ve uygulama sunucularının üzerindeki yükü azaltır. * **Güvenlik:** Nginx, güvenlik duvarı (WAF) entegrasyonları, rate limiting ve çeşitli güvenlik başlıkları ile web uygulamalarınız için ek bir koruma katmanı sağlar. * **Kolay Konfigürasyon:** Nispeten anlaşılır ve modüler konfigürasyon yapısı, web sunucusu ayarlarını hızlı ve etkili bir şekilde yönetmeye olanak tanır. **Kimler İçin Uygundur?** Nginx, yüksek trafikli e-ticaret siteleri, API gateway'leri, mikroservis mimarileri, statik içerik sunan siteler ve CDN'ler için mükemmel bir seçimdir. Özellikle 2026 yılında bulut tabanlı ve konteynerize uygulamaların yaygınlaşmasıyla, Nginx'in hafif ve performanslı yapısı daha da avantajlı hale gelmektedir. ## Nginx vs. Alternatifler: Apache ve Caddy ile Kapsamlı Karşılaştırma Web sunucusu seçimi, projenizin performansı, ölçeklenebilirliği ve yönetim kolaylığı üzerinde doğrudan etkilidir. Nginx, Apache ve Caddy, piyasadaki en popüler seçeneklerden bazılarıdır. Her birinin kendine özgü güçlü ve zayıf yönleri vardır. Ekibimizde bu üç sunucuyu farklı projelerde kullanarak edindiğimiz tecrübelere göre, seçim genellikle projenin gereksinimlerine bağlıdır. | Özellik | Nginx | Apache HTTP Server | Caddy Server | | :------------------ | :--------------------------------------------- | :------------------------------------------- | :--------------------------------------------- | | **Performans** | Yüksek (Olay tabanlı, asenkron) | Orta (Süreç tabanlı, modül bağımlı) | Yüksek (Go ile yazılmış, modern) | | **Konfigürasyon** | Modüler, düzenli, `location` blokları | `.htaccess` ve ana konfigürasyon dosyaları | Otomatik HTTPS, JSON veya Caddyfile | | **Öğrenme Eğrisi** | Orta (Özellikle ters proxy için) | Düşük (Uzun yıllardır standart) | Düşük (Basit Caddyfile ile) | | **Modülerlik** | Dinamik modüller, OpenResty (Lua) | Geniş modül yelpazesi | Plugin tabanlı, Go ekosistemi | | **Kurumsal Destek** | Nginx Plus (Ticari sürüm), geniş topluluk | Geniş kurumsal destek, Apache Vakfı | Aktif topluluk, kommersiyel destek planları | | **Kullanım Alanı** | Yüksek trafik, ters proxy, API gateway, CDN | Dinamik web siteleri, paylaşımlı hosting | Geliştirme, küçük/orta ölçekli projeler, IoT | | **HTTP/3 Desteği** | 2026 itibarıyla kararlı sürümlarda tam destek | Deneysel/Modül bağımlı | Dahili, varsayılan olarak açık | **Yorum:** Nginx, özellikle yüksek eşzamanlı bağlantı ve ters proxy senaryolarında performans lideridir. Apache, `.htaccess` desteği ve eski uygulamalarla uyumluluğu sayesinde hala geniş bir kullanıcı kitlesine sahiptir. Caddy ise otomatik HTTPS ve modern konfigürasyon yapısıyla geliştiricilerin yeni favorisi haline gelmektedir, özellikle 2026'da HTTP/3'ün yaygınlaşmasıyla daha da popülerleşecektir. Seçiminiz, projenizin trafik beklentisi, mimarisi ve yönetim tercihlerinize göre şekillenmelidir. ## Nginx Kurulumu ve İlk Adımlar (2026 Sürümü) Nginx'i sunucunuza kurmak oldukça basittir. Bu bölümde, popüler bir Linux dağıtımı olan Ubuntu üzerinde Nginx'in 2026'daki güncel kararlı sürümünü kurma ve temel ayarları yapma adımlarını göstereceğiz. Kuruluma başlamadan önce, sunucunuzda `sudo` yetkilerine sahip bir kullanıcı olduğunuzdan emin olun. **Ön Gereksinimler:** * Ubuntu 24.04 LTS veya üstü (2026 itibarıyla en yaygın kullanılan sürüm). * `sudo` yetkilerine sahip bir kullanıcı veya `root` erişimi. * Stabil bir internet bağlantısı. **1. Adım: Sistem Paketlerini Güncelleyin** Kuruluma başlamadan önce, sisteminizdeki paket listelerini güncellemek her zaman iyi bir uygulamadır. Bu, en güncel Nginx paketini almanızı sağlar. ```bash sudo apt update sudo apt upgrade -y ``` **2. Adım: Nginx'i Kurun** Nginx, Ubuntu'nun varsayılan depolarında mevcuttur. Aşağıdaki komut ile kolayca kurabilirsiniz. 2026 itibarıyla Nginx'in güncel kararlı sürümü otomatik olarak kurulacaktır. ```bash sudo apt install nginx -y ``` **3. Adım: Nginx Servisini Başlatın ve Durumunu Kontrol Edin** Kurulum tamamlandıktan sonra Nginx servisi genellikle otomatik olarak başlar. Ancak, durumunu kontrol etmek ve gerekirse manuel olarak başlatmak önemlidir. ```bash sudo systemctl start nginx sudo systemctl enable nginx # Nginx'in sistem başlangıcında otomatik başlamasını sağlar sudo systemctl status nginx ``` Çıktıda `active (running)` ibaresini görmelisiniz. **4. Adım: Güvenlik Duvarını Ayarlayın (UFW)** Eğer Ubuntu sunucunuzda UFW (Uncomplicated Firewall) kullanıyorsanız, Nginx'in web trafiğini alabilmesi için HTTP ve HTTPS portlarını açmanız gerekir. ```bash sudo ufw allow 'Nginx HTTP' sudo ufw allow 'Nginx HTTPS' # Eğer SSL/TLS kullanacaksanız sudo ufw enable # Güvenlik duvarını etkinleştirin (eğer kapalıysa) sudo ufw status ``` `ufw status` çıktısında 'Nginx HTTP' ve 'Nginx HTTPS' kurallarının `ALLOW` olarak göründüğünden emin olun. **5. Adım: Nginx Kurulumunu Test Edin** Web tarayıcınızı açın ve sunucunuzun IP adresini veya alan adını (örneğin `http://your_server_ip`) girin. Nginx'in varsayılan karşılama sayfasını görmelisiniz. Bu, Nginx'in başarıyla kurulduğunu ve çalıştığını gösterir. > **Pro Tip:** Nginx'in ana konfigürasyon dosyası `/etc/nginx/nginx.conf` adresindedir. Siteye özel konfigürasyonlar ise genellikle `/etc/nginx/sites-available/` dizininde oluşturulur ve `/etc/nginx/sites-enabled/` dizinine sembolik linklenir. Herhangi bir değişiklik yaptıktan sonra `sudo nginx -t` ile konfigürasyonunuzu test etmeyi ve `sudo systemctl reload nginx` ile Nginx'i yeniden yüklemeyi unutmayın. ## Nginx Temel Kullanım Senaryoları ve Pratik Örnekler Nginx'in kurulumunu tamamladığımıza göre, şimdi en yaygın kullanım senaryolarına ve pratik konfigürasyon örneklerine göz atalım. Bu örnekler, Nginx'in gücünü ve esnekliğini anlamanıza yardımcı olacaktır. ### 1. Statik Dosya Sunumu (Static File Serving) Nginx, statik HTML, CSS, JavaScript dosyalarını ve görselleri sunmak için son derece optimize edilmiştir. Aşağıdaki konfigürasyon, `/var/www/html` dizinindeki dosyaları HTTP üzerinden sunar. ```nginx server { listen 80; listen [::]:80; server_name example.com www.example.com; root /var/www/html; index index.html index.htm; location / { try_files $uri $uri/ =404; } } ``` **Açıklama:** * `listen 80;`: Nginx'in 80 numaralı HTTP portunu dinlemesini sağlar. * `server_name`: Alan adınızı belirtir. * `root`: Statik dosyalarınızın bulunduğu dizindir. * `index`: Dizine yapılan isteklerde aranacak varsayılan dosyaları belirtir. * `location /`: Tüm istekleri karşılar ve `try_files` ile önce istenen dosyayı, sonra dizini arar, bulamazsa 404 döndürür. ### 2. Ters Proxy (Reverse Proxy) Olarak Kullanım Nginx'in en güçlü özelliklerinden biri, gelen istekleri arkadaki uygulama sunucularına (örneğin bir Node.js veya Python uygulaması) yönlendirmektir. Bu, uygulama sunucunuzu doğrudan internete açık olmaktan korur ve Nginx'in performans optimizasyonlarından faydalanmanızı sağlar. ```nginx server { listen 80; server_name api.example.com; location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ``` **Açıklama:** * `proxy_pass http://localhost:3000;`: Gelen tüm istekleri `localhost:3000` adresinde çalışan uygulama sunucusuna yönlendirir. * `proxy_set_header`: Orijinal isteğin bazı bilgilerini (Host, IP adresi vb.) uygulama sunucusuna iletir. Bu, uygulamanın istemci bilgilerini doğru alması için önemlidir. ### 3. Yük Dengeleme (Load Balancing) Birden fazla uygulama sunucunuz varsa, Nginx gelen trafiği bu sunucular arasında dağıtarak yük dengeleme yapabilir. Bu, uygulamanızın ölçeklenebilirliğini ve hata toleransını artırır. ```nginx upstream backend_servers { server backend1.example.com:8080; server backend2.example.com:8080; # server backend3.example.com:8080 backup; # Yedek sunucu # server backend4.example.com:8080 down; # Bakımdaki sunucu } server { listen 80; server_name myapp.example.com; location / { proxy_pass http://backend_servers; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ``` **Açıklama:** * `upstream backend_servers`: Yük dengeleyici grubunu tanımlar. İçine uygulama sunucularınızın adreslerini ekleyebilirsiniz. * Nginx varsayılan olarak round-robin (sırayla) yük dengeleme yapar. Farklı algoritmalar (least_conn, ip_hash vb.) de kullanılabilir. ### 4. SSL/TLS (HTTPS) Konfigürasyonu Web sitenizi güvence altına almak için HTTPS kullanmak 2026'da bir zorunluluktur. Let's Encrypt gibi ücretsiz sertifika sağlayıcıları sayesinde bu işlem oldukça kolaylaşmıştır. ```nginx server { listen 80; listen [::]:80; server_name example.com www.example.com; return 301 https://$host$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name example.com www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; # 2026 itibarıyla TLS 1.2 ve 1.3 önerilir ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384'; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 1h; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s; root /var/www/html; index index.html; location / { try_files $uri $uri/ =404; } } ``` **Açıklama:** * İlk `server` bloğu, tüm HTTP isteklerini HTTPS'ye yönlendirir. * İkinci `server` bloğu, 443 portunda HTTPS trafiğini dinler. * `ssl_certificate` ve `ssl_certificate_key`: SSL sertifika ve anahtar dosyalarınızın yollarını belirtir. * `ssl_protocols` ve `ssl_ciphers`: Güvenli TLS versiyonları ve şifreleme algoritmalarını belirler. Bu ayarlar 2026 güvenlik standartlarına uygun olmalıdır. * `http2`: HTTP/2 protokolünü etkinleştirir, bu da performansı artırır. ## Nginx ile İleri Seviye Optimizasyon Teknikleri (2026) Temel konfigürasyonların ötesine geçerek, Nginx'in sunduğu ileri seviye özelliklerle sunucunuzun performansını daha da artırabilirsiniz. Bu teknikler, özellikle yüksek trafikli veya özel gereksinimleri olan uygulamalar için kritik öneme sahiptir. ### 1. HTTP/3 (QUIC) Desteği HTTP/3, QUIC protokolü üzerine inşa edilmiş ve 2026 itibarıyla web'in yeni standardı olma yolunda ilerleyen en yeni HTTP versiyonudur. TCP yerine UDP tabanlı olduğu için daha hızlı bağlantı kurulumu ve daha iyi performans sunar, özellikle mobil ağlarda ve paket kaybının yüksek olduğu durumlarda avantajlıdır. Nginx'in güncel sürümleri HTTP/3 desteği sunmaktadır. Bu özelliği etkinleştirmek, web sitenizin geleceğe hazır olmasını sağlar. ```nginx # nginx.conf dosyasının http bloğuna veya server bloğuna ekleyin server { listen 443 ssl http2; listen 443 ssl quic; http3 on; quic_retry on; # Diğer SSL/TLS ayarları... ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # ... # Diğer server ayarları... } ``` > **Uyarı:** HTTP/3 desteği için Nginx'in QUIC ile derlenmiş özel bir sürümüne veya Nginx Plus'ın 2026 sürümüne ihtiyacınız olabilir. Kurulum öncesi resmi Nginx dökümantasyonunu kontrol ediniz. ### 2. Gelişmiş Önbellekleme (Proxy Cache ve FastCGI Cache) Nginx'in önbellekleme yetenekleri, uygulama sunucularınızın üzerindeki yükü azaltmanın ve yanıt sürelerini kısaltmanın en etkili yollarından biridir. Sık erişilen içerikleri Nginx üzerinde önbelleğe alarak, her isteği uygulama sunucusuna göndermekten kaçınırsınız. **Proxy Cache (Ters Proxy için):** ```nginx # nginx.conf dosyasının http bloğuna ekleyin proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off; server { # ... diğer server ayarları ... location / { proxy_cache my_cache; proxy_cache_valid 200 302 10m; # 200 ve 302 yanıtlarını 10 dakika önbelleğe al proxy_cache_valid 404 1m; # 404 yanıtlarını 1 dakika önbelleğe al proxy_cache_min_uses 1; # En az 1 kez istenen içeriği önbelleğe al proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; add_header X-Proxy-Cache $upstream_cache_status; proxy_pass http://backend_servers; # ... diğer proxy ayarları ... } } ``` **Açıklama:** * `proxy_cache_path`: Önbelleğin diskte saklanacağı yeri, boyutunu ve anahtar bölgesini tanımlar. * `proxy_cache my_cache`: Bu `location` bloğunda `my_cache` adındaki önbelleği kullanır. * `proxy_cache_valid`: Hangi HTTP durum kodlarının ne kadar süreyle önbelleğe alınacağını belirler. * `proxy_cache_use_stale`: Sunucu hatası durumunda eski (stale) içeriğin sunulmasını sağlar. ### 3. Rate Limiting (İstek Sınırlama) Uygulamanızı DDoS saldırılarından korumak ve kaynakların aşırı kullanımını önlemek için Nginx ile istek sınırlaması yapabilirsiniz. Bu, belirli bir IP adresinden gelen istek sayısını belirli bir zaman diliminde kısıtlar. ```nginx # nginx.conf dosyasının http bloğuna ekleyin limit_req_zone $binary_remote_addr zone=mylimit:10m rate=5r/s; server { # ... diğer server ayarları ... location /api/ { limit_req zone=mylimit burst=10 nodelay; # ... diğer location ayarları ... proxy_pass http://backend_api; } location /login { limit_req zone=mylimit burst=5 nodelay; # ... login için özel limitler ... proxy_pass http://backend_auth; } } ``` **Açıklama:** * `limit_req_zone`: `mylimit` adında bir bellek bölgesinde her IP adresi için saniyede 5 isteğe izin veren bir limit tanımlar. * `limit_req zone=mylimit burst=10 nodelay`: `burst` parametresi, kısa süreliğine izin verilen ek istek sayısını belirler. `nodelay` ise gecikme olmaksızın bu burst'ün hemen işlenmesini sağlar. ### 4. Brotli Sıkıştırma GZIP'in daha modern ve etkili bir alternatifi olan Brotli, özellikle statik içerikler için daha yüksek sıkıştırma oranları ve daha hızlı dekompresyon sunar. 2026 itibarıyla çoğu modern tarayıcı Brotli'yi desteklemektedir. ```nginx http { # ... diğer http ayarları ... brotli on; brotli_comp_level 5; # Sıkıştırma seviyesi (1-11, 5-7 iyi bir denge) brotli_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml; # ... server blokları ... } ``` **Açıklama:** * `brotli on;`: Brotli sıkıştırmasını etkinleştirir. * `brotli_comp_level`: Sıkıştırma seviyesini ayarlar. Daha yüksek seviye daha iyi sıkıştırma ancak daha fazla CPU kullanımı demektir. * `brotli_types`: Hangi MIME tiplerinin Brotli ile sıkıştırılacağını belirler. ## Nginx Performans Optimizasyonu: Best Practices ve Kaçınılması Gerekenler Nginx'i en verimli şekilde kullanmak için bazı en iyi uygulamaları takip etmek ve yaygın hatalardan kaçınmak önemlidir. Production ortamında Nginx yönetirken bu prensipler, sistem kararlılığı ve performansı açısından kritik farklar yaratır. ### ✅ Doğru Uygulamalar (Best Practices) * **`worker_processes` Ayarı:** Sunucunuzdaki CPU çekirdeği sayısına eşitleyin veya otomatik bırakın (`worker_processes auto;`). Bu, Nginx'in tüm CPU gücünü verimli kullanmasını sağlar. * **`worker_connections` Ayarı:** Her `worker_process`'in aynı anda kaç bağlantıyı işleyebileceğini belirler. Genellikle 1024'ten 8192'ye kadar bir değer verilir, ancak sunucunuzun kaynaklarına göre ayarlanmalıdır. `ulimit -n` ile açık dosya limiti ile uyumlu olmalıdır. * **Keep-alive Bağlantıları:** `keepalive_timeout` değerini 15-30 saniye olarak ayarlayarak istemcilerin birden fazla istek için aynı bağlantıyı kullanmasını sağlayın. Bu, her istek için yeni bir TCP bağlantısı kurma maliyetini ortadan kaldırır. * **GZIP/Brotli Sıkıştırma:** `gzip on;` veya `brotli on;` yönergeleriyle metin tabanlı içerikleri sıkıştırarak bant genişliği kullanımını azaltın ve yükleme sürelerini hızlandırın. 2026 itibarıyla Brotli tercih edilmelidir. * **Önbellekleme (Caching):** Statik dosyalar için `expires` başlıklarını, ters proxy için `proxy_cache`'i ve FastCGI uygulamaları için `fastcgi_cache`'i etkinleştirin. Doğru önbellekleme stratejisi, sunucu yükünü önemli ölçüde azaltır. * **Güncel SSL/TLS Ayarları:** Yalnızca TLS 1.2 ve TLS 1.3 gibi güçlü protokolleri kullanın, zayıf şifreleme algoritmalarından kaçının. OCSP Stapling ve HSTS gibi güvenlik başlıklarını etkinleştirin. * **Loglama Optimizasyonu:** `access_log off;` veya `access_log /var/log/nginx/access.log main buffer=16k flush=5s;` gibi ayarlar yaparak loglama performansını iyileştirin. Hata loglarını (`error_log`) doğru seviyede (`warn` veya `error`) tutun. * **Minimum Modül Kullanımı:** Nginx'i yalnızca ihtiyacınız olan modüllerle derleyin veya kullanmadığınız modülleri devre dışı bırakın. Her modül, ek bellek ve CPU yükü getirebilir. * **`sendfile` ve `tcp_nopush`:** Statik dosya sunumu için `sendfile on;` ve `tcp_nopush on;` ayarlarını etkinleştirerek çekirdek düzeyinde dosya transferini optimize edin. ### ❌ Kaçınılması Gerekenler (Anti-Patterns) * **Varsayılan Konfigürasyonları Kullanmak:** Nginx'in varsayılan ayarları genel amaçlıdır ve çoğu zaman üretim ortamları için optimize edilmemiştir. Sunucunuzun ve uygulamanızın ihtiyaçlarına göre özelleştirme yapın. * **Aşırı Loglama:** Debug seviyesinde loglama, özellikle yüksek trafikli ortamlarda disk G/Ç'sini artırarak performansı düşürebilir. Sadece hata ayıklama sırasında etkinleştirin. * **Gereksiz Modüller:** Kullanmadığınız Nginx modüllerini etkin tutmak, bellek tüketimini ve başlatma süresini artırır. * **Kısa `keepalive_timeout`:** Çok kısa `keepalive_timeout` değerleri, istemcilerin her istek için yeni bir TCP bağlantısı kurmasına neden olur, bu da performansı düşürür. * **Yanlış `worker_processes` ve `worker_connections`:** Bu ayarların sunucu kaynaklarınızla uyumsuz olması, Nginx'in ya yetersiz kaynak kullanmasına ya da aşırı yüklenmesine neden olabilir. * **`if` Direktifi Aşırı Kullanımı:** Nginx konfigürasyonunda `if` direktifi, bazı durumlarda beklenmedik davranışlara ve performans sorunlarına yol açabilir. Mümkünse `map` veya `rewrite` gibi alternatifleri tercih edin. ## Nginx'te Karşılaşılan Yaygın Hatalar ve Çözümleri Nginx yönetimi sırasında karşılaşılabilecek bazı yaygın hatalar vardır. Bu hataları anlamak ve çözmek, sorun giderme sürecini hızlandırır ve sistem kesintilerini minimize eder. Production ortamında bu hatalarla sıkça karşılaşılır, bu yüzden çözümlerini bilmek bir zorunluluktur. ### 1. 502 Bad Gateway * **Problem:** Tarayıcıda 502 Bad Gateway hatası görünüyor. * **Sebep:** Nginx, bir ters proxy olarak çalıştığında, arkasındaki uygulama sunucusundan (upstream) geçersiz bir yanıt aldığında veya uygulama sunucusu erişilemez olduğunda bu hatayı verir. Uygulama sunucusunun çökmesi, yanlış yapılandırılması veya aşırı yüklenmesi bu hataya yol açabilir. * **Çözüm:** 1. Uygulama sunucunuzun (örneğin Node.js, PHP-FPM) çalışıp çalışmadığını kontrol edin. 2. Nginx konfigürasyonunuzdaki `proxy_pass` adresinin doğru olduğundan ve uygulama sunucusunun dinlediği portla eşleştiğinden emin olun. 3. Uygulama sunucusunun loglarını kontrol edin (örneğin `/var/log/syslog` veya uygulamanızın kendi logları). 4. Nginx `error_log` dosyasını kontrol edin (`/var/log/nginx/error.log`). Genellikle burada hatanın daha detaylı bir açıklaması bulunur. 5. `proxy_buffers`, `proxy_buffer_size`, `proxy_read_timeout` gibi `proxy` ile ilgili Nginx ayarlarını artırmayı deneyin. ### 2. 403 Forbidden * **Problem:** Bir dizine veya dosyaya erişmeye çalışırken 403 Forbidden hatası alınıyor. * **Sebep:** Nginx, istenen kaynağa erişim izinlerinin olmadığını veya dizin listelemenin kapalı olduğunu belirtir. Genellikle dosya/dizin izinleri (Unix dosya izinleri) veya Nginx konfigürasyonundaki `autoindex off;` gibi ayarlar nedeniyle oluşur. * **Çözüm:** 1. `root` direktifinde belirtilen dizinin ve altındaki dosyaların Nginx kullanıcısı (genellikle `www-data`) tarafından okunabilir olduğundan emin olun. Gerekirse `chmod` ve `chown` komutlarını kullanın. ```bash sudo chown -R www-data:www-data /var/www/html sudo chmod -R 755 /var/www/html ``` 2. Eğer bir dizin listelemek istiyorsanız, `location` bloğuna `autoindex on;` ekleyin (güvenlik nedeniyle genellikle önerilmez). 3. SELinux veya AppArmor gibi güvenlik mekanizmalarının Nginx'in dosyalara erişimini engellemediğinden emin olun. ### 3. 404 Not Found * **Problem:** İstenen sayfa veya kaynak bulunamıyor hatası. * **Sebep:** Nginx, istenen URL'ye karşılık gelen bir dosya veya `location` bloğu bulamadığında bu hatayı verir. Genellikle yanlış `root` dizini, yanlış `location` kuralı veya eksik dosya nedeniyle oluşur. * **Çözüm:** 1. Nginx konfigürasyonunuzdaki `root` direktifinin doğru yolu gösterdiğinden emin olun. 2. `location` bloklarınızın URL'leri doğru bir şekilde eşleştirdiğini kontrol edin. 3. İstenen dosyanın `root` dizini altında gerçekten var olduğundan emin olun. 4. `try_files $uri $uri/ =404;` gibi bir kuralın doğru yapılandırıldığından emin olun. ### 4. `too many open files` Hatası * **Problem:** Nginx loglarında `too many open files` hatası görünüyor veya sunucu yeni bağlantıları kabul etmiyor. * **Sebep:** Nginx, işletim sisteminin izin verdiği maksimum açık dosya sayısına (file descriptor) ulaştığında bu hatayı verir. Yüksek trafikli sunucularda veya yanlış yapılandırılmış `worker_connections` ayarlarında ortaya çıkabilir. * **Çözüm:** 1. Nginx konfigürasyonunuzdaki `worker_rlimit_nofile` direktifini artırın. Bu değer, Nginx worker süreçlerinin açabileceği maksimum dosya sayısını belirler. ```nginx # nginx.conf dosyasının main bloğuna ekleyin worker_rlimit_nofile 65535; ``` 2. İşletim sistemi genelindeki açık dosya limitini (`ulimit -n`) artırın. Bu genellikle `/etc/security/limits.conf` dosyasına ekleme yapılarak yapılır. ``` # /etc/security/limits.conf dosyasına ekleyin * soft nofile 65535 * hard nofile 65535 ``` Değişikliklerin etkili olması için oturumu kapatıp tekrar açmanız veya sunucuyu yeniden başlatmanız gerekebilir. ## Nginx ile Kapsamlı Performans Optimizasyonu Stratejileri Nginx'in temel konfigürasyonlarını ve ileri seviye tekniklerini öğrendikten sonra, şimdi bu bilgileri birleştirerek kapsamlı bir performans optimizasyonu stratejisi oluşturalım. Performans, sadece tek bir ayarı değiştirmekle değil, bir dizi farklı tekniği bir arada uygulamakla elde edilir. 2026'da rekabetçi kalmak için bu stratejiler hayati öneme sahiptir. ### 1. Worker Süreçleri ve Bağlantı Ayarları Nginx'in mimarisi, `worker_processes` ve `worker_connections` direktifleriyle doğrudan ilişkilidir. Bu ayarları sunucunuzun donanımına göre optimize etmek, performansı artırmanın ilk adımıdır. ```nginx # /etc/nginx/nginx.conf dosyasının main bloğunda worker_processes auto; # CPU çekirdeği sayısı kadar worker süreci başlatır worker_connections 8192; # Her worker sürecinin eşzamanlı bağlantı sayısı multi_accept on; # Worker süreçlerinin mümkün olduğunca çok bağlantıyı kabul etmesini sağlar ``` **Açıklama:** `worker_processes auto;` genellikle en iyi performansı sağlar. `worker_connections` değeri, sunucunuzun bellek ve dosya limiti (ulimit) ile orantılı olmalıdır. Çok yüksek bir değer, `too many open files` hatasına yol açabilir. ### 2. Buffer ve Timeout Ayarları Nginx'in istemci ve upstream sunucularıyla etkileşimini yöneten buffer ve timeout ayarları, özellikle büyük dosyalar veya yavaş bağlantılar için performansı etkiler. ```nginx http { # ... client_body_buffer_size 128k; client_header_buffer_size 1k; client_max_body_size 8m; large_client_header_buffers 4 8k; send_timeout 60s; keepalive_timeout 65s; keepalive_requests 1000; proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; proxy_temp_file_write_size 256k; proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; # ... } ``` **Açıklama:** Bu ayarlar, Nginx'in veri okuma/yazma tamponlarını ve bağlantı zaman aşımlarını düzenler. Özellikle `proxy_read_timeout`, yavaş yanıt veren uygulama sunucuları için önemlidir. ### 3. Statik İçerik Optimizasyonu Statik dosyaların (CSS, JS, resimler) hızlı bir şekilde sunulması, genel sayfa yükleme süresi için kritiktir. Nginx bu konuda oldukça başarılıdır. ```nginx server { # ... location ~* \.(css|js|gif|jpe?g|png|svg|webp|ico|woff2?|ttf|eot)$ { expires 1y; # Bu tür dosyaları 1 yıl önbelleğe al add_header Cache-Control "public, immutable"; access_log off; log_not_found off; } } ``` **Açıklama:** `expires 1y;` tarayıcılara bu dosyaları uzun süre önbellekte tutmasını söyler. `immutable` direktifi, dosyanın değişmeyeceğini belirtir. `access_log off;` ile statik dosyalar için loglama kapatılır, bu da disk G/Ç'sini azaltır. ### 4. SSL/TLS Optimizasyonu HTTPS'in performans üzerindeki etkisini minimize etmek için Nginx'in SSL/TLS ayarlarını optimize edebilirsiniz. ```nginx ssl_session_cache shared:SSL:10m; ssl_session_timeout 1h; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s; ``` **Açıklama:** `ssl_session_cache` ve `ssl_session_timeout` ile SSL oturumlarının önbelleğe alınması, tekrar bağlantı kurma süresini kısaltır. `ssl_stapling` ise OCSP sorgularını hızlandırır. ### 5. İzleme ve Profilleme Performans optimizasyonu sürekli bir süreçtir. Nginx'in nasıl davrandığını anlamak için izleme ve profil oluşturma araçlarını kullanmak önemlidir. Nginx Amplify, Prometheus/Grafana gibi araçlar, canlı metrikleri izlemenize ve dar boğazları tespit etmenize yardımcı olur. `nginx_status` mo