Apache ve Nginx Nedir?
Web siteleri ve uygulamalar internette yayına alındığında, içeriklerin ziyaretçilere ulaştırılabilmesi için bir servis altyapısı gerekir; bu görevi ise web sunucuları üstlenir. Apache HTTP Server, uzun geçmişi ve yaygın kullanımıyla bu alandaki en köklü çözümlerden biridir. Modüler yapısı, özelleştirmeye açık olması ve topluluk desteğiyle büyük ölçekli sistemlerde dahi rahatlıkla tercih edilir. Güvenlik açısından ise özellikle Apache Versiyon Gizleme gibi yapılandırmalarla sistemin dışa açık hassasiyetleri azaltılabilir. Geniş eklenti olanakları sayesinde farklı kullanıcı seviyelerine hitap eder ve yönetimi kolaydır.
Nginx ise bu sürece farklı bir mimariyle katkı sunar. Hafif ve hızlı yapısıyla dikkat çeken Nginx, yüksek trafik altında dahi istikrarını korur. Apache’nin bağlantı modelinden farklı olarak olay tabanlı çalışır ve çok sayıda isteği eşzamanlı işleyebilir. Statik kaynakları çok daha verimli sunabildiği için çoğunlukla proxy sunucu olarak kullanılır. Özellikle cPanel üzerine Nginx yapılandırmalarıyla birlikte kullanıldığında, kaynak tüketimini azaltan ve yük dengelemesi sağlayan verimli çözümler üretilebilir.
Reverse Proxy Nedir?
Reverse Proxy çoğu zaman teknik bir kavram gibi görünse de, aslında oldukça basit bir görevi yerine getirir. Kullanıcıdan gelen bir istek, bu sistem aracılığıyla arka uçtaki başka bir sunucuya yönlendirilir ve alınan yanıt kullanıcıya geri gönderilir. Kullanıcı bu süreci yaşarken hangi sunucuya eriştiğini bilmeden tüm etkileşimi bu aracı sistem üzerinden gerçekleştirir.
Nginx bu yapıya örnek gösterilebilecek en yaygın çözümlerden biridir. Ziyaretçilerden gelen istekleri alan Nginx, dinamik içeriğe ihtiyaç duyulması durumunda bu talepleri Apache’ye yönlendirir.
Apache, işlemleri tamamlayarak veriyi Nginx’e iletir; Nginx ise kullanıcıya sonuç döner. Bu sayede iş bölümü yapılır: statik sunumlar Nginx’te, sunucu taraflı iş yükü Apache’de toplanır. Reverse proxy kullanmak sistem performansını artırır çünkü iş yükü sunucular arasında paylaşılır. Ayrıca doğrudan sunucuya erişim engellenerek daha güvenli bir yapı oluşturulur. Trafik kontrolü, cache mekanizmaları ve SSL offload gibi özellikler bu sistemle kolayca entegre edilebilir.
Kurulum Öncesi Gereksinimler
Apache ile Nginx kurulumuna geçmeden önce sistemin uygun koşullarda olması gerekir. AlmaLinux işletim sisteminin 8 ya da 9 serisine ait bir versiyonu kullanılmalıdır. Root erişimi olan ya da sudo yetkisine sahip bir kullanıcı kurulum işlemlerini yürütebilir. Gerekli paketlerin indirilebilmesi için sunucuda internet bağlantısı bulunmalıdır. Ayrıca SELinux’un ya tamamen devre dışı olması ya da doğru şekilde yapılandırılmış olması gereklidir.
Apache Web Sunucusunun Kurulumu
sudo dnf install httpd -y
systemctl enable httpd
sudo systemctl start httpd
Apache’nin durum kontrolü;
sudo systemctl status httpd
Yapılandırma ve içerik dizinleri:
/etc/httpd/conf/httpd.conf
/var/www/html/
Nginx’in Kurulumu ve Reverse Proxy Yapılandırması
sudo dnf install nginx -y
systemctl enable nginx
sudo systemctl start nginx
Apache’nin portu değiştirmek için bu adımı izleyelim.
sudo nano /etc/httpd/conf/httpd.conf
Listen 80
satırını şu şekilde değiştirelim;
Listen 8080
Apache yeniden başlatılıyor
sudo systemctl restart httpd
Nginx yapılandırma dosyası:
sudo nano /etc/nginx/conf.d/reverse-proxy.conf
İçeriği:
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Nginx test edilip başlatalım.
sudo nginx -t
sudo systemctl restart nginx
Güvenlik Duvarı ve SELinux Ayarları
sudo firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https firewall-cmd --reload
sudo setsebool -P httpd_can_network_connect 1
Kurulum Sonrası Test
Tarayıcı üzerinden http://sunucu-ip-adresi
kontrol edilir ya da:
curl -I http://localhost
SSS Sık Sorulan Sorular
Neden hem Nginx hem Apache birlikte kullanılmalı?
Nginx, bağlantı yönetimi ve statik dosya sunumunda yüksek performans sunarken, Apache modüler yapısı sayesinde dinamik içeriklerde daha etkili çalışır. Bu iki sunucunun birlikte çalışması, sistem kaynaklarını daha dengeli kullanarak daha hızlı ve stabil bir altyapı oluşturur. Özellikle hem yüksek hız hem de esnek uygulama desteği arayan projeler için ideal bir çözümdür.
Apache neden 8080 portuna alınmalı?
Nginx ve Apache varsayılan olarak aynı portu (80) kullanmaya çalıştığı için çakışma yaşanır. Bu yüzden genellikle Apache 8080 gibi farklı bir porttan çalışacak şekilde yapılandırılır. Böylece Nginx, 80 numaralı port üzerinden gelen tüm HTTP isteklerini karşılayabilir ve arka planda Apache’ye yönlendirme yapabilir. Bu port düzenlemesi, iki servis arasında sorunsuz iletişim kurulmasını sağlar.
HTTPS ile uyumlu mudur?
Elbette. Nginx, HTTPS trafiğini doğrudan kendi üzerinden yönetebilir ve SSL sertifikası işlemlerini üstlenebilir. Bu sayede kullanıcı bağlantıları şifreli olarak alınır ve arka uçta Apache’ye güvenli şekilde iletilir. Let’s Encrypt gibi servislerle birlikte kullanıldığında HTTPS yapılandırması çok daha kolay hale gelir.
Sadece Nginx kullanmak yeterli olur mu?
Eğer siteniz yalnızca statik içerik barındırıyorsa, örneğin HTML, CSS ve görsel dosyalar sunuyorsa, Nginx tek başına yeterli performansı sağlar. Ancak PHP gibi sunucu taraflı işlemler gerektiren WordPress veya Laravel altyapıları kullanıyorsanız, Apache’nin arka uç desteğine ihtiyaç duyarsınız. Dinamik içeriklerle çalışan projelerde hibrit yapı daha uygundur.
Apache’nin yapılandırma süreci gerçekten detaylı görünüyor. Port değişikliği yaparken dikkatli olmak gerekiyor. Nginx için de yapılandırma dosyasının içeriği önemli bir nokta. Her iki sunucu da yeniden başlatıldığında sorun yaşanmaması için doğru adımlar izlenmeli. Bu süreçlerin otomatize edilmesi mümkün mü? Yapılandırma hataları sık karşılaşılan bir durum mu? Bu konuda daha fazla kaynak önerebilir misiniz?
Evet, yapılandırma hataları sık karşılaşılan bir durumdur, özellikle elle müdahale edildiğinde. Apache ve Nginx yapılandırmaları Ansible gibi araçlarla otomatize edilebilir. Yeniden başlatma öncesi apachectl configtest veya nginx -t komutlarıyla test yapmak önemlidir.