Apache ve Nginx’i AlmaLinux’ta Proxy Mimarisiyle Kurmak

Apache ve Nginx Nedir?

Bir web sitesi ya da uygulama çevrimiçi yayınlandığında, bu içeriği kullanıcılara ulaştırmak için arka planda çalışan bir sunucu motoruna ihtiyaç duyulur. Apache HTTP Server, uzun yıllardır aktif olarak kullanılan ve dünya genelinde milyonlarca sunucuda tercih edilen köklü bir çözümdür. Modüler yapısı, esnekliği ve yaygın topluluk desteği sayesinde özellikle özelleştirme gerektiren projelerde ön plana çıkar. Geleneksel yapısıyla birlikte sunduğu geniş eklenti yelpazesi, hem acemi kullanıcılar hem de deneyimli sistem yöneticileri için kullanım kolaylığı sağlar.

Nginx ise bu alana farklı bir yaklaşım getirir. Daha hafif ve hızlı bir yapıya sahip olan Nginx, yüksek trafik altında bile kararlı performansıyla modern web altyapılarının vazgeçilmez parçası haline gelmiştir. Apache’nin eş zamanlı bağlantı modelinin aksine, olay tabanlı bir yapı kullanarak binlerce isteği aynı anda işleyebilir. Statik içerikleri son derece hızlı sunabildiği için çoğunlukla ön katman (front-end proxy) olarak görevlendirilir.

Reverse Proxy Nedir? 

Reverse Proxy terimi kulağa teknik gelebilir ancak temelinde oldukça anlaşılır bir sistemden bahsedilir. Bu yapı, istemciden gelen istekleri alarak arka uçta bulunan başka bir sunucuya aktarır ve ardından elde edilen cevabı istemciye iletir. Bu süreçte kullanıcı, hangi sunucudan yanıt aldığına dair herhangi bir bilgiye sahip olmaz.
Bu yöntemin en popüler uygulayıcılarından biri Nginx’tir. Nginx, gelen HTTP trafiğini yönetir; fakat içerik dinamik yapıdaysa, isteği Apache’ye aktarır.

Apache veriyi işler ve sonucu Nginx’e döner, son adımda Nginx yanıtı kullanıcıya ulaştırır. Böylece Nginx yönlendirme ve statik içerikleri, Apache ise sunucu taraflı uygulamaları üstlenmiş olur.
Bu yapının avantajları oldukça çeşitlidir. Performans artışı sağlayarak sunucular arasındaki yükü dengeler. Aynı zamanda güvenliği artırır çünkü asıl sunucu dışarıya açık değildir. Trafik dengeleme, önbellekleme ve SSL yönetimi gibi gelişmiş işlevler bu sistemle entegre biçimde kullanılabilir.

Kurulum Öncesi Yapılandırma

Apache ve Nginx’i başarılı bir şekilde kurabilmek için sistemde bazı ön hazırlıklar yapılmalıdır. İlk olarak, sunucuda AlmaLinux 8, AlmaLinux 9 veya eşdeğer sistemlerden biri (örneğin CentOS 8) çalışıyor olmalıdır. Komutların sorunsuz şekilde uygulanabilmesi için root yetkisine sahip olunması gerekir; aksi takdirde sudo ayrıcalıklarına sahip bir kullanıcı hesabı kullanılmalıdır. Ayrıca gerekli paketlerin ve yapılandırma dosyalarının indirilebilmesi için sunucunun aktif bir internet bağlantısına sahip olması şarttır.

Güvenlik açısından ise SELinux’un sistemdeki rolü göz önünde bulundurulmalıdır. Apache ya da Nginx kurulumu sırasında, yapılandırma hataları yaşamamak adına CentOS 8 SELinux ortamlarında bu modülün ya tamamen devre dışı bırakılması ya da kurulumdan önce özel kurallar tanımlanarak yapılandırılması önerilir. Bu işlemin nasıl yapılacağını merak eden kullanıcılar için, sistem üzerinde CentOS SELinux Kapatma adımları oldukça önemlidir. Kurulum süreci başlamadan önce SELinux durumu mutlaka kontrol edilmeli ve sistem gereksinimlerine uygun şekilde düzenlenmelidir.

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

Sıkça Sorulan Sorular (SSS)

Neden hem Nginx hem Apache kullanmalıyım?

Nginx, bağlantı yönetimi ve statik içerik sunumu konusunda oldukça hızlıdır. Apache ise modüler yapısı sayesinde PHP gibi sunucu taraflı işlemleri daha esnek yönetebilir. Bu ikili bir araya geldiğinde, yükü paylaşan, daha hızlı yanıt veren ve daha stabil çalışan bir sistem elde edilir. Özellikle kaynakları verimli kullanmak isteyenler için bu yapı oldukça avantajlıdır.

Apache 8080’e alınmasa olmaz mı?

Nginx ve Apache varsayılan olarak aynı portu (80) kullanmak ister, bu da doğal olarak çakışmaya sebep olur. İkisini aynı sunucuda birlikte çalıştırabilmek için birinin portunu değiştirmek gerekir. Bu noktada genellikle Apache 8080 gibi farklı bir porta taşınır. Böylece Nginx 80 üzerinden gelen istekleri karşılayabilir ve ihtiyaç duyulduğunda Apache’ye yönlendirebilir. Bu düzen, iki servisin çatışmadan birlikte çalışmasını sağlar.

HTTPS ile birlikte çalışır mı?

Kesinlikle evet. Hatta Nginx reverse proxy yapısının en güçlü yanlarından biri, HTTPS işlemlerini kendi üzerinde halledip, trafiği güvenli şekilde arka uç sunucuya (örneğin Apache’ye) iletebilmesidir. Bu, hem performans açısından faydalıdır hem de SSL sertifika yönetimini sadeleştirir. Let’s Encrypt gibi ücretsiz sertifika sağlayıcılarıyla birlikte kullanıldığında, tüm siteyi HTTPS üzerinden çalıştırmak oldukça kolay ve pratik hale gelir.

Yalnızca Nginx kullanmak daha mantıklı mı?

Bu sorunun yanıtı tamamen projenizin ihtiyaçlarına bağlı. Eğer sadece HTML, CSS, resim dosyaları gibi statik içerikler barındıran bir site yönetiyorsanız, Nginx tek başına gayet yeterlidir. Ancak PHP, WordPress veya Laravel gibi dinamik içerik üreten altyapılar kullanıyorsanız, Apache’nin güçlü PHP entegrasyonu size avantaj sağlar. Kısacası, karmaşık ya da yoğun sunucu tarafı işlemleri olan sistemlerde Apache’yi arka uçta kullanmak hala en iyi çözümlerden biridir.

Yorum yapın