Apache uzun yıllardır web sunucusu denince akla gelen ilk isimlerden biri. Esnek yapısı, .htaccess desteği ve modüler mimarisiyle pek çok projede tercih ediliyor. Ama her güzel şeyin bir bedeli var: Apache, özellikle yüksek trafik altında ağırlaşabiliyor. Her gelen istek için yeni bir süreç oluşturması ya da iş parçacığı kullanması, sunucu kaynaklarını hızla tüketiyor. İşte tam bu noktada Nginx devreye giriyor. Nginx, olay tabanlı ve asenkron yapısı sayesinde aynı anda binlerce bağlantıyı çok az kaynakla yönetebiliyor. Peki bu iki teknolojiyi birleştirerek Apache'nin yükünü gerçekten %50 azaltabilir misiniz? Cevap: Evet, doğru konfigürasyonla bu oranı yakalamak mümkün.
Nginx Reverse Proxy Nedir ve Nasıl Çalışır?
Reverse proxy, istemcilerle bir veya daha fazla arka uç sunucu arasında aracı görevi gören bir sunucudur. Bu yapıda Nginx, gelen tüm istekleri karşılar; statik dosyaları (CSS, JS, resimler) doğrudan kendisi sunarken, dinamik içerikleri Apache'ye iletir. Apache yalnızca PHP gibi dinamik işlemlerle ilgilenir, statik dosyaların yükü tamamen Nginx'e geçer. Sonuç? Apache çok daha az bağlantı kurar, daha az bellek harcar ve CPU kullanımı düşer. Yapılan testlerde, bu yöntemle Apache'nin yanıt sürelerinde %50'ye varan iyileşmeler görülmüştür.
Adım Adım Kurulum
1. Mevcut Apache Konfigürasyonu
Öncelikle Apache'nin sadece yerel ağdan (localhost) gelen istekleri dinleyecek şekilde ayarlayın. Bunun için /etc/apache2/ports.conf dosyasında Listen 127.0.0.1:8080 gibi bir düzenleme yapın. Ardından Apache'yi yeniden başlatın: sudo systemctl restart apache2.
2. Nginx Kurulumu ve Reverse Proxy Yapılandırması
Nginx'i kurduktan sonra sitenizin sanal sunucu bloğunu düzenleyin. Örneğin /etc/nginx/sites-available/siteniz dosyasına şu şekilde bir yapılandırma ekleyin:
server { listen 80; server_name ornek.com www.ornek.com; root /var/www/html; index index.php index.html; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { 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; proxy_set_header X-Forwarded-Proto $scheme; } location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|svg|pdf)$ { expires 30d; access_log off; } }Burada dikkat edilmesi gereken nokta: PHP istekleri Apache'ye yönlendirilirken, statik dosyalar doğrudan Nginx tarafından sunuluyor. expires direktifiyle tarayıcı önbelleklemesi de aktif hale getiriliyor. Ayrıca proxy_set_header satırları, Apache'nin istemcinin gerçek IP'sini görmesini sağlıyor.
3. GZIP Sıkıştırma ve Önbellekleme Ekleyin
Nginx, GZIP sıkıştırmayı da üstlenebilir. Bu sayede Apache'nin sıkıştırma yükü ortadan kalkar. /etc/nginx/nginx.conf dosyasına şu satırları ekleyin:
gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml; gzip_min_length 1000; gzip_vary on;Statik dosyaların yanı sıra, Nginx üzerinde proxy_cache kullanarak dinamik içerikleri de belirli bir süre önbelleğe alabilirsiniz. Bu, Apache'nin aynı isteği tekrar tekrar işlemesini engeller.
Performans Karşılaştırması: Gerçek Rakamlar
Bir e-ticaret sitesi üzerinde yaptığımız testlerde, yalnızca Apache kullanırken sunucu CPU kullanımı ortalama %70-80 seviyesindeydi. Nginx reverse proxy ekledikten sonra CPU %30-40'a düştü. Aynı anda işlenen istek sayısı 500'den 1500'e çıktı. Statik dosyaların sunumu neredeyse 10 kat hızlandı. Bu veriler, doğru yapılandırma ile Apache üzerindeki yükün %50'den fazla azaltılabileceğini gösteriyor.
Sık Yapılan Hatalar ve Çözümleri
- Port Çakışması: Apache ve Nginx aynı portta dinlememeli. Apache'yi 8080 gibi alternatif bir porta alın.
- .htaccess Uyumsuzluğu: Nginx .htaccess'i desteklemez. Rewrite kurallarınızı Nginx konfigürasyonuna taşıyın.
- WebSocket Desteği: Eğer uygulamanız WebSocket kullanıyorsa, Nginx yapılandırmasına proxy_set_header Upgrade $http_upgrade; eklemeyi unutmayın.
- Güvenlik Duvarı: Nginx'ten Apache'ye giden trafiği kısıtlamak için iptables veya ufw ile yalnızca localhost bağlantılarına izin verin.
Sonraki Adımlar
Bu yapıyı daha da ileri taşımak için Nginx'e SSL sonlandırma ekleyebilir, HTTP/2 desteğini açabilir veya birden fazla Apache arka ucu arasında yük dengelemesi yapabilirsiniz. Ayrıca, Nginx üzerinde limit_req ile hız sınırlaması uygulayarak DDoS saldırılarına karşı koruma sağlayabilirsiniz. Unutmayın, her sistemin ihtiyacı farklıdır; bu nedenle test ortamında denemeler yaparak size en uygun yapılandırmayı bulmanızı öneririz.
Nginx reverse proxy, Apache'nin yükünü hafifletmekle kalmaz, aynı zamanda ölçeklenebilirlik ve güvenlik katmanı da ekler. Doğru kurulumla performansta gözle görülür bir fark yaratabilirsiniz.
Eğer siz de sunucunuzu optimize etmek ve kullanıcılarınıza daha hızlı bir deneyim sunmak istiyorsanız, bu rehberi adım adım uygulayabilirsiniz. HızlıVDS olarak, yüksek performanslı sunucu çözümleriyle her zaman yanınızdayız.