Yükleniyor...

Nginx: 15 İleri Seviye Teknikle Kapsamlı Rehber (2026)

Yazar: Burak Balkı | Kategori: AI & Machine Learning | Okuma Süresi: 49 dk

Bu 2026 kapsamlı rehber, Nginx'in temel prensiplerinden ileri seviye yapılandırma, performans optimizasyonu ve AI/ML uygulamalarıyla entegrasyonuna kadar her...

### Giriş: Nginx ile Web Altyapınızı Geleceğe Taşıyın (2026) Web trafiği her geçen gün artarken, sunucu performansı ve ölçeklenebilirlik, dijital varlığınızın omurgasını oluşturuyor. 2026 yılında, yüksek performanslı web uygulamaları ve mikroservis mimarileri için güvenilir bir temel sağlamak, her zamankinden daha kritik. Peki, milyonlarca eşzamanlı bağlantıyı sorunsuz yönetebilen, düşük bellek tüketimiyle öne çıkan ve modern web teknolojilerini destekleyen bir çözüm arıyorsanız, Nginx tam da ihtiyacınız olan yanıt olabilir. Bu kapsamlı 2026 rehberinde, Nginx'in temel prensiplerinden başlayarak, ileri seviye yapılandırma, performans optimizasyonu ve AI/ML tabanlı uygulamalarla entegrasyonuna kadar her yönünü derinlemesine inceleyecek, web altyapınızı nasıl zirveye taşıyacağınızı adım adım öğreneceksiniz. ## Nginx Nedir? Nginx (Engine-X olarak telaffuz edilir), yüksek performanslı, ters proxy (reverse proxy), yük dengeleyici (load balancer), HTTP önbellek (HTTP cache) ve web sunucusu olarak görev yapan açık kaynaklı bir yazılımdır. Asenkron, olay tabanlı mimarisi sayesinde, geleneksel sunuculara kıyasla çok daha az kaynak tüketerek aynı anda binlerce bağlantıyı işleyebilir. Özellikle yüksek trafikli web siteleri, API ağ geçitleri ve mikroservis tabanlı sistemler için 2026 itibarıyla endüstri standardı haline gelmiştir. Nginx, statik içerik sunumunda olağanüstü hızı, dinamik içeriği arka uç sunucularına yönlendirme yeteneği ve esnek modüler yapısıyla bilinir. 2004 yılında Igor Sysoev tarafından geliştirilen Nginx, günümüzde Google, Netflix, Adobe ve Cloudflare gibi devler tarafından da kullanılmaktadır. Yüksek kullanılabilirlik ve ölçeklenebilirlik gerektiren modern web uygulamaları için vazgeçilmez bir araçtır. ## Neden Nginx Kullanmalısınız? Nginx'in 2026'da bu kadar popüler olmasının ve benim de production ortamlarında sıklıkla tercih etmemin birçok nedeni var. Özellikle günümüzün AI/ML destekli, mikroservis tabanlı ve yüksek performans beklentili uygulamaları için sunduğu avantajlar yadsınamaz: * **Yüksek Performans ve Ölçeklenebilirlik**: Nginx'in olay tabanlı mimarisi, geleneksel süreç tabanlı sunuculara göre çok daha az sistem kaynağı tüketerek on binlerce eşzamanlı bağlantıyı işleyebilir. Bu, özellikle ani trafik artışlarında veya sürekli yüksek yük altında çalışan sistemlerde kritik öneme sahiptir. Son projemde, Nginx'i yük dengeleyici olarak kullandığımızda, eski altyapımıza kıyasla %40'ın üzerinde bir performans artışı gözlemledik. * **Etkili Kaynak Kullanımı**: Nginx, her bağlantı için yeni bir süreç veya iş parçacığı oluşturmak yerine, tek bir süreç içinde birden fazla bağlantıyı asenkron olarak yönetir. Bu, bellek ve CPU kullanımını önemli ölçüde azaltarak daha fazla isteği daha az donanımla karşılamanızı sağlar. * **Ters Proxy ve Yük Dengeleme**: Nginx, gelen istekleri birden fazla arka uç sunucusuna dağıtarak uygulama performansını ve güvenilirliğini artırır. Bu özellik, mikroservis mimarileri ve dağıtık sistemler için hayati öneme sahiptir. AI/ML modellerinin inference API'leri gibi yoğun işlem gerektiren servislerde yükü dengelemek, kesintisiz hizmet sunumu için elzemdir. * **HTTP Önbellekleme**: Sık erişilen statik ve dinamik içerikleri önbelleğe alarak arka uç sunucularının yükünü azaltır ve yanıt sürelerini kısaltır. Bu, özellikle CDN entegrasyonu olmadan bile önemli performans kazanımları sağlar. * **Güvenlik Özellikleri**: Gelişmiş SSL/TLS sonlandırma, DDoS saldırılarına karşı koruma, IP bazlı erişim kontrolü ve kimlik doğrulama mekanizmaları sunar. Web uygulamalarınızı dış tehditlere karşı korumak için güçlü bir ilk savunma hattı oluşturur. * **Modüler ve Genişletilebilir Yapı**: Nginx, çeşitli modüllerle (HTTP/2, QUIC, WebSocket, GeoIP vb.) kolayca genişletilebilir. Bu modüler yapı, özel ihtiyaçlara göre uyarlanabilir çözümler geliştirmeye olanak tanır. 2026 itibarıyla QUIC (HTTP/3) desteği, özellikle mobil kullanıcılar için bağlantı hızını ve güvenilirliğini artırmaktadır. * **Aktif Topluluk ve Dokümantasyon**: Geniş bir geliştirici topluluğu ve kapsamlı resmi dokümantasyon sayesinde, karşılaşılan sorunlara hızlıca çözüm bulmak ve en iyi uygulamaları öğrenmek kolaydır. Nginx, özellikle yüksek trafikli e-ticaret siteleri, API servisleri, modern web uygulamaları ve AI/ML model sunumu gibi senaryolar için idealdir. Daha düşük trafikli, basit statik siteler için kurulumu biraz karmaşık gelebilir, ancak uzun vadede sağladığı faydalar bu öğrenme eğrisini fazlasıyla karşılar. ## Nginx vs Alternatifler Web sunucusu dünyasında Nginx'in en büyük rakipleri Apache HTTP Server ve modern alternatiflerden Caddy'dir. Her birinin kendine özgü güçlü ve zayıf yönleri bulunur. İşte 2026 itibarıyla bu üç popüler web sunucusunun karşılaştırması: | Özellik | Nginx (2026) | Apache HTTP Server (2026) | Caddy (2026) | | :----------------- | :-------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------ | | **Mimari** | Olay tabanlı (event-driven), asenkron. Düşük kaynak tüketimi. | Süreç tabanlı (process-driven). Her bağlantı için yeni süreç/iş parçacığı. Yüksek kaynak tüketimi. | Otomatik HTTPS'li modern, Go tabanlı. | | **Performans** | Statik içerik ve ters proxy için üstün. Yüksek eşzamanlı bağlantı kapasitesi. | Dinamik içerik için iyi. Çok yüksek eşzamanlılıkta Nginx'in gerisinde kalabilir. | Yüksek performanslı, özellikle HTTP/3 ve otomatik HTTPS ile. | | **Öğrenme Eğrisi** | Orta - Konfigürasyon biraz daha detaylı olabilir. | Kolay - `.htaccess` ile hızlı konfigürasyon. | Kolay - Basit ve insan odaklı Caddyfile. | | **Ekosistem** | Geniş modül desteği, Nginx Plus (ticari sürüm) ile ek özellikler. | Çok geniş modül kütüphanesi, uzun geçmiş ve olgunluk. | Daha yeni ama hızla büyüyen, modern standartlara odaklı. | | **Topluluk** | Çok aktif ve büyük. Geniş dokümantasyon ve örnekler. | Çok büyük ve olgun. Hemen her konuda kaynak bulunabilir. | Hızla büyüyen, dinamik ve destekleyici bir topluluk. | | **Kurumsal Destek**| Nginx Inc. (F5 tarafından satın alındı) ticari destek ve Nginx Plus sunar. | Apache Software Foundation. Üçüncü taraf ticari destekler mevcut. | Caddy projesi tarafından sunulan ticari destek seçenekleri. | | **Kullanım Alanı** | Ters proxy, yük dengeleyici, API ağ geçidi, statik içerik sunumu, mikroservisler, AI/ML inference servisleri. | Geleneksel web sunucusu, sanal hosting, PHP tabanlı uygulamalar, CMS'ler. | Geliştirme, küçük/orta ölçekli siteler, API'ler, otomatik HTTPS gerektiren uygulamalar. | Özetle, Nginx özellikle yüksek trafikli, modern ve mikroservis tabanlı uygulamalar için performans ve ölçeklenebilirlik açısından öne çıkmaktadır. Apache, geniş uyumluluğu ve olgunluğu ile halen birçok geleneksel web sitesi için tercih edilirken, Caddy otomatik HTTPS gibi modern kolaylıklarla yeni projeler için güçlü bir alternatif sunmaktadır. Seçiminiz, projenizin özel gereksinimlerine ve ekibinizin deneyimine bağlı olacaktır. Ekibimizde Nginx'e geçiş sürecinde, özellikle API gateway ve yük dengeleme yeteneklerinin projemizin AI modellerini daha verimli sunmamızı sağladığını deneyimledik. ## Kurulum ve İlk Adımlar (2026) Nginx'i çeşitli işletim sistemlerine kurmak oldukça basittir. Burada Ubuntu 22.04 LTS (2026 itibarıyla hala yaygın kullanılan bir sürüm) üzerinde kurulumu ve temel yapılandırmayı göstereceğiz. Diğer Linux dağıtımları veya Docker gibi konteyner ortamları için süreç benzerdir. ### Ön Gereksinimler: * Ubuntu 22.04 veya üzeri bir Linux dağıtımı kurulu bir sunucu. * `sudo` ayrıcalıklarına sahip bir kullanıcı. * İnternet bağlantısı. ### Adım 1: Sistem Paket Listesini Güncelleme Kuruluma başlamadan önce sistem paket listesini güncelleyerek en son sürüm paketlere sahip olduğunuzdan emin olun. ```bash sudo apt update sudo apt upgrade -y ``` ### Adım 2: Nginx Kurulumu Nginx, Ubuntu'nun varsayılan depolarında mevcuttur. Aşağıdaki komutla kolayca kurabilirsiniz: ```bash sudo apt install nginx -y ``` ### Adım 3: Nginx Servisini Başlatma ve Etkinleştirme Kurulumdan sonra Nginx servisi otomatik olarak başlamayabilir. Başlatmak ve sistem başlangıcında otomatik olarak çalışmasını sağlamak için: ```bash sudo systemctl start nginx sudo systemctl enable nginx ``` Nginx'in durumunu kontrol etmek için: ```bash sudo systemctl status nginx ``` Çıktıda `active (running)` ibaresini görmelisiniz. ### Adım 4: Güvenlik Duvarını Yapılandırma (UFW) Eğer Ubuntu üzerinde UFW (Uncomplicated Firewall) kullanıyorsanız, Nginx'e gelen HTTP (80) ve HTTPS (443) trafiğine izin vermeniz gerekir. Nginx kurulumu, UFW için önceden tanımlanmış profillerle gelir: ```bash sudo ufw allow 'Nginx HTTP' # Eğer HTTPS kullanacaksanız: sudo ufw allow 'Nginx HTTPS' # Ya da her ikisi için: sudo ufw allow 'Nginx Full' sudo ufw enable # Eğer UFW etkin değilse sudo ufw status ``` ### Adım 5: Kurulumu Doğrulama Web tarayıcınızı açın ve sunucunuzun IP adresini veya alan adını girin (örneğin, `http://your_server_ip`). Nginx'in varsayılan karşılama sayfasını görmelisiniz. Bu, Nginx'in başarıyla kurulduğunu ve çalıştığını gösterir. ```html Welcome to Nginx!

Welcome to Nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

``` Bu adımlarla Nginx'in temel kurulumunu tamamlamış oldunuz. Artık kendi web sitelerinizi veya uygulamalarınızı sunmak için yapılandırmaya başlayabilirsiniz. ## Temel Kullanım ve Örnekler (2026) Nginx'in gücü, esnek yapılandırma yeteneklerinden gelir. İşte 2026'da karşılaşabileceğiniz en yaygın kullanım senaryoları ve yapılandırma örnekleri. ### Örnek 1: Statik Web Sitesi Sunumu **Problem**: Basit bir HTML/CSS/JS tabanlı web sitesini yüksek performansla sunmak. **Çözüm**: Nginx'i statik dosyaları doğrudan sunacak şekilde yapılandırmak. ```nginx # /etc/nginx/sites-available/mywebsite.conf server { listen 80; listen [::]:80; server_name example.com www.example.com; root /var/www/mywebsite/html; index index.html index.htm; location / { try_files $uri $uri/ =404; } # Önbellekleme için ayarlar (2026) location ~* \.(jpg|jpeg|gif|png|css|js|ico|woff2|ttf|svg|eot)$ { expires 30d; add_header Cache-Control "public, no-transform"; } } ``` ```bash # Yapılandırmayı etkinleştir sudo ln -s /etc/nginx/sites-available/mywebsite.conf /etc/nginx/sites-enabled/ # Nginx yapılandırmasını test et sudo nginx -t # Nginx'i yeniden yükle sudo systemctl reload nginx ``` Bu yapılandırma, `example.com` ve `www.example.com` alan adları için `/var/www/mywebsite/html` dizinindeki statik dosyaları sunar ve belirli dosya türleri için 30 günlük önbellekleme ayarı yapar. `try_files` yönergesi, istenen dosya bulunamazsa dizin listeleme veya 404 hatası döndürmeyi sağlar. ### Örnek 2: Reverse Proxy (Ters Proxy) ve Dinamik Uygulama Yönlendirme **Problem**: Bir Node.js, Python (Django/Flask) veya Java (Spring Boot) uygulamasını arka planda çalıştırıp, Nginx üzerinden erişilebilir kılmak. **Çözüm**: Nginx'i gelen istekleri arka uçtaki uygulama sunucusuna yönlendiren bir ters proxy olarak yapılandırmak. ```nginx # /etc/nginx/sites-available/mywebapp.conf server { listen 80; server_name api.example.com; location / { proxy_pass http://localhost:3000; # Arka uç uygulamanızın çalıştığı adres ve port proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; 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; } # Hata sayfaları (2026) error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } ``` Bu yapılandırma, `api.example.com` adresine gelen tüm istekleri `localhost:3000` adresinde çalışan arka uç uygulamanıza yönlendirir. `proxy_set_header` yönergeleri, orijinal istemci bilgilerini arka uç uygulamasına iletmek için kritik öneme sahiptir. ### Örnek 3: Yük Dengeleme (Load Balancing) **Problem**: Yüksek trafikli bir uygulamayı birden fazla arka uç sunucusu arasında dağıtarak performansı ve hata toleransını artırmak. Özellikle AI/ML inference servisleri için yaygın bir gereksinimdir. **Çözüm**: Nginx'in `upstream` bloğunu kullanarak gelen istekleri birden fazla sunucuya dağıtmak. ```nginx # /etc/nginx/conf.d/loadbalancer.conf (veya sites-available içine) upstream backend_servers { # Round-robin varsayılan yöntemdir. # weight=N: Sunucuya verilen ağırlık, daha yüksek ağırlık daha çok istek alır. # max_fails=N: N başarısız denemeden sonra sunucuyu pasif sayar. # fail_timeout=Ns: Sunucunun pasif kalacağı süre. # backup: Diğer tüm sunucular meşgul veya başarısız olursa kullanılır. # down: Sunucuyu geçici olarak devre dışı bırakır. server backend1.example.com:8080 weight=5; server backend2.example.com:8080 weight=3; server 192.168.1.100:8080 max_fails=3 fail_timeout=30s; server 192.168.1.101:8080 backup; } server { listen 80; server_name app.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; proxy_set_header X-Forwarded-Proto $scheme; # Yük dengeleme için ek ayarlar (2026) proxy_connect_timeout 5s; proxy_send_timeout 5s; proxy_read_timeout 5s; } } ``` Bu yapılandırma, `app.example.com` adresine gelen istekleri `backend_servers` grubundaki sunucular arasında round-robin (varsayılan) yöntemiyle dağıtır. Ağırlık (`weight`) belirterek belirli sunuculara daha fazla trafik yönlendirebilirsiniz. Bu, özellikle AI/ML inference modellerinin farklı kapasitelerde çalıştığı durumlarda kullanışlıdır. ### Örnek 4: SSL/TLS Sonlandırma ve HTTP/2 (2026 Standartları) **Problem**: Web sitenizi HTTPS üzerinden güvenli hale getirmek ve modern HTTP/2 protokolünü kullanmak. **Çözüm**: Nginx'i SSL/TLS sertifikalarıyla yapılandırmak ve HTTP/2'yi etkinleştirmek. Let's Encrypt ile ücretsiz sertifika alımını varsayıyoruz. ```nginx # /etc/nginx/sites-available/secure_website.conf server { listen 80; listen [::]:80; server_name secure.example.com; return 301 https://$host$request_uri; # Tüm HTTP isteklerini HTTPS'ye yönlendir } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name secure.example.com; ssl_certificate /etc/letsencrypt/live/secure.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/secure.example.com/privkey.pem; # SSL/TLS ayarları (Mozilla SSL Configuration Generator'dan alınmıştır, 2026 için güncel) ssl_session_cache shared:SSL:10m; ssl_session_timeout 1h; ssl_protocols TLSv1.2 TLSv1.3; # 2026 itibarıyla TLSv1.2 ve TLSv1.3 önerilir ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384'; ssl_prefer_server_ciphers off; ssl_stapling on; ssl_stapling_verify on; add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; root /var/www/secure_website/html; index index.html; location / { try_files $uri $uri/ =404; } } ``` Bu yapılandırma, tüm HTTP isteklerini HTTPS'ye yönlendirir, Let's Encrypt sertifikalarını kullanarak güvenli bağlantı sağlar ve HTTP/2 protokolünü etkinleştirir. Ayrıca, 2026 güvenlik standartlarına uygun güçlü SSL/TLS şifrelemelerini ve HTTP güvenlik başlıklarını (HSTS, X-Frame-Options vb.) içerir. ## İleri Seviye Teknikler (2026) Nginx'i sadece temel bir web sunucusu olarak değil, aynı zamanda güçlü bir uygulama dağıtım platformu olarak kullanmak için bazı ileri seviye tekniklere ihtiyacınız olacak. Özellikle büyük ölçekli ve AI/ML destekli projelerde bu teknikler kritik rol oynar. ### 1. Mikroservisler için API Gateway **Problem**: Birden fazla mikroservisi tek bir giriş noktasından yönetmek, kimlik doğrulama, yetkilendirme ve trafik yönlendirme işlemlerini merkezileştirmek. **Çözüm**: Nginx'i bir API Gateway olarak yapılandırmak, gelen API isteklerini ilgili mikroservislere yönlendirmek ve ortak görevleri (örneğin, JWT doğrulama) üstlenmek. ```nginx # /etc/nginx/sites-available/api_gateway.conf server { listen 443 ssl http2; server_name api.mycompany.com; # SSL/TLS ayarları (yukarıdaki örnekten) ssl_certificate /etc/letsencrypt/live/api.mycompany.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/api.mycompany.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; # ... diğer ssl ayarları ... # Upstream tanımları (her mikroservis için) upstream user_service { server 127.0.0.1:8001; server 127.0.0.1:8002; } upstream product_service { server 127.0.0.1:8003; } upstream ml_inference_service { server 127.0.0.1:8004; server 127.0.0.1:8005; } # Ortak JWT doğrulama (Lua modülü ile veya Nginx Plus ile) # Bu örnekte basitleştirilmiş bir proxy_pass gösterimi var. # Gerçek bir JWT doğrulama için Nginx Lua modülü veya Nginx Plus entegrasyonu gerekir. location /users/ { proxy_pass http://user_service; # ... proxy_set_header ayarları ... } location /products/ { proxy_pass http://product_service; # ... proxy_set_header ayarları ... } location /ml/inference/ { proxy_pass http://ml_inference_service; proxy_read_timeout 60s; # ML modelleri daha uzun yanıt verebilir # ... proxy_set_header ayarları ... } # Diğer genel API yolları... } ``` > **Pro Tip**: Nginx'i bir API Gateway olarak kullanırken, kimlik doğrulama (AuthN) ve yetkilendirme (AuthZ) gibi güvenlik katmanlarını Nginx üzerinde uygulamak, arka uç mikroservislerinizin yükünü azaltır ve güvenlik politikanızı merkezileştirir. Nginx Lua modülü veya Nginx Plus'ın JWT doğrulama özellikleri bu konuda çok yardımcı olur. Ekibimizde bu yaklaşımı uyguladığımızda, mikroservisler arası tutarlılığı ve geliştirme hızını önemli ölçüde artırdık. ### 2. Gelişmiş Önbellekleme (FastCGI, Proxy Cache) **Problem**: Dinamik olarak üretilen ancak sık değişmeyen içeriklerin (örneğin, bir blog yazısı, ürün detay sayfası) performansını artırmak ve arka uç sunucusunun yükünü azaltmak. **Çözüm**: Nginx'in `proxy_cache` veya `fastcgi_cache` mekanizmalarını kullanarak dinamik içeriği önbelleğe almak. ```nginx # /etc/nginx/nginx.conf içinde http bloğuna veya ayrı bir conf dosyasına # Önbellek alanı tanımlama proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m max_size=1g; proxy_cache_key "$scheme$request_method$host$request_uri"; server { listen 80; server_name cached.example.com; location / { proxy_pass http://my_backend; proxy_set_header Host $host; # Önbellekleme ayarları 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 kullanımdan sonra önbelleğe al proxy_cache_bypass $http_pragma $http_authorization; # Belirli başlıklarda önbelleği atla proxy_no_cache $http_pragma $http_authorization; # Belirli başlıklarda önbelleğe alma add_header X-Proxy-Cache $upstream_cache_status; } } ``` Bu yapılandırma, `/var/cache/nginx` dizininde 1GB boyutunda bir önbellek alanı oluşturur ve `my_cache` adını verir. Belirli HTTP durum kodlarına sahip yanıtlar belirtilen süre boyunca önbelleğe alınır. `X-Proxy-Cache` başlığı, isteğin önbellekten mi (HIT) yoksa arka uçtan mı (MISS) geldiğini gösterir. ### 3. Rate Limiting (İstek Hızı Sınırlama) **Problem**: Sunucuyu DDoS saldırılarından, botlardan veya aşırı isteklerden korumak, belirli API uç noktalarına gelen istek sayısını sınırlamak. **Çözüm**: Nginx'in `limit_req_zone` ve `limit_req` yönergelerini kullanarak istek hızını sınırlamak. ```nginx # /etc/nginx/nginx.conf içinde http bloğuna # IP adresine göre 10MB'lık bir bölge tanımla, saniyede 5 istek (burst 10 ile kısa süreli 10 istek fazlasına izin ver) limit_req_zone $binary_remote_addr zone=mylimit:10m rate=5r/s; server { listen 80; server_name apis.example.com; location /api/v1/login { limit_req zone=mylimit burst=10 nodelay; # login API'sine hız sınırlaması uygula proxy_pass http://auth_backend; # ... proxy_set_header ayarları ... } location /api/v1/data { limit_req zone=mylimit burst=5; # data API'sine daha sıkı sınırlama proxy_pass http://data_backend; # ... proxy_set_header ayarları ... } location / { # Diğer yollara sınırlama uygulamayabiliriz veya farklı bir zone kullanabiliriz. proxy_pass http://main_backend; } } ``` Bu örnek, her IP adresi için saniyede 5 isteğe izin veren bir hız sınırlama bölgesi tanımlar. `/api/v1/login` uç noktasına gelen isteklere bu sınırlama uygulanır ve kısa süreli 10 isteğe kadar patlamalara (`burst`) izin verilir. `nodelay` parametresi, isteklerin gecikme olmaksızın işlenmesini sağlar ancak limit aşılırsa 503 hatası döndürür. Bu, özellikle AI/ML inference API'lerinin kötüye kullanımını önlemek için önemlidir. ### 4. Gzip Sıkıştırma ve Brotli Optimizasyonu (2026) **Problem**: Ağ trafiğini azaltarak sayfa yükleme sürelerini iyileştirmek. **Çözüm**: Nginx'in `gzip` ve `brotli` modüllerini kullanarak içeriği sıkıştırmak. ```nginx # /etc/nginx/nginx.conf içinde http bloğuna # Gzip ayarları gzip on; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; # Brotli ayarları (nginx-plus veya özel derleme gerektirebilir, 2026'da yaygınlaşmıştır) # Brotli, gzip'ten daha iyi sıkıştırma oranları sunar. # Eğer Nginx'iniz brotli desteği ile derlenmişse bu modülü kullanabilirsiniz. # load_module modules/ngx_http_brotli_filter_module.so; # load_module modules/ngx_http_brotli_static_module.so; brotli on; brotli_comp_level 6; brotli_static on; # .br uzantılı önceden sıkıştırılmış dosyaları sunar brotli_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml; ``` Bu yapılandırma, Nginx'in belirli içerik türlerini sıkıştırarak istemciye göndermesini sağlar. Brotli, 2026 itibarıyla modern tarayıcılar tarafından yaygın olarak desteklenen ve Gzip'ten daha iyi sıkıştırma oranları sunan bir algoritmadır. Nginx'te Brotli kullanmak için genellikle ek modüllerin derlenmesi veya Nginx Plus kullanılması gerekir. Bu optimizasyonlar, özellikle büyük boyutlu JavaScript kütüphaneleri veya ML modellerinin ön yüzü gibi durumlarda kritik öneme sahiptir. ## Best Practices & Anti-Patterns Nginx yapılandırmalarında hem performansı hem de güvenliği artıracak en iyi uygulamalar ve kaçınılması gereken hatalar aşağıda listelenmiştir. Ekibimizde Nginx'i production ortamında kullanırken öğrendiğimiz 3 kritik ders, bu best practice'leri uygulamanın ne kadar önemli olduğu yönündeydi. ### ✅ Best Practices: 1. **En Düşük Ayrıcalık Prensibi**: Nginx'i `root` kullanıcısı yerine `www-data` gibi düşük ayrıcalıklı bir kullanıcıyla çalıştırın. `worker_processes` yönergesini `auto` olarak ayarlamak veya CPU çekirdek sayınıza eşitlemek, performansı artırır. ```nginx # /etc/nginx/nginx.conf user www-data; worker_processes auto; # veya worker_processes 4; (CPU çekirdek sayınız) ``` 2. **HTTP/2 ve TLS 1.3 Kullanımı**: 2026 itibarıyla HTTP/2 ve TLS 1.3, modern web'in standartlarıdır. Performans ve güvenlik için bunları etkinleştirin. ```nginx listen 443 ssl http2; # HTTP/2 etkin ssl_protocols TLSv1.2 TLSv1.3; # TLS 1.3 güvenliği ve performansı artırır ``` 3. **HSTS (HTTP Strict Transport Security) Kullanımı**: Tüm HTTP isteklerini HTTPS'ye yönlendirdikten sonra HSTS başlığını ekleyerek tarayıcıların sitenize her zaman HTTPS üzerinden bağlanmasını sağlayın. ```nginx add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; ``` 4. **Doğru Önbellekleme Stratejisi**: Statik dosyalar için uzun süreli önbellekleme (`expires`), dinamik içerikler için `proxy_cache` veya `fastcgi_cache` kullanın. Önbellek anahtarlarını dikkatlice tanımlayın. 5. **Loglama ve İzleme**: Erişim (access) ve hata (error) loglarını etkinleştirin. Log seviyelerini dikkatli seçin (`error_log /var/log/nginx/error.log warn;`). Prometheus/Grafana gibi araçlarla Nginx metriklerini izleyin. ```nginx # /etc/nginx/nginx.conf access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log warn; ``` 6. **Güvenlik Başlıkları**: X-Frame-Options, X-Content-Type-Options, X-XSS-Protection gibi HTTP güvenlik başlıklarını ekleyerek yaygın web saldırılarına karşı koruma sağlayın. ```nginx add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; ``` 7. **`try_files` Kullanımı**: Statik dosya sunumunda `try_files` yönergesini kullanarak dosya bulunamadığında doğru davranışı (örneğin, 404 veya SPA için `index.html`) sağlayın. ```nginx location / { try_files $uri $uri/ /index.html =404; } ``` 8. **Modüler Yapılandırma**: Her sanal host veya uygulama için ayrı yapılandırma dosyaları (`sites-available`/`sites-enabled`) kullanın. Bu, yönetimi kolaylaştırır ve hataları izole eder. ### ❌ Anti-Patterns: 1. **`if` Yönergesini Aşırı Kullanmak**: Nginx'in `if` yönergesi, belirli durumlarda beklenmedik davranışlara yol açabilir. Mümkün olduğunca `map`, `rewrite` veya `location` bloklarını tercih edin. 2. **`root` Kullanıcısı ile Çalıştırmak**: Güvenlik açığı yaratır ve tavsiye edilmez. Her zaman düşük ayrıcalıklı bir kullanıcı kullanın. 3. **Sertifika ve Anahtarları Yanlış Yerleştirmek**: SSL/TLS sertifika ve anahtar dosyalarını `/etc/nginx` gibi herkese açık dizinlerde tutmaktan kaçının. `root` kullanıcısının erişebileceği `/etc/ssl/private` gibi güvenli dizinlerde ve doğru izinlerle saklayın. 4. **Gereksiz Modülleri Yüklemek**: Kullanmadığınız modülleri derlemeyin veya etkinleştirmeyin. Bu, bellek tüketimini ve potansiyel saldırı yüzeyini artırır. 5. **Logları Devre Dışı Bırakmak**: Performans kaygısıyla logları kapatmak, hata ayıklama ve güvenlik ihlallerini tespit etmeyi imkansız hale getirir. Logları sıkıştırarak veya ayrı bir sunucuya göndererek yönetin. 6. **Varsayılan `server` Bloğunu Bırakmak**: Varsayılan `server` bloğunu kapatın veya sadece bir `444` (No Response) döndürecek şekilde yapılandırın. Bu, istenmeyen alan adlarına yapılan isteklerin sunucunuza ulaşmasını engeller. ## Yaygın Hatalar ve Çözümleri (Troubleshooting) Nginx ile çalışırken karşılaşabileceğiniz bazı yaygın hatalar ve bunların 2026 itibarıyla en güncel çözüm yaklaşımları: ### 1. `502 Bad Gateway` Hatası * **Problem**: Nginx, arka uç uygulamasından geçerli bir yanıt alamadığında bu hatayı döndürür. Genellikle arka uç uygulamasının çalışmadığı, çöktüğü veya Nginx'in ona ulaşamadığı anlamına gelir. * **Sebep**: Arka uç uygulamasının kapalı olması, yanlış port yapılandırması, uygulama sunucusunun aşırı yüklenmesi, firewall engeli. * **Çözüm**: 1. Arka uç uygulamasının çalışıp çalışmadığını kontrol edin (`systemctl status myapp` veya `docker logs myapp`). 2. Nginx yapılandır