Linux VPS'te Nginx ters proxy kurulumu

2 min
VPS/VDS Hosting

Ters proxy, 80 ve 443 portlarındaki genel trafiği alır ve yalnızca yerelde dinleyen uygulamalara iletir. HTTPS, tek IP üzerinde birden çok site ve günlükler ile limitler için tek bir nokta sağlar. Bu rehber, Node.js, Python veya Docker uygulamaları için bunu bir VPS Linux Infrawire üzerinde kurar.

📋 Ön koşullar

  • Root SSH erişimli bir Linux VPS (Ubuntu 24.04 / Debian 12 veya AlmaLinux 9 / Rocky 9). IP adresi ve root parolası müşteri alanınızdadır.
  • A/AAAA kayıtları VPS_IP adresine işaret eden example.com alan adı.
  • Yerel bir portu dinleyen bir uygulama, örneğin 127.0.0.1:3000.

📦 Nginx kurulumu

Bash
# Debian / Ubuntu sudo apt update && sudo apt install -y nginx # AlmaLinux / Rocky sudo dnf install -y nginx sudo systemctl enable --now nginx

AlmaLinux/Rocky'da SELinux, Nginx'in arka uçlara bağlanmasını varsayılan olarak engeller. Bir kez izin verin:

Bash
sudo setsebool -P httpd_can_network_connect 1

🚀 Proxy arkasında ilk uygulama

Uygulamanız yalnızca Nginx üzerinden erişilebilsin diye 0.0.0.0 değil 127.0.0.1 adresini dinlemelidir. Dil ne olursa olsun düzen aynıdır: 3000 portunda node server.js, Python için gunicorn -b 127.0.0.1:8000 app:app ya da docker run -d -p 127.0.0.1:3000:80 IMAGE ile yayımlanan bir konteyner.

/etc/nginx/sites-available/example.com dosyasını oluşturun (AlmaLinux/Rocky'da /etc/nginx/conf.d/example.com.conf kullanın):

Nginx
1server { 2 listen 80; 3 listen [::]:80; 4 server_name example.com; 5 6 location / { 7 proxy_pass http://127.0.0.1:3000; 8 proxy_http_version 1.1; 9 proxy_set_header Host $host; 10 proxy_set_header X-Real-IP $remote_addr; 11 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 12 proxy_set_header X-Forwarded-Proto $scheme; 13 } 14}

Debian/Ubuntu'da etkinleştirin, ardından doğrulayıp yeniden yükleyin:

Bash
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx

X-Forwarded-* başlıkları uygulamaya gerçek istemci IP'sini ve ziyaretçinin HTTPS kullanıp kullanmadığını bildirir. Bunlar olmadan uygulamanız yalnızca 127.0.0.1 görür ve http:// bağlantıları üretebilir. Pek çok çatının da proxy'ye güvenmesi gerekir (örneğin Express'te app.set('trust proxy', 1)).

🔌 WebSocket desteği

WebSocket, HTTP yükseltme başlıklarına ihtiyaç duyar. http bağlamının başına bir map ekleyin (örneğin /etc/nginx/conf.d/websocket.conf içinde):

Nginx
map $http_upgrade $connection_upgrade { default upgrade; '' close; }

Sonra location bloğunda:

Nginx
proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade;

⏱️ Zaman aşımları ve gövde boyutu

Varsayılanlar 60 saniye ve 1 MB'tır. Yavaş uç noktalar veya dosya yüklemeleri için ayarlayın:

Nginx
proxy_connect_timeout 5s; proxy_read_timeout 120s; proxy_send_timeout 120s; client_max_body_size 50m;

Uzun ömürlü bir WebSocket için proxy_read_timeout değerini artırın (örneğin 3600s) veya uygulamanın ping göndermesini sağlayın.

🔒 Certbot ile HTTPS

Önce güvenlik duvarında 80 ve 443 portlarını açın, sonra:

Bash
# Debian / Ubuntu sudo apt install -y certbot python3-certbot-nginx sudo certbot --nginx -d example.com

AlmaLinux/Rocky'da Certbot'u önce sudo dnf install -y epel-release, ardından sudo dnf install -y certbot python3-certbot-nginx ile kurun. Certbot sertifikayı server bloğunuza ekler, HTTP'den HTTPS'e yönlendirmeyi önerir ve otomatik yenilemeyi kurar. Şununla doğrulayın:

Bash
sudo certbot renew --dry-run

🗂️ Tek VPS'te birden çok uygulama

Her alan adı için ayrı bir server bloğu oluşturun; her birinin kendi server_name değeri ve yerel portu olsun:

Nginx
1server { 2 listen 80; 3 server_name app1.example.com; 4 location / { proxy_pass http://127.0.0.1:3000; } 5} 6 7server { 8 listen 80; 9 server_name app2.example.com; 10 location / { proxy_pass http://127.0.0.1:8000; } 11}

Proxy başlıklarını her blokta tekrarlayın, ardından Certbot'u -d app1.example.com -d app2.example.com ile çalıştırın. Yola göre de ayırabilirsiniz (location /api/ { proxy_pass http://127.0.0.1:8000/; }); sondaki eğik çizgi öneki kaldırır.

✅ Test

Bash
curl -I https://example.com ss -ltnp | grep -E ':(80|443|3000)' sudo tail -f /var/log/nginx/error.log

Arka uç portu yalnızca 127.0.0.1 adresine bağlı olmalı, Nginx ise 80 ve 443'ü dinlemelidir.

🛠️ Sorun giderme

502 Bad Gateway. Uygulama durmuş veya başka bir portta. ss -ltnp ile kontrol edip başlatın. AlmaLinux/Rocky'da hata günlüğündeki Permission denied, yukarıdaki SELinux ayarının eksik olduğunu gösterir.

504 Gateway Timeout. Arka uç proxy_read_timeout süresinden uzun sürüyor. Değeri artırın veya uç noktayı optimize edin.

WebSocket kopuyor ya da 400/426 ile başarısız oluyor. Upgrade ve Connection başlıkları eksik ya da proxy_http_version 1.1; yok.

Günlüklerde yanlış istemci IP'si. X-Forwarded-For gönderiliyor ama uygulamanız proxy'ye güvenmiyor. Çatınızın güven ayarını etkinleştirin.


🎉 Uygulamalarınız artık Nginx arkasında HTTPS, temiz başlıklar ve VPS'inizin kaldırabildiği kadar site için yer ile sunuluyor.

En yeni teklifler, indirimler ve özel promosyonlardan haberdar olun.

Promosyonları gör

Çerez kullanıyoruz

Sitemizdeki deneyiminizi iyileştirmek için analiz çerezleri kullanıyoruz. Hiçbir veri üçüncü taraflara satılmaz. Daha fazlasını şurada öğrenin: gizlilik politikası.