Apache Reverse Proxy Kurulumu
Apache web sunucusu yalnızca statik içerik sunmak için değil, aynı zamanda reverse proxy (ters proxy) olarak da kullanılabilir.
Bu yapı sayesinde Apache, gelen HTTP isteklerini arka uç (backend) sunucularına yönlendirir.
Reverse proxy mimarisi özellikle aşağıdaki durumlarda tercih edilir:
- Backend uygulamalarını dış erişimden korumak
- Trafiği birden fazla sunucuya dağıtmak (load balancing)
- SSL, cache ve compression işlemlerini merkezi yönetmek
- Mikroservis mimarilerinde gateway görevi görmek
Bu rehberde Apache üzerinde mod_proxy kullanarak reverse proxy kurulumu ve yük dengeleme yapılandırmasını öğreneceksiniz.
Bu Rehberde Öğrenecekleriniz
- Apache mod_proxy modülünü etkinleştirme
- Reverse proxy yapılandırması oluşturma
- Backend test sunucuları kurma (Flask ile)
- Birden fazla sunucuya yük dengeleme (load balancing)
- ProxyPass ve ProxyPassReverse farkı
- Reverse proxy yapılandırmalarında yaygın hatalar
Apache Reverse Proxy Nasıl Çalışır?
Reverse proxy mimarisinde istemci doğrudan backend sunuculara bağlanmaz.
Akış şu şekilde gerçekleşir:
Client → Apache Reverse Proxy → Backend Sunucu
Apache gelen isteği alır ve belirlenen backend adresine iletir.
Backend yanıtı tekrar Apache üzerinden istemciye gönderilir.
Bu yöntem sayesinde:
- Backend IP adresleri gizlenir
- Trafik merkezi bir noktadan kontrol edilir
- Sunucu yükü dengelenebilir
1. Gerekli Apache Modüllerini Etkinleştirme
Reverse proxy yapılandırması için aşağıdaki Apache modülleri gereklidir:
- mod_proxy → Temel proxy motoru
- mod_proxy_http → HTTP istek yönlendirme
- mod_proxy_balancer → Load balancing sistemi
- mod_lbmethod_byrequests → Round-robin dağıtım algoritması
Modülleri etkinleştirmek için:
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests
Modül değişikliklerinin aktif olması için Apache’yi yeniden başlatın:
sudo systemctl restart apache2
2. Backend Test Sunucuları Oluşturma (Opsiyonel)
Reverse proxy yapılandırmasını test etmek için iki basit backend uygulaması oluşturabilirsiniz.
Flask Kurulumu
sudo apt update
sudo apt install python3-pip
sudo pip3 install Flask==1.1.4
Backend Sunucu 1 (Port 8080)
Dosya oluşturun:
nano ~/backend1.py
İçerik:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return 'Hello world!'
Backend Sunucu 2 (Port 8081)
Dosyayı kopyalayın:
cp ~/backend1.py ~/backend2.py
nano ~/backend2.py
Yanıt mesajını değiştirin:
return 'Howdy world!'
Backend Sunucuları Başlatma
FLASK_APP=~/backend1.py flask run --port=8080 >/dev/null 2>&1 &
FLASK_APP=~/backend2.py flask run --port=8081 >/dev/null 2>&1 &
Sunucuların çalıştığını test edin:
curl http://127.0.0.1:8080/
curl http://127.0.0.1:8081/
3. Apache Reverse Proxy Yapılandırması
Apache VirtualHost dosyasını düzenleyin:
sudo nano /etc/apache2/sites-available/000-default.conf
Tek Backend Sunucuya Reverse Proxy
VirtualHost içine aşağıdaki yapılandırmayı ekleyin:
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>
Açıklamalar
ProxyPreserveHost
İstemciden gelen host başlığını backend'e iletir.
ProxyPass
Gelen isteği backend sunucuya yönlendirir.
ProxyPassReverse
Backend yanıtındaki yönlendirme URL'lerini düzenler.
Apache’yi yeniden başlatın:
sudo systemctl restart apache2
Tarayıcıdan sunucu IP adresine girdiğinizde backend çıktısını görmelisiniz.
http://sunucu_ip
4. Apache Load Balancing Yapılandırması
Birden fazla backend sunucunuz varsa Apache üzerinden yük dengeleme yapabilirsiniz.
VirtualHost yapılandırmasını aşağıdaki şekilde düzenleyin:
<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>
Bu yapılandırmada Apache round-robin algoritması kullanarak istekleri sırayla backend sunucularına gönderir.
Örnek akış:
İstek 1 → 8080
İstek 2 → 8081
İstek 3 → 8080
Tarayıcıyı yeniledikçe farklı backend yanıtlarını görebilirsiniz.
Sıkça Sorulan Sorular
Reverse proxy ne işe yarar?
Reverse proxy backend sunucularını gizler ve istemciden gelen trafiği yönlendirir. Aynı zamanda SSL, cache ve güvenlik işlemlerinin merkezi yönetilmesini sağlar.
ProxyPass ve ProxyPassReverse farkı nedir?
ProxyPass
İstemciden gelen isteği backend sunucuya yönlendirir.
ProxyPassReverse
Backend tarafından dönen yönlendirme URL'lerini istemciye uygun şekilde düzenler.
mod_proxyhangi protokolleri destekler?
Apache mod_proxy aşağıdaki protokollerle çalışabilir:
HTTP (mod_proxy_http)
WebSocket (mod_proxy_wstunnel)
AJP (mod_proxy_ajp)
FTP (mod_proxy_ftp)
Backend sunucularını nasıl durdurabilirim?
Flask test sunucularını kapatmak için:
killall flask
Sonuç
Bu rehberde Apache üzerinde mod_proxy kullanarak reverse proxy ve load balancing kurulumu gerçekleştirdiniz.
Bu yapı sayesinde:
Backend uygulamalarınızı gizlediniz Trafiği birden fazla sunucuya dağıttınız Ölçeklenebilir bir web mimarisi kurdunuz
Apache'nin modüler yapısı sayesinde Python, Node.js, PHP, Ruby ve diğer uygulama sunucuları için güçlü bir reverse proxy çözümü oluşturabilirsiniz.