format_list_bulletedBu İçerikte Bahsedilen Konular
- arrow_rightNginx Proxy Pass Nedir ve Nasıl Çalışır?
- arrow_rightProxy Pass Temel Çalışma Mantığı
- arrow_rightNginx Proxy Pass Konfigürasyonu
- arrow_rightTemel Proxy Pass Yapılandırması
- arrow_rightBirden Fazla Servisi Farklı Path' lere Yönlendirme
- arrow_rightFarklı Portlardaki Servisleri Aynı Domain Altında Yayınlama
- arrow_rightProxy Pass Header Yönetimi
- arrow_rightÖnemli Proxy Header'ları
- arrow_rightWebSocket Desteği için Proxy Yapılandırması
- arrow_rightGüvenlik Yapılandırması
- arrow_rightSSL/TLS ile Proxy Pass Kullanımı
- arrow_rightErişim Kontrolü
- arrow_rightYaygın Hatalar ve Çözümleri
- arrow_rightPort Erişilebilirlik Kontrolü
- arrow_rightYaygın Hata Kodları ve Anlamları
- arrow_rightPerformance Optimizasyonu
- arrow_rightBuffer ve Timeout Ayarları
- arrow_rightLoad Balancing ile Proxy Pass
- arrow_rightPratik Kullanım Senaryoları
- arrow_rightGeliştirme Ortamı Kurulumu
- arrow_rightKurumsal Kullanım Örneği
- arrow_rightSonuç ve En İyi Uygulamalar
Nginx Proxy Pass Nedir ve Nasıl Çalışır?
Nginx Proxy Pass, web sunucunuzun belirli istekleri farklı portlardaki backend servislere yönlendirmesini sağlayan güçlü bir ters vekil (reverse proxy) özelliğidir. Bu teknoloji, tek bir Nginx sunucusu üzerinden birden fazla servisi tek bir domain altında yayınlamanıza olanak tanır. Özellikle mikroservis mimarilerinde ve çoklu uygulama barındırma senaryolarında vazgeçilmez bir araç haline gelmiştir.
Statistics show that over 66% of web servers using reverse proxy configurations prefer Nginx for its performance and flexibility. Proxy pass özelliği, gelen HTTP/HTTPS isteklerini alır ve bunları yapılandırmanıza göre farklı portlardaki uygulamalara iletir.
Proxy Pass Temel Çalışma Mantığı
Proxy Pass mekanizması şu adımlarla çalışır:
- Client, Nginx sunucusuna bir istek gönderir
- Nginx, gelen isteği proxy_pass direktifi ile tanımlanan hedefe yönlendirir
- Backend sunucusu yanıtı Nginx'e iletir
- Nginx, bu yanıtı client'a geri gönderir
Bu süreç, Nginx trafik yönetimi açısından kritik öneme sahiptir ve performans optimizasyonları için temel oluşturur.
Nginx Proxy Pass Konfigürasyonu
Temel Proxy Pass Yapılandırması
Aşağıdaki örnek, 3000 portunda çalışan bir Node.js uygulamasını proxy pass ile yayınlamayı gösterir:
server {
listen 80;
server_name example.com;
location / {
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;
}
}
Bu konfigürasyon, example.com adresine gelen tüm istekleri 3000 portundaki uygulamaya yönlendirir. Güvenlik politikaları açısından header ayarları kritik öneme sahiptir.
Birden Fazla Servisi Farklı Path' lere Yönlendirme
Tek bir Nginx sunucusu üzerinden birden fazla servisi farklı URL path'leri üzerinden yayınlamak mümkündür:
server {
listen 80;
server_name example.com;
# Node.js API servisi
location /api/ {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
}
# Python Flask uygulaması
location /admin/ {
proxy_pass http://localhost:5000;
}
# Statik dosya sunucusu
location /files/ {
proxy_pass http://localhost:8080;
}
}
Farklı Portlardaki Servisleri Aynı Domain Altında Yayınlama
Gerçek dünya senaryolarında, farklı portlarda çalışan birçok servisi tek bir domain altında birleştirmek yaygın bir ihtiyaçtır. Aşağıdaki tablo bu yapılandırmayı özetlemektedir:
| Servis | Port | URL Path | Kullanım Amacı |
|---|---|---|---|
| React Frontend | 3000 | / | Kullanıcı arayüzü |
| Node.js API | 4000 | /api/ | RESTful API |
| Python ML Servisi | 5000 | /ml/ | Makine öğrenimi |
| İzleme Paneli | 9090 | /monitor/ | Prometheus/Grafana |
Bu yapılandırma, Docker Swarm mimarilerinde yaygın olarak kullanılır.
Proxy Pass Header Yönetimi
Önemli Proxy Header'ları
Backend uygulamaların doğru çalışması için aşağıdaki header'ların ayarlanması şiddetle tavsiye edilir:
- Host: Orijinal host bilgisini backend'e iletir
- X-Real-IP: Client'in gerçek IP adresini taşır
- X-Forwarded-For: Zincir halindeki proxy'lerde tüm IP'leri listeler
- X-Forwarded-Proto: Kullanılan protokolü (http/https) belirtir
WebSocket Desteği için Proxy Yapılandırması
Gerçek zamanlı uygulamalar için WebSocket desteği eklenmelidir:
location /ws/ {
proxy_pass http://localhost:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
Bu yapılandırma, Ghost blog kurulumu gibi gerçek zamanlı içerik yönetim sistemlerinde gereklidir.
Güvenlik Yapılandırması
SSL/TLS ile Proxy Pass Kullanımı
Güvenli iletişim için HTTPS yapılandırması şu şekilde yapılır:
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Bu yapılandırma, sunucu şifreleme ve veri koruma açısından temel güvenlik önlemlerinden biridir.
Erişim Kontrolü
Belirli IP adreslerine erişim kısıtlaması uygulanabilir:
location /admin/ {
proxy_pass http://localhost:5000;
allow 192.168.1.0/24;
allow 10.0.0.0/8;
deny all;
}
Detaylı erişim kontrolü için sunucu erişim kontrolü rehberimizi inceleyebilirsiniz.
Yaygın Hatalar ve Çözümleri
Port Erişilebilirlik Kontrolü
Proxy pass hatalarının en yaygın nedeni backend servisinin çalışmamasıdır. Öncelikle port kontrolü yapılmalıdır:
# Port durumunu kontrol etme
netstat -tlnp | grep LISTEN
ss -tlnp | grep LISTEN
Yaygın Hata Kodları ve Anlamları
| Hata Kodu | Anlamı | Çözüm |
|---|---|---|
| 502 Bad Gateway | Backend servise ulaşılamıyor | Port ve servis durumunu kontrol edin |
| 504 Gateway Timeout | Backend yanıt vermiyor | Backend performansını artırın veya timeout süresini uzatın |
| 111 Connection Refused | Port dinlenmiyor | Servisin çalıştığını doğrulayın |
Detaylı hata yönetimi için Nginx hata yönetimi rehberimize göz atın.
Performance Optimizasyonu
Buffer ve Timeout Ayarları
Performans için buffer yapılandırması önemlidir:
location / {
proxy_pass http://localhost:3000;
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 4k;
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
Bu ayarlar, yoğun trafikli ortamlarda sunucu performans testi sırasında kritik önem taşır.
Load Balancing ile Proxy Pass
Yüksek erişilebilirlik için birden fazla backend sunucusu kullanılabilir:
upstream backend_servers {
least_conn;
server localhost:3001;
server localhost:3002;
server localhost:3003;
}
server {
location / {
proxy_pass http://backend_servers;
}
}
Pratik Kullanım Senaryoları
Geliştirme Ortamı Kurulumu
Modern geliştirme ortamlarında, farklı teknolojiler kullanan servisleri tek bir sunucu üzerinden yayınlamak yaygın bir ihtiyaçtır. Örneğin:
- React uygulaması (port 3000)
- Node.js API (port 4000)
- Veritabanı yönetim arayüzü (port 8080)
- Redis cache arayüzü (port 8081)
Bu yapılandırma, KodBox gibi dosya yönetim sistemlerinde de kullanılabilir.
Kurumsal Kullanım Örneği
Kurumsal ortamlarda, kurumsal e-posta sistemleri ve içerik yönetim sistemleri için proxy pass kullanımı yaygındır. Örneğin, e-posta web arayüzü farklı bir portta çalışırken, ana web sitesi farklı bir port üzerinden sunulabilir.
Sonuç ve En İyi Uygulamalar
Nginx Proxy Pass, modern web mimarisinin temel yapı taşlarından biridir. Doğru yapılandırıldığında, tek bir sunucu üzerinden birden fazla servisi güvenli ve performanslı bir şekilde yayınlayabilirsiniz. En iyi uygulamalar arasında her zaman uygun header ayarları yapmak, güvenlik önlemlerini ihmal etmemek ve düzenli performans izlemesi yapmak yer alır.
Yüksek trafikli ortamlarda DDoS koruma hizmetlerimizle birlikte kullanım, maksimum güvenlik ve erişilebilirlik sağlar. Sunucu altyapınızı güçlendirmek için sistem politikalarımızı inceleyebilirsiniz.