Apache'nin esnekliği ve .htaccess uyumluluğu mükemmeldir ancak aşırı trafikte ağırlaşıp anında RAM tüketir. Diğer yanda Nginx, dünyanın en hızlısı olsa da Apache kadar modüler değildir. Peki ikisinin en güçlü yönlerini birleştirip "Nginx'i öne kalkan (Reverse Proxy), Apache'yi arkada aşçı (Backend)" yaparsak ne olur?
Neden Sadece Apache İle Yetinmiyoruz?
Apache, C10K (Aynı anda 10.000 bağlantı) problemiyle boğuşabilen, her gelen bağlantı için ayrı bir işlemcik (Thread/Prefork) açan kalın zırhlı eski bir devdir. Sitenizde anlık ziyaretçi 2.000'i gördüğü an Apache'nin tükettiği RAM gigabaytları aşar ve çökme yaşanır.
Nginx ise olaya "Olay Güdümlü (Event-Driven)" saniyelik asenkron yapısıyla yaklaşır. Hiçbir RAM artışı göstermeden 50.000 kişiye aynı anda statik (HTML/Resim) dosyaları cevaplayabilir. Fakat iş karmaşık bir WordPress .htaccess yönlendirmesine gelince bocalar. İşte çözüm: İkili Mimariler.
Nginx Reverse Proxy Mimarisi Nasıl Çalışır?
Kurgu şu şekildedir:
Nginx (Port 80/443): En önde duran güvenlik görevlisi.
Apache (Port 8080): İçeride çalışan şef.
- Kullanıcı siteye girdiğinde ilk isteği Nginx karşılar.
- İsteden şey eğer bir CSS, JPEG, PDF dosyası ise (Statik Veri), Nginx hemen hard diskten dosyayı alır asenkron şekilde 0.1 milisaniyede müşteriye fırlatır. Durumu Apache'ye bildirmez bile!
- Değilse; İstenen şey PHP koduysa, Nginx der ki: "Ben PHP bilmem, sen şu Port 8080'den arka ofisteki Apache'ye git, sonucu ondan al."
- Apache şifreli PHP sorusunu çözer, sonucu Nginx'e verir. Nginx de bunu müşteriye yollar.
Sonuç: Apache üzerine binen statik resim yükü %90 ortadan kalkar, RAM nefes alır, TTFB süreleri inanılmaz bir şekilde düşer.
VDS Üzerinde Nginx Revery Proxy Kurulum Ayarları
Eğer HazalHost üzerinden temiz bir Ubuntu VDS aldıysanız, konfigürasyon temel olarak şöyledir:
# Nginx Proxy Ayarları (nginx.conf)
server {
listen 80;
server_name www.siteniz.com siteniz.com;
# Resim ve Fontları Apache'ye hiç uğratmadan DİREK sun!
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml|woff2)$ {
expires 30d;
root /var/www/siteniz;
}
# Kalan tüm dinamik işleri (PHP vb.) 8080 portuna, Apache'ye salla.
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Bu konfigürasyondan sonra, Apache'nin ports.conf dosyasından 80 portunu 8080 olarak değiştirmeyi unutmayın, yoksa iki sunucu yazılımı aynı port için kavgaya tutuşur ve sistem çöker.
🚀 HazalHost Altyapısındaki LiteSpeed Fırtınası
Kendiniz Nginx proxy vb konfigürasyonlarla uğraşmak istemiyorsanız, Nginx'ten 3 kat daha performanslı olan ve Apache'nin .htaccess'ini %100 yerleşik destekleyen LiteSpeed Web Sunuculu paylaşımlı paketlerimize geçiş yapabilirsiniz!
Dikkat: Ziyaretçilerin Tüm IP'lerinin 127.0.0.1 Gözükme Sorunu
Reverse Proxy kurduğunuzda, arka plandaki Apache için tüm site trafiği Nginx üzerinden (Kendi bilgisayarından) geldiğinden, yorum yapan veya WordPress'e log olan herkesin İP adresi 127.0.0.1 görünür.
Bu ölümcül bir güvenlik sorunudur! (Hiçbir spamciyi banlayamazsınız). Bunu çözmek için Apache tarafına mutlaka mod_rpaf veya mod_remoteip kurarak Nginx'in aktardığı gerçek IP header'larını kaydetmesini emretmelisiniz.
Sonuç
Yüksek trafiğin yönetilmesi basit bir "Sunucu kapasitesi artırma" (Scale Up) durumu değil, zekice dizayn edilmiş bir mimari (Scale Out) sanatıdır. Nginx + Apache çifti, bulut pazarının modern web devleri için halen en geçerli kombinasyonlardan biridir.