Ana içeriğe geç

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 18080
İstek 28081
İstek 38080

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_proxy hangi 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.