format_list_bulletedBu İçerikte Bahsedilen Konular
- arrow_rightNginx ile Gelişmiş Reverse Proxy ve Header Yönetimi
- arrow_rightReverse Proxy Nedir ve Neden Kullanılır?
- arrow_rightNginx Reverse Proxy Temel Yapılandırması
- arrow_rightGelişmiş Header Yönetimi
- arrow_rightTemel Proxy Header'ları
- arrow_rightX-Real-IP Header'ının Önemi
- arrow_rightGüvenlik Header'ları ve Yönetimi
- arrow_rightTemel Güvenlik Header'ları
- arrow_rightCSP (Content Security Policy) Yapılandırması
- arrow_rightPerformance Header'ları ve Optimizasyon
- arrow_rightÖnbellek Yönetimi
- arrow_rightCompression ve Transfer Optimizasyonu
- arrow_rightYük Dengeleme ve Failover
- arrow_rightYük Dengeleme Metodları
- arrow_rightYük Dengeleme Yapılandırması
- arrow_rightFailover Yapılandırması
- arrow_rightSSL/TLS Termination ve Header Yönetimi
- arrow_rightSSL Termination Yapılandırması
Nginx ile Gelişmiş Reverse Proxy ve Header Yönetimi
Nginx, dünya genelinde en popüler web sunucularından biri olarak trafiğin %50'sinden fazlasını yönetmektedir. Reverse proxy olarak kullanıldığında, arka uç sunucularını korurken yük dengeleme, güvenlik ve performans optimizasyonu sağlar. Bu kapsamlı rehberde, Nginx ile gelişmiş reverse proxy yapılandırması ve header yönetimini detaylı olarak inceleyeceğiz.
Reverse Proxy Nedir ve Neden Kullanılır?
Reverse proxy, istemcilerden gelen istekleri alarak arka uç sunucularına ileten ve bu sunuculardan gelen yanıtları istemcilere geri döndüren bir sunucu türüdür. Geleneksel proxy'lerden farklı olarak, reverse proxy sunucu tarafında konumlanır ve birden fazla arka uç sunucusunu tek bir giriş noktasından yönetir.
Reverse proxy kullanımının temel avantajları şunlardır:
- Yük dengeleme ile trafik dağılımı sağlar
- Arka uç sunucularını doğrudan erişimden korur
- SSL/TLS sonlandırma ile işlem yükünü azaltır
- Önbellek (cache) mekanizması ile performansı artırır
- Merkezi loglama ve izleme imkanı sunar
Nginx Reverse Proxy Temel Yapılandırması
Nginx'te reverse proxy yapılandırması, proxy_pass direktifi kullanılarak gerçekleştirilir. Aşağıda temel bir reverse proxy yapılandırması örneği bulunmaktadır:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_server:8080;
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;
}
}
Bu yapılandırmada kritik olan proxy_set_header direktifi, istemci bilgilerinin arka uç sunucuya iletilmesini sağlar. Güvenlik duvarı yapılandırması ile birlikte kullanıldığında, sunucu güvenliği önemli ölçüde artırılabilir.
Gelişmiş Header Yönetimi
Header yönetimi, reverse proxy yapılandırmasının en kritik bileşenlerinden biridir. Doğru header yapılandırması, güvenlik, performans ve SEO açısından büyük önem taşır.
Temel Proxy Header'ları
Nginx'in proxy modülü, isteklerin arka uç sunucuya iletilmesi için çeşitli header'lar tanımlar. İşte en sık kullanılan header'lar:
| Header Adı | Açıklama | Örnek Değer |
|---|---|---|
| Host | İstek yapılan host adı | $host veya $proxy_host |
| X-Real-IP | İstemcinin gerçek IP adresi | $remote_addr |
| X-Forwarded-For | Tüm proxy zincirindeki IP'ler | $proxy_add_x_forwarded_for |
| X-Forwarded-Proto | İstek protokolü (http/https) | $scheme |
| X-Forwarded-Host | Orijinal host adı | $host |
Bu header'ların doğru yapılandırılması, arka uç uygulamalarının istemci bilgilerine erişimini sağlar ve güvenlik header'ları ile entegre çalışır.
X-Real-IP Header'ının Önemi
Arka uç sunucularında gerçek istemci IP'sini almak için X-Real-IP header'ı kritik öneme sahiptir. Özellikle DDoS koruması ve erişim log'ları için bu header mutlaka ayarlanmalıdır:
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_add_x_forwarded_for değişkeni, mevcut X-Forwarded-For değerine yeni IP'yi ekleyerek zincirleme proxy ortamlarında doğru IP izleme sağlar.
Güvenlik Header'ları ve Yönetimi
Nginx reverse proxy üzerinden güvenlik header'ları eklemek, web uygulamalarının güvenliğini önemli ölçüde artırır. Modern web güvenliği standartlarına uyum için aşağıdaki header'lar yapılandırılmalıdır.
Temel Güvenlik Header'ları
location / {
proxy_pass http://backend:8080;
# Güvenlik Header'ları
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}
Bu header'ların açıklamaları:
- X-Frame-Options: Sayfaların iframe içinde görüntülenmesini kontrol eder, clickjacking saldırılarını önler
- X-Content-Type-Options: MIME type sniffing'i engeller
- X-XSS-Protection: Tarayıcı XSS filtrelerini etkinleştirir
- Referrer-Policy: Referans bilgisi paylaşımını düzenler
- Content-Security-Policy (CSP): Kaynak yükleme politikalarını belirler
- Strict-Transport-Security (HSTS): Zorunlu HTTPS kullanımını sağlar
Bu yapılandırma, ISO 27001 belgeli altyapı üzerinde çalıştırıldığında, uyumluluk gereksinimlerini karşılamada kritik rol oynar.
CSP (Content Security Policy) Yapılandırması
CSP, XSS ve veri sızıntısı saldırılarına karşı en etkili koruma mekanizmalarından biridir. Detaylı CSP yapılandırması:
add_header Content-Security-Policy "
default-src 'self';
script-src 'self' 'unsafe-inline' 'unsafe-eval' https://cdn.example.com;
style-src 'self' 'unsafe-inline' https://fonts.googleapis.com;
font-src 'self' https://fonts.gstatic.com;
img-src 'self' data: https:;
connect-src 'self' https://api.example.com;
frame-ancestors 'none';
" always;
CSP yapılandırırken, uygulamanızın ihtiyaç duyduğu kaynakları dikkatli bir şekilde beyaz listeye almanız gerekir. Yanlış yapılandırılmış CSP, sayfaların düzgün çalışmamasına neden olabilir.
Performance Header'ları ve Optimizasyon
Reverse proxy üzerinden performans optimizasyonu için çeşitli header'lar kullanılabilir. Bu header'lar, tarayıcı önbellek yönetimi ve kaynak yükleme stratejilerini optimize eder.
Önbellek Yönetimi
location / {
proxy_pass http://backend:8080;
# Önbellek yapılandırması
proxy_cache my_cache;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
# Cache-Control header'ları
add_header X-Cache-Status $upstream_cache_status;
}
X-Cache-Status header'ı, önbellek durumunu (HIT, MISS, EXPIRED vb.) gösterir ve performans izleme için kullanışlıdır. Nginx sıkıştırma rehberi ile birlikte kullanıldığında, bant genişliği tasarrufu sağlanabilir.
Compression ve Transfer Optimizasyonu
# Gzip sıkıştırması
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript application/xml+rss application/atom+image/svg+xml;
# Brotli sıkıştırması (nginx 1.19+)
brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css application/json application/javascript text/xml application/xml image/svg+xml;
Araştırmalara göre, gzip sıkıştırması web sayfası boyutlarını ortalama %70 oranında azaltabilir. Bu da özellikle mobil kullanıcılar için önemli bir performans kazanımı sağlar.
Yük Dengeleme ve Failover
Nginx reverse proxy, gelişmiş yük dengeleme özellikleri sunar. Birden fazla arka uç sunucusu ile yük dağılımı ve otomatik failover yapılandırılabilir.
Yük Dengeleme Metodları
| Metod | Açıklama | Kullanım Senaryosu |
|---|---|---|
| round_robin | Sıralı dağıtım (varsayılan) | Eşit kaynaklı sunucular |
| least_conn | En az bağlantıya sahip sunucu | Değişken yükler |
| ip_hash | IP bazlı hash dağılımı | Oturum tutma gereksinimi |
| weighted | Ağırlıklı dağıtım | Farklı kapasiteli sunucular |
Yük Dengeleme Yapılandırması
upstream backend_servers {
least_conn;
server backend1.example.com:8080 weight=3;
server backend2.example.com:8080 weight=2;
server backend3.example.com:8080 weight=1;
keepalive 32;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers;
proxy_http_version 1.1;
proxy_set_header Connection "";
# Health check
proxy_connect_timeout 5s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
keepalive bağlantıları, arka uç sunucularıyla sürekli TCP bağlantıları açarak tekrarlanan el sıkışma overhead'ini ortadan kaldırır. Bu, yüksek trafikli uygulamalarda %20'ye varan performans artışı sağlayabilir.
Failover Yapılandırması
upstream backend_servers {
server backend1.example.com:8080 max_fails=3 fail_timeout=30s;
server backend2.example.com:8080 backup;
server backend3.example.com:8080 down;
}
max_fails parametresi, bir sunucunun arızalı kabul edilmeden önce kaç kez başarısız olabileceğini belirler. backup olarak işaretlenen sunucu, yalnızca tüm birincil sunucular başarısız olduğunda devreye girer.
SSL/TLS Termination ve Header Yönetimi
Reverse proxy üzerinde SSL/TLS sonlandırması, arka uç sunucularının yükünü azaltır ve merkezi sertifika yönetimi sağlar.
SSL Termination Yapılandırması
server {
listen 443 ssl http2;
server_name example.com;
# SSL Sertifikaları
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
# SSL Güvenlik Ayarları
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
# HSTS
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
location / {
proxy_pass http://backend:8080;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
}
}
Modern SSL yapılandırması için TLS 1.2 ve TLS 1.3 kullanılmalı, eski protokoller devre dışı bırakılmalıdır