format_list_bulletedBu İçerikte Bahsedilen Konular
- arrow_rightNginx Nedir ve Neden tercih Edilir?
- arrow_rightGelişmiş Nginx Yapılandırması İçin Temel Adımlar
- arrow_right1. Worker Process ve Bağlantı Ayarları
- arrow_right2. Buffer ve Timeout Yapılandırması
- arrow_rightGüvenlik Yapılandırması
- arrow_rightGüvenlik Header'ları
- arrow_rightSunucu Bilgilerinin Gizlenmesi
- arrow_rightSSL/TLS Yapılandırması
- arrow_rightYük Dengeleme (Load Balancing)
- arrow_rightYük Dengeleme Algoritmaları Karşılaştırması
- arrow_rightÖnbellekleme (Caching) Stratejileri
- arrow_rightFastCGI Önbellekleme
- arrow_rightRate Limiting (Hız Sınırlama)
- arrow_rightFarklı Endpoint'ler İçin Rate Limiting
- arrow_rightSıkıştırma (Compression) Yapılandırması
- arrow_rightHTTP/2 ve QUIC Yapılandırması
- arrow_rightDosya Sunma Optimizasyonu
- arrow_rightGzip vs Brotli Karşılaştırması
- arrow_rightPerformans İzleme ve Hata Ayıklama
- arrow_rightÖzel Hata Sayfaları
- arrow_rightSonuç ve En İyi Uygulamalar
Nginx Nedir ve Neden tercih Edilir?
Nginx, yüksek performanslı, düşük kaynak tüketimine sahip açık kaynaklı bir web sunucusudur. 2024 verilerine göre, dünya genelindeki aktif web sitelerinin %35'inden fazlası Nginx kullanmaktadır. Özellikle yüksek trafikli e-ticaret hosting çözümlerinde ve dinamik uygulamalarda tercih edilir. Nginx'in asenkron yapısı, eşzamanlı binlerce bağlantıyı tek iş parçacığıyla yönetebilmesini sağlar.
Gelişmiş Nginx Yapılandırması İçin Temel Adımlar
1. Worker Process ve Bağlantı Ayarları
Nginx'in performansını doğrudan etkileyen worker process yapılandırması, sunucu kaynaklarının verimli kullanımı için kritik öneme sahiptir.
worker_processes auto;
worker_connections 4096;
use epoll;
multi_accept on;
Bu ayarlar, Nginx'in CPU çekirdek sayısına göre worker process oluşturmasını ve her worker'ın 4096 eşzamanlı bağlantıyı yönetmesini sağlar.
2. Buffer ve Timeout Yapılandırması
Buffer boyutları, sunucu performansını doğrudan etkiler. Yanlış yapılandırma, yavaş yükleme sürelerine ve kaynak israfına neden olabilir.
client_body_buffer_size 10K;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 4 32k;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
Bu ayarlar, istemci isteklerinin tampon bellek boyutlarını optimize eder ve TCP iletim performansını artırır.
Güvenlik Yapılandırması
Nginx güvenliği, modern web uygulamalarının olmazsa olmazıdır. Güvenlik header'ları rehberi incelendiğinde, doğru yapılandırmanın критик olduğu görülür.
Güvenlik Header'ları
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Content-Security-Policy "default-src 'self';" always;
Sunucu Bilgilerinin Gizlenmesi
server_tokens off;
more_clear_headers Server;
more_clear_headers X-Powered-By;
Bu ayarlar, saldırganların sunucu versiyonu ve teknoloji bilgilerini öğrenmesini engeller.
SSL/TLS Yapılandırması
HTTPS kullanımı hem güvenlik hem de SEO açısından zorunlu hale gelmiştir. Google'ın 2024 verilerine göre, HTTPS kullanmayan siteler arama sıralamalarında geri planda kalmaktadır.
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
TLS 1.3, daha hızlı el sıkışma süreleri sunar ve modern şifreleme standartlarını kullanır.
Yük Dengeleme (Load Balancing)
Yük dengeleme, yüksek trafikli uygulamalar için kritik bir mimari bileşendir. Nginx, gelişmiş proxy yetenekleri ile bu işlevi üstlenir.
upstream backend {
least_conn;
server backend1.example.com weight=5;
server backend2.example.com weight=3;
server backend3.example.com;
keepalive 32;
}
Yük Dengeleme Algoritmaları Karşılaştırması
| Algoritma | Avantajlar | Kullanım Senaryosu |
|---|---|---|
| Round Robin | Basit, eşit dağılım | Homojen sunucular |
| Least Connections | Dinamik yük dengeleme | Farklı kapasitelerdeki sunucular |
| IP Hash | Oturum tutma | Session-based uygulamalar |
| Weighted | Kaynak bazlı dağılım | Asimetrik sunucu kapasiteleri |
Önbellekleme (Caching) Stratejileri
Nginx'in önbellekleme özellikleri, web sitesi hızı optimizasyonu için temel araçlardandır.
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=app_cache:10m max_size=1g inactive=60m use_temp_path=off;
location / {
proxy_cache app_cache;
proxy_cache_valid 200 60m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
add_header X-Cache-Status $upstream_cache_status;
proxy_pass http://backend;
}
Bu yapılandırma, 60 dakika boyunca 200 yanıtlarını önbelleğe alır ve hata durumlarında eski önbellek kullanır.
FastCGI Önbellekleme
fastcgi_cache_path /var/cache/fastcgi levels=1:2 keys_zone=php_cache:10m max_size=100m inactive=30m use_temp_path=off;
location ~ \.php$ {
fastcgi_cache php_cache;
fastcgi_cache_valid 200 30m;
fastcgi_cache_valid any 1m;
fastcgi_cache_use_stale error timeout invalid_header http_500;
add_header X-FastCGI-Cache $upstream_cache_status;
}
Rate Limiting (Hız Sınırlama)
Rate limiting, brute force saldırılarına karşı koruma sağlar ve kaynakların adil kullanımını garanti eder.
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
location /api/ {
limit_req zone=api_limit burst=20 nodelay;
limit_req_status 429;
}
Bu yapılandırma, her IP için saniyede 10 istek sınırı koyar ve burst durumunda 20'ye kadar izin verir.
Farklı Endpoint'ler İçin Rate Limiting
limit_req_zone $binary_remote_addr zone=login_limit:10m rate=3r/s;
limit_req_zone $binary_remote_addr zone=general_limit:10m rate=30r/s;
location /login {
limit_req zone=login_limit burst=5 nodelay;
}
location / {
limit_req zone=general_limit burst=50 nodelay;
}
Sıkıştırma (Compression) Yapılandırması
Gzip sıkıştırması, bandwidth tasarrufu sağlar ve sayfa yükleme sürelerini önemli ölçüde azaltır. Araştırmalara göre, doğru sıkıştırma yapılandırması sayfa boyutlarını %70'e varan oranlarda azaltabilir.
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;
gzip_min_length 1000;
gzip_disable "msie6";
Brotli sıkıştırması, Gzip'e göre %15-25 daha iyi sıkıştırma oranları sunar.
HTTP/2 ve QUIC Yapılandırması
HTTP/2, multiplexing, header sıkıştırma ve server push özellikleriyle performansı artırır. QUIC ise UDP tabanlı yeni nesil protokol olarak gecikme sürelerini minimize eder.
listen 443 ssl http2;
listen 443 ssl http3 quic;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
add_header Alt-Svc 'h3=":443"; ma=86400';
add_header X-Protocol 'HTTP/3' always;
Dosya Sunma Optimizasyonu
Statik dosyalar için optimize edilmiş sunma, genel performansı artırır.
open_file_cache max=1000 inactive=30s;
open_file_cache_valid 60s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
Gzip vs Brotli Karşılaştırması
| Özellik | Gzip | Brotli |
|---|---|---|
| Sıkıştırma Oranı | %70 | %82 |
| CPU Kullanımı | Düşük | Orta |
| Tarayıcı Desteği | Tümü | Modern tarayıcılar |
| Sunucu Tarafı Destek | Geniş | Sınırlı |
Performans İzleme ve Hata Ayıklama
Nginx status modülü, gerçek zamanlı performans izleme sağlar.
location /nginx_status {
stub_status on;
allow 127.0.0.1;
deny all;
}
Bu endpoint şu bilgileri döndürür: aktif bağlantı sayısı, kabul edilen/handle edilen istekler, okuma/yazma bekleme durumları.
Özel Hata Sayfaları
Kullanıcı deneyimini iyileştirmek için özel hata sayfaları yapılandırın.
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /404.html {
root /var/www/errors;
internal;
}
location = /50x.html {
root /var/www/errors;
internal;
}
Sonuç ve En İyi Uygulamalar
Gelişmiş Nginx yapılandırması, web uygulamalarının performans, güvenlik ve ölçeklenebilirliğini doğrudan etkiler. Yukarıdaki ayarları uygularken şunlara dikkat edin:
- Test Edin: Her değişikliği üretim ortamına geçmeden önce test ortamında deneyin.
- İzleyin: Analytics araçları ile performansı sürekli izleyin.
- Güncelleyin: SSL sertifikalarınızı ve Nginx sürümlerini düzenli güncelleyin.
- Yedekleyin: Yapılandırma dosyalarınızın yedeklerini alın.
- Belgeleyin: Yaptığınız değişiklikleri ve gerekçelerini dokümante edin.
Doğru yapılandırılmış bir Nginx sunucusu, sanal sunucu kaynaklarını en verimli şekilde kullanarak kullanıcılara hızlı ve güvenli bir deneyim sunar.