Reverse Proxy Nedir? Güvenli Sunucu Mimarisi
Uygulamanız direkt internete mi açık? SSL sertifikasını uygulama mı yönetiyor? Reverse Proxy ile uygulamanızı koruyun, performansı artırın ve altyapıyı merkezileştirin.
Forward vs Reverse Proxy
Forward Proxy
İstemci adına internete çıkar (VPN, kurumsal proxy):
İstemci → [Forward Proxy] → İnternet
Reverse Proxy
İnternet trafiğini backend sunuculara yönlendirir:
İnternet → [Reverse Proxy] → Backend Sunucu
Reverse Proxy Ne Yapar?
| Özellik | Açıklama | |---------|----------| | SSL Termination | HTTPS'i proxy'de çöz, backend'e HTTP gönder | | Load Balancing | Trafiği birden fazla sunucuya dağıt | | Caching | Statik dosyaları cache'le | | Compression | gzip/brotli sıkıştırma | | Rate Limiting | İstek sayısını sınırla | | Security | Backend IP'yi gizle, WAF desteği | | URL Rewriting | URL'leri yeniden yaz |
Nginx Yapılandırması
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# Güvenlik headers
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header Strict-Transport-Security "max-age=31536000";
# API proxy
location /api/ {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Statik dosyalar (cache)
location /static/ {
root /var/www;
expires 1y;
add_header Cache-Control "public, immutable";
}
# WebSocket
location /ws/ {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Traefik (Container-Native)
# docker-compose.yml
services:
traefik:
image: traefik:v3.0
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
api:
image: my-api:latest
labels:
- "traefik.http.routers.api.rule=Host(`api.example.com`)"
- "traefik.http.routers.api.tls.certresolver=letsencrypt"
Reverse Proxy Araçları
| Araç | Avantaj | Kullanım | |------|---------|----------| | Nginx | Performans, yaygınlık | Genel amaç | | Traefik | Otomatik keşif, Docker | Container ortamları | | Caddy | Otomatik HTTPS, basitlik | Küçük projeler | | HAProxy | TCP desteği, güvenilirlik | Yüksek trafik | | Envoy | gRPC, observability | Service mesh |
Best Practices
- SSL Termination proxy'de yapın — Backend'i yükten kurtarın
- Security headers ekleyin — HSTS, X-Frame-Options, CSP
- Request/response buffering — Yavaş istemcilerden backend'i koruyun
- Access log — Tüm istekleri kaydedin
- Health check — Backend sağlığını kontrol edin
- Rate limiting — Kötü niyetli trafiği engelleyin
Sonuç
Reverse Proxy, production ortamının vazgeçilmez bileşenidir. Uygulamanızı direkt internete açmak yerine, reverse proxy ile güvenlik, performans ve esneklik katmanı ekleyin.
Reverse proxy ve sunucu mimarisini LabLudus platformunda öğrenin.