Nginx (engine-x), eşzamanlı bağlantılardaki yüksek performansı, düşük bellek tüketimi ve hızlı statik dosya sunumuyla modern web sunucularının lideridir. Özellikle yüksek trafikli sitelerde tercih edilir. Bu rehberde Nginx kurulumunu ve performansını uçuşa geçirecek optimizasyon ayarlarını inceleyeceğiz.
Adım 1: Nginx Kurulumu
# Repoları güncelle
sudo apt update
# Nginx kurulumunu başlat
sudo apt install nginx
# Servisin otomatik başlamasını ayarla
sudo systemctl enable nginx
sudo systemctl start nginx
# Durum kontrolü
sudo systemctl status nginx
Bağlantıyı test etmek için sunucunun IP adresini tarayıcıya girdiğinde "Welcome to nginx!" sayfasını görmelisin.
Adım 2: UFW Firewall Ayarı
# Nginx HTTP ve HTTPS portlarına izin ver
sudo ufw allow 'Nginx Full'
# Doğrula
sudo ufw status
Adım 3: Server Block (Virtual Host) Kurulumu
# Site dizinini oluştur
sudo mkdir -p /var/www/ornek.com/html
sudo chown -R $USER:$USER /var/www/ornek.com/html
# Gerekli dosya yetkileri
sudo chmod -R 755 /var/www/ornek.com
# Örnek index dosyası
echo "<h1>Nginx çalışıyor: ornek.com</h1>" | sudo tee /var/www/ornek.com/html/index.html
# Yapılandırma dosyası oluştur
sudo nano /etc/nginx/sites-available/ornek.com
server {
listen 80;
listen [::]:80;
server_name ornek.com www.ornek.com;
root /var/www/ornek.com/html;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ =404;
}
}
# Siteyi aktif et (sembolik link oluştur)
sudo ln -s /etc/nginx/sites-available/ornek.com /etc/nginx/sites-enabled/
# Hash bucket sorunu çözümü için
sudo nano /etc/nginx/nginx.conf
# `server_names_hash_bucket_size 64;` satırının başındaki # işaretini kaldır.
# Config dosyasında syntax hatası var mı test et
sudo nginx -t
# Nginx'i yeniden başlat
sudo systemctl restart nginx
💡 Nginx Performansını NVMe Hızıyla Birleştir
Nginx mükemmel bir yazılımdır ancak eski nesil HDD/SSD disklerde potansiyelini gösteremez. HazalHost VDS sunucularının tamamında NVMe diskler bulunur, bu da web sitenizin anında açılmasını sağlar.
Adım 4: Performans Optimizasyonları
Düzenleme yapacağımız dosya: sudo nano /etc/nginx/nginx.conf
Worker Sayısı ve Bağlantılar
# Sunucunun CPU çekirdek sayısı kadar process başlatır
worker_processes auto;
events {
# Her worker için max connection limiti
worker_connections 2048;
# Bir olay tetiklendiğinde tüm bağlantıları kabul et
multi_accept on;
# En etkili bağlantı metodu (Linux için)
use epoll;
}
Gzip Sıkıştırma (Bant Genişliği Tasarrufu)
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6; # 1-9 arası değer. 6 performans/sıkıştırma için ideal
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;
Statik Dosya Cache (Tarayıcı Önbelleği)
Bu kodu server block dosyasına ekleyin (/etc/nginx/sites-available/ornek.com):
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
expires 365d;
add_header Cache-Control "public, no-transform";
access_log off;
}
Güvenlik Başlıkları Hiding ve Timeouts
http {
# Nginx versiyon numarasını gizle
server_tokens off;
# İstemci timeouts
client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;
# Upload limiti
client_max_body_size 64M;
}
# Tüm ayarlar bittikten sonra test et ve başlat
sudo nginx -t
sudo systemctl reload nginx
🚀 Yüksek Trafikle Baş Etmeye Hazır Mısın?
Binlerce anlık ziyaretçin mi var? Nginx ayarlarını yaptıktan sonra ihtiyacın olan tek şey yüksek verimli bir VDS. HazalHost DDoS korumalı çözümleri seni yarı yolda bırakmaz.
Sonuç
Nginx, kutudan çıktığı haliyle bile harika performans verir, ancak worker_processes auto, gzip sıkıştırması ve statik cache eklentileriyle siteni bir roket hızına ulaştırabilirsin. Ayarları uygularken her değişiklikten sonra nginx -t komutunu çalıştırmayı unutma.
Sık Sorulan Sorular (FAQ)
Nginx, Apache gibi .htaccess dosyalarını destekler mi?
Hayır, desteklemez. Apache kurallarını nginx server block yapısına (location içine) manuel olarak translate edip yazman gerekir. Performansının sırrı da dizin dizin dosya taramamasıdır.
Nginx reload ve restart arasındaki fark nedir?
Reload (sudo systemctl reload nginx) mevcut bağlantıları kesmeden sadece config dosyalarını yeniden okur. O yüzden canlı sistemlerde değişikiği restart yerine reload ile aktif etmelisin.
Nginx ile reverse proxy yapabilir miyim?
Evet, Nginx bir reverse proxy olarak kusursuz çalışır. Node.js, Python, Java gibi backend uygulamalarının önüne yerleştirerek istekleri load balancer mantığıyla dağıtabilirsin.