Nginx Reverse Proxy ve Load Balancing Rehberi
zafer ak
Yazar
Nginx, yüksek performanslı bir web sunucusu, reverse proxy ve load balancer olarak kullanılabilir. Bu rehberde Nginx ile trafik yönetimini öğreneceksiniz.
Reverse Proxy Nedir?
Reverse proxy, istemci isteklerini arka uç sunuculara yönlendiren bir ara katmandır. Avantajları:
- Güvenlik: Arka uç sunucuları gizleme
- SSL Termination: Merkezi SSL yönetimi
- Caching: Statik içerik önbellekleme
- Load Balancing: Yük dağıtımı
- Compression: Gzip/Brotli sıkıştırma
Nginx Kurulumu
# Ubuntu/Debian
sudo apt update
sudo apt install nginx
# CentOS/RHEL
sudo dnf install nginx
# Başlat
sudo systemctl enable nginx
sudo systemctl start nginx
Temel Reverse Proxy
# /etc/nginx/sites-available/app.conf
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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;
proxy_cache_bypass $http_upgrade;
}
}
Load Balancing
Upstream Tanımlama
# /etc/nginx/conf.d/upstream.conf
upstream backend_servers {
# Round Robin (varsayılan)
server 192.168.1.101:8080;
server 192.168.1.102:8080;
server 192.168.1.103:8080;
}
# Weighted Load Balancing
upstream weighted_backend {
server 192.168.1.101:8080 weight=5;
server 192.168.1.102:8080 weight=3;
server 192.168.1.103:8080 weight=2;
}
# Least Connections
upstream least_conn_backend {
least_conn;
server 192.168.1.101:8080;
server 192.168.1.102:8080;
}
# IP Hash (Sticky Sessions)
upstream ip_hash_backend {
ip_hash;
server 192.168.1.101:8080;
server 192.168.1.102:8080;
}
Load Balancer Yapılandırması
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# Timeout ayarları
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
Health Checks
upstream backend_servers {
server 192.168.1.101:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.102:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.103:8080 backup; # Yedek sunucu
}
SSL Termination
server {
listen 443 ssl http2;
server_name app.example.com;
ssl_certificate /etc/letsencrypt/live/app.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/app.example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
}
}
# HTTP to HTTPS redirect
server {
listen 80;
server_name app.example.com;
return 301 https://$server_name$request_uri;
}
Caching
# Cache zone tanımlama (nginx.conf içinde http bloğunda)
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m;
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://backend_servers;
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
add_header X-Cache-Status $upstream_cache_status;
}
# Statik dosyalar için cache
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
proxy_pass http://backend_servers;
proxy_cache my_cache;
proxy_cache_valid 200 30d;
expires 30d;
}
}
WebSocket Desteği
location /ws/ {
proxy_pass http://websocket_backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_read_timeout 86400;
}
Sonuç
Nginx, yüksek performanslı reverse proxy ve load balancer olarak mükemmel çalışır. Doğru yapılandırma ile uygulamalarınızın ölçeklenebilirliğini ve güvenliğini artırabilirsiniz.