Reverse Proxy Kurulumu (Nginx)

1) Reverse Proxy Kurulumu (Nginx)

Reverse proxy, gelen trafiği arka uçtaki bir veya birden fazla sunucuya dağıtmanı sağlar. Web uygulamalarında en çok kullanılan modeldir.

A) Gerekli paketlerin kurulumu

sudo apt update
sudo apt install nginx -y

B) Reverse Proxy Virtual Host yapılandırması

Örnek:
api.domain.com gelen istekleri http://127.0.0.1:3000 adresindeki Node/PHP uygulamasına yönlendirecek.

sudo nano /etc/nginx/sites-available/api.domain.com

İçerik:

server {
listen 80;
server_name api.domain.com;
location / {
proxy_pass http://127.0.0.1:3000;# Zorunlu proxy ayarları
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;

# Timeout ve buffer ayarları
proxy_read_timeout 60s;
proxy_send_timeout 60s;
proxy_buffering on;
}
}

Aktifleştir:

sudo ln -s /etc/nginx/sites-available/api.domain.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

C) SSL (Let’s Encrypt) ekleme

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d api.domain.com

Reverse proxy kurulumun tamamlandı.


2) Forward Proxy Kurulumu (Squid Proxy)

Forward proxy kullanıcıların internete çıkarken IP değiştirmesini sağlar. Kurulum Squid üzerinden yapılır.

A) Squid kurulumu

sudo apt update
sudo apt install squid -y

B) Squid yapılandırması

Konfigürasyon dosyasını aç:

sudo nano /etc/squid/squid.conf

Temel forward proxy yapılandırması:

http_port 3128

# Tüm IP’lere izin (gerekirse sınırla)
acl localnet src 0.0.0.0/0
http_access allow localnet
http_access deny all

# Log formatı
access_log /var/log/squid/access.log

# Performans
cache_mem 256 MB
maximum_object_size_in_memory 512 KB
maximum_object_size 50 MB
cache_dir ufs /var/spool/squid 500 16 256

Kaydet → çık → ardından:

sudo systemctl restart squid

Proxy test et:

curl -x http://SUNUCU_IP:3128 http://ipinfo.io/ip

3) Reverse Proxy’de Asıl Sunucu IP’si Görünür mü?

Hayır, reverse proxy modelinde istemciler doğrudan backend IP’sini göremez.
Backend tarafı (örneğin Node / PHP) ise X-Real-IP, X-Forwarded-For başlıkları sayesinde gerçek istemci IP’sini görebilir.

Eğer bu başlıkları kaldırırsan, backend yalnızca proxy IP’sini görür.


4) Proxy Çeşitleri Kısa Özet

Tür Ne işe yarar? Nerede kullanılır?
Reverse Proxy Trafiği backend’e yönlendirir, IP gizler Web siteleri, API yönlendirmeleri
Forward Proxy Kullanıcının çıkış IP’sini değiştirir VPN-like kullanım, internet çıkışı kontrolü
Transparent Proxy Kullanıcı fark etmeden trafiği dinler Kurumsal ağlar
Load Balancer Proxy Trafiği birden çok sunucuya dağıtır Yük dağıtım sistemleri

Aşağıda Cloudflare üzerinden tam reverse proxy konfigürasyonu için kurumsal seviyede hazırlanmış, uçtan uca eksiksiz bir kurulum rehberi bulacaksınız. Bu rehber hem gizli backend IP koruması, hem DDoS/WAF güvenliği, hem de SSL Termination + Full/Strict mod ile üretim için optimize edilmiştir.


1) Genel Mimari

Cloudflare Reverse Proxy mimarisi aşağıdaki gibidir:

Kullanıcı → Cloudflare Edge → (SSL Termination) → Nginx Reverse Proxy → Backend

Cloudflare, gerçek sunucunun IP adresini tamamen gizler ve trafiği süzer.
Nginx ise Cloudflare’den gelen trafiği backend’e yönlendirir.


2) Cloudflare DNS Ayarları

  1. Cloudflare hesabınıza girin.

  2. Domain seçin.

  3. DNS menüsüne gelin.

  4. Aşağıdaki şekilde DNS kaydı oluşturun:

Type Name Value Proxy Status
A api Sunucu_IP Proxied (Turuncu Bulut)

Turuncu bulut aktif proxy modudur.
Bu sayede gerçek IP tamamen gizlenir.


3) Cloudflare SSL/TLS Ayarları

Cloudflare → SSL/TLS → Overview

Aşağıdaki modu seçin:

Full (strict)

En güvenli mod:
Cloudflare ile sunucu arasında gerçek SSL sertifikası gerekir (Let’s Encrypt / Cloudflare Origin Certificate).


4) Origin Server’da SSL Sertifikası (Let’s Encrypt veya Cloudflare Origin)

Seçenek A – Let’s Encrypt Kurulumu

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d api.domain.com

Seçenek B – Cloudflare Origin Certificate

(En iyi güvenlik + yalnızca Cloudflare üzerinden erişim)

Cloudflare → SSL/TLS → Origin Server → Create Certificate
30 yıl geçerli sertifika üretir.

Sunucuya kaydedin:

sudo nano /etc/nginx/ssl/api.domain.com.crt
sudo nano /etc/nginx/ssl/api.domain.com.key

5) Sunucuda Cloudflare IP Whitelist (Yalnızca Cloudflare erişsin)

Gerçek kullanıcıların direkt sunucuya erişmesini engellemek için:

Cloudflare IP listesi indir:

curl https://www.cloudflare.com/ips-v4 -o ips-v4
curl https://www.cloudflare.com/ips-v6 -o ips-v6

Nginx konfigürasyonunda sadece Cloudflare IP’lerine izin ver:

# cloudflare ips
include /etc/nginx/cloudflare.conf;

Oluştur:

sudo nano /etc/nginx/cloudflare.conf

İçerik:

allow 173.245.48.0/20;
allow 103.21.244.0/22;
allow 103.22.200.0/22;
allow 103.31.4.0/22;
allow 141.101.64.0/18;
allow 108.162.192.0/18;
allow 190.93.240.0/20;
allow 188.114.96.0/20;
allow 197.234.240.0/22;
allow 198.41.128.0/17;
allow 162.158.0.0/15;
allow 104.16.0.0/13;
allow 104.24.0.0/14;
allow 172.64.0.0/13;
allow 131.0.72.0/22;
deny all;

6) Cloudflare için Optimize Reverse Proxy Nginx Konfigürasyonu

sudo nano /etc/nginx/sites-available/api.domain.com

İçerik:

server {
listen 80;
server_name api.domain.com;
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
server_name api.domain.com;

# SSL Sertifikaları
ssl_certificate /etc/nginx/ssl/api.domain.com.crt;
ssl_certificate_key /etc/nginx/ssl/api.domain.com.key;

# Cloudflare güvenlik
include /etc/nginx/cloudflare.conf;

# Güçlü SSL ayarları
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;

# Proxy ayarları
location / {
proxy_pass http://127.0.0.1:3000;

proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}

Aktifleştir:

sudo ln -s /etc/nginx/sites-available/api.domain.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

7) Backend IP’nin %100 Gizlenmesi

Cloudflare reverse proxy’de backend IP’nin görünmemesi için:

  1. DNS’te turuncu bulut aktif olacak

  2. Sunucuya direkt IP erişimini blokla:

sudo ufw default deny incoming
sudo ufw allow 22
sudo ufw allow 'Nginx Full'
sudo ufw enable
  1. Non-Cloudflare IP’leri tamamen engelle (adım 5’te yaptık)

  2. Cloudflare Trace test:

curl -I http://api.domain.com

Sonuçta aşağıdaki header’lar görünmeli:

server: cloudflare
cf-ray: xxxxxxx

Backend IP görünmez.


8) Cloudflare Güvenlik ve Performans Optimizasyonu

WAF Ayarları

Cloudflare → Security → WAF

  • Managed Rules: ON

  • Bot Fight Mode: ON

  • Rate Limiting Rules: istediğin endpoint için limit koyabilirim

Speed Ayarları

Cloudflare → Speed

  • Brotli: ON

  • HTTP/3: ON

  • Early Hints: ON

  • Polish (resim optimizasyonu): PRO plan gerekir

Cache Ayarları

Cloudflare → Caching

  • Caching Level: Standard

  • Browser Cache TTL: 1 hour

  • Edge Cache TTL: Edge Cache Rules ile özelleştirilebilir

Post navigation

Leave a Comment

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir