Ana içeriğe geç

🔁 Apache Ters Proxy Kurulumu: mod_proxy ile Gelen İsteklerin Yönlendirilmesi

Bu rehberde Apache web sunucusunu mod_proxy modülüyle ters proxy (reverse proxy) olarak yapılandırmayı öğreneceksiniz.
Ters proxy yapısı, gelen HTTP isteklerini bir veya birden fazla arka uç sunucusuna yönlendirerek:

  • Güvenlik sağlar
  • Performans artırır
  • Trafiği dengeler (load balancing)
  • Backend uygulamalarını dış erişime kapatır

Modern mimarilerde vazgeçilmez bir bileşendir.


⭐ Bu Rehberde Ne Öğreneceksiniz?

  • Apache mod_proxy modülünün etkinleştirilmesi
  • Flask ile basit backend sunucuları oluşturma (isteğe bağlı test)
  • Tek sunucuya reverse proxy yapılandırması
  • Birden fazla sunucuya yük dengeleme (load balancing) yapısı
  • ProxyPass ve ProxyPassReverse arasındaki fark
  • Reverse proxy’de sık yapılan hataları önleme

🧠 Teknik Özet

Bu doküman Apache’nin mod_proxy ve mod_proxy_http modülleriyle reverse proxy görevini nasıl üstlendiğini anlatır.
Ayrıca mod_proxy_balancer ile birden fazla backend sunucusuna isteklerin nasıl dağıtılacağını gösterir. Reverse proxy yapısı aynı zamanda HTTPS dönüşleri, caching, compression gibi özelliklerin backend tarafından değil Apache tarafından yönetilmesini sağlar.


1️⃣ Gerekli Apache Modüllerini Etkinleştirin

Reverse proxy çalışması için aşağıdaki modüller gerekir:

  • mod_proxy – temel proxy motoru
  • mod_proxy_http – HTTP isteklerini yönlendirmek için
  • mod_proxy_balancer – yük dengeleme özelliği
  • mod_lbmethod_byrequests – round-robin istek dağıtımı

Aşağıdaki komutlarla etkinleştirin:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests
  • Bu komutlar Apache'nin reverse proxy işlevselliğini etkinleştirir.

1. Apache’yi yeniden başlatın:


sudo systemctl restart apache2
  • Modül yüklemeleri aktif hale gelir.

2️⃣ Backend Test Sunucuları Oluşturma (Önerilen)

  • Reverse proxy yapılandırmasının doğru çalıştığını görmek için iki basit Flask uygulaması oluşturuyoruz.

1. Flask'ı kurun:


sudo apt-get update
sudo apt-get install python3-pip
sudo pip3 install Flask==1.1.4

  • ✔ Backend 1 (8080)

nano ~/backend1.py
  • İçerik:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def home():
return 'Hello world!'

  • ✔ Backend 2 (8081)

cp ~/backend1.py ~/backend2.py
nano ~/backend2.py
  • Mesajı değiştirin:

return 'Howdy world!'

1. Sunucuları başlatın:


FLASK_APP=~/backend1.py flask run --port=8080 >/dev/null 2>&1 &
FLASK_APP=~/backend2.py flask run --port=8081 >/dev/null 2>&1 &
  • Her iki sunucu arka planda çalışır.

  • Test edin:

curl http://127.0.0.1:8080/
curl http://127.0.0.1:8081/

3️⃣ Reverse Proxy Yapılandırmasını Etkinleştirme

1. Apache’nin varsayılan VirtualHost dosyasını düzenleyin:


sudo nano /etc/apache2/sites-available/000-default.conf
  • ✔ Örnek 1: Tek Backend Sunucusuna Yönlendirme

2. VirtualHost içeriğini aşağıdakiyle değiştirin:


<VirtualHost *:80>
ProxyPreserveHost On

ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>

Açıklamalar:

  • ProxyPreserveHost → Orijinal host başlığını backend'e iletir.

  • ProxyPass → Gelen isteği backend adresine yollar.

  • ProxyPassReverse → Backend’in döndürdüğü yönlendirme (Location header) URL’lerini düzeltir.

1. Apache’yi yeniden başlatın:


sudo systemctl restart apache2

  • Tarayıcıdan:

http://sunucu_ip

Backend çıktısı görünecektir.

  • ✔ Örnek 2: Load Balancing (Yük Dengeleme) Birden fazla backend sunucusu varsa trafik dengelenebilir.

2. Aşağıdaki yapılandırmayı ekleyin:


<VirtualHost *:80>
<Proxy balancer://mycluster>
BalancerMember http://127.0.0.1:8080
BalancerMember http://127.0.0.1:8081
</Proxy>

ProxyPreserveHost On

ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/
</VirtualHost>

Artık istekler sırayla 8080 → 8081 → 8080 şeklinde döner.


3. Apache’yi yeniden başlatın:


sudo systemctl restart apache2
  • Tarayıcıyı yeniledikçe:

Hello world!

Howdy world!

şeklinde dönüşümlü cevaplar gelir.


❓ Sıkça Sorulan Sorular (SSS)

1️⃣ Ters proxy ne işe yarar?

Backend uygulamasını güvenlik amacıyla dış erişimden izole eder, yük dağıtır ve SSL/caching gibi özellikleri merkezileştirir.

2️⃣ ProxyPass ve ProxyPassReverse farkı nedir?

ProxyPass → İstekleri yönlendirir. ProxyPassReverse → Backend yönlendirme URL'lerini istemciye uygun şekilde düzenler.

3️⃣ mod_proxy ile hangi protokoller desteklenir?

  • HTTP (mod_proxy_http)
  • WebSocket (mod_proxy_wstunnel)
  • AJP (mod_proxy_ajp)
  • FTP (mod_proxy_ftp)

4️⃣ Yük dengeleme nasıl çalışır? Varsayılan algoritma byrequests (round-robin) olup her sunucuya sırayla istek iletir.

5️⃣ Backend sunucularını nasıl durdururum?


killall flask

🎯 Sonuç

Bu rehber ile Apache mod_proxy’yi kullanarak:

Reverse proxy kurdunuz

Backend uygulamalarını gizlediniz

Yük dengeleme yapılandırması yaptınız

Apache’nin esnek modüler yapısı sayesinde Python, Ruby, PHP ve diğer tüm uygulama sunucularıyla reverse proxy olarak çalışabilirsiniz.

Performansı artırmak ve ölçeklenebilir mimarilere geçmek için 👉 Rabisu Bulut platformunda hemen deneyebilirsiniz.