nginx Reverse Proxy Rehberi
Bu sayfada
Reverse proxy, uygulamalarınızın önünde durur ve ziyaretçilerin isteklerini onlara iletir. Önde nginx olduğunda, bir portta çalışan Node.js uygulaması, Docker container'ı ya da panel https://app.example.com hâline gelir; HTTPS, doğru başlıklar ve her şeyi yönetebileceğiniz tek bir yerle.
Bu rehber, nginx'i Ubuntu'da adım adım reverse proxy olarak kurar: server bloğu, başlıklar, WebSockets, ücretsiz HTTPS ve en çok karşılaşacağınız hatalar.
Reverse proxy ne işe yarar
- Tek bir genel giriş noktası. nginx 80 ve 443 portlarını dinler ve her alan adını ya da yolu doğru uygulamaya yönlendirir; böylece uygulamaların kendisi hiçbir zaman doğrudan internete açılmaz.
- HTTPS tek yerde. Sertifikaları nginx yönetir; arkasındaki uygulamalar localhost üzerinde düz HTTP konuşabilir.
- Tek sunucuda birden fazla uygulama.
app.example.com,api.example.comveexample.com/blogher biri farklı bir servise gidebilir. - Ekstralar: sıkıştırma, önbellekleme, yükleme limitleri ve erişim kuralları, uygulamaya dokunmadan.
Adım 1: nginx'i kurun
sudo apt update sudo apt install nginx
http://your-server-ip adresini açın, nginx karşılama sayfasını görmelisiniz. ufw kullanıyorsanız web trafiğine sudo ufw allow 'Nginx Full' ile izin verin.
Uygulamanızın çalıştığından ve sunucunun kendisinden erişilebilir olduğundan emin olun, örneğin curl http://127.0.0.1:3000 ile. Bu başarısız olursa nginx de başarısız olur.
nginx'i ve uygulamalarınızı tam root erişimiyle çalıştırın: HytHost KVM VPS paketleri €2.92/ay'dan başlar.
VPS paketlerini görAdım 2: Proxy server bloğunu oluşturun
Ubuntu'da her site /etc/nginx/sites-available/ içinde bir dosya alır ve sites-enabled içindeki bir bağlantıyla etkinleştirilir. /etc/nginx/sites-available/app.example.com dosyasını oluşturun:
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://127.0.0.1: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;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Etkinleştirin, yapılandırmayı test edin ve yeniden yükleyin:
sudo ln -s /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx
Alan adının A kaydını sunucunuza yönlendirin; artık http://app.example.com uygulamanızı gösterir. Yeniden yüklemeden önce her zaman nginx -t çalıştırın: yazım hatalarını siteyi çökertmeden yakalar.
Başlıklar ve sondaki eğik çizgi
Host, ziyaretçinin istediği alan adını iletir. Bu olmadan nginxproxy_passiçindeki adresi gönderir ve bağlantıları host'tan oluşturan uygulamalar bozulur.X-Real-IPveX-Forwarded-For, ziyaretçinin IP adresini iletir. Bunlar olmadan her istek127.0.0.1adresinden gelmiş gibi görünür.X-Forwarded-Proto, uygulamaya ziyaretçinin HTTPS kullanıp kullanmadığını söyler; böylece uygulama döngüye girerek yönlendirme yapmaz.
Ubuntu'nun nginx paketi bu satırları /etc/nginx/proxy_params içinde getirir, yani include proxy_params; bir kısayoldur.
Sondaki eğik çizgi önemlidir. Bir yol altındaki uygulama için:
location /app/ {
proxy_pass http://127.0.0.1:3000/;
}
Porttan sonra eğik çizgi varsa /app/login uygulamaya /login olarak ulaşır. Yoksa uygulama /app/login yolunun tamamını alır.
WebSockets
Sohbet uygulamaları, canlı paneller ve birçok yönetim paneli WebSockets kullanır; bunlar iki ek başlık gerektirir. Bu map'i bir kez, http bloğunun içine ekleyin, örneğin yeni bir /etc/nginx/conf.d/websocket.conf dosyasına:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
Ardından location içinde:
proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_read_timeout 1h;
nginx, 60 saniye boyunca hiçbir şey göndermeyen proxy bağlantısını kapatır; daha uzun bir proxy_read_timeout sessiz WebSocket bağlantılarını açık tutar. proxy_http_version 1.1 yalnızca nginx 1.29.7'den itibaren varsayılandır ve Ubuntu 24.04 1.24 sürümüyle gelir, bu yüzden satırı koruyun.
Adım 3: Certbot ile ücretsiz HTTPS
sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/local/bin/certbot sudo certbot --nginx -d app.example.com
Certbot ücretsiz bir Let's Encrypt sertifikası alır, HTTPS ayarlarını server bloğunuza ekler ve HTTP'yi HTTPS'ye yönlendirebilir. Sertifikayı otomatik olarak yeniler; sudo certbot renew --dry-run ile kontrol edin. Sertifikalar hakkında daha fazlası için: ücretsiz SSL sertifikası nasıl alınır.
502, 504 ve 413 hatalarını çözme
| Hata | Olası neden | Çözüm |
|---|---|---|
| 502 Bad Gateway | nginx uygulamaya ulaşamıyor: uygulama durdurulmuş, çökmüş ya da başka bir port veya adreste dinliyor | Uygulamayı başlatın, portu curl http://127.0.0.1:PORT ile kontrol edin, /var/log/nginx/error.log dosyasını okuyun |
| 504 Gateway Timeout | Uygulamanın yanıt vermesi 60 saniyeden uzun sürdü | İsteği hızlandırın ya da o location için proxy_read_timeout değerini artırın |
| 413 Request Entity Too Large | Yükleme, nginx'in varsayılan 1 MB limitinden büyük | Server bloğunda client_max_body_size 50m; ayarlayın |
| Yönlendirme döngüsü | Uygulama, ziyaretçinin HTTPS kullandığını bilmiyor | X-Forwarded-Proto başlığını iletin ve uygulamaya bir proxy arkasında olduğunu söyleyin |
Her değişiklikten sonra: sudo nginx -t, ardından sudo systemctl reload nginx.
HytHost VPS üzerinde çalıştırın
Bir reverse proxy, 80 ve 443 portlarını kontrol ettiğiniz bir sunucuya ihtiyaç duyar. HytHost VPS paketleri tam root erişimi, SSD depolama ve DDoS korumasıyla KVM üzerinde çalışır; Ubuntu 24.04'ü seçin ve yukarıdaki adımları izleyin. Uygulamalarınızı container'larda mı çalıştırıyorsunuz? Önce Ubuntu'ya Docker nasıl kurulur rehberiyle Docker'ı kurun ve container portlarını 127.0.0.1 adresine bağlayın, böylece onlara yalnızca nginx erişebilir.
Sıkça sorulan sorular
Reverse proxy, istekleri arkasındaki bir veya daha fazla uygulamaya iletir. Load balancer ise istekleri aynı uygulamanın birden fazla kopyasına dağıtan bir reverse proxy'dir. nginx, kopyaları listeleyen bir upstream bloğuyla ikisini de yapabilir.
nginx arkasındaki uygulamaya ulaşamıyor. Uygulamanın çalıştığını ve proxy_pass içindeki adres ve portta dinlediğini kontrol edin; kesin neden için /var/log/nginx/error.log dosyasını okuyun.
Uygulama aynı sunucuda çalışıyorsa hayır. nginx ziyaretçiler için HTTPS'yi yönetir ve uygulamayla 127.0.0.1 üzerinden düz HTTP ile konuşur; bu trafik makineden hiç çıkmaz.
Her uygulamaya kendi server_name değeriyle kendi server bloğunu verin, örneğin app.example.com ve api.example.com; her biri farklı bir porta giden bir proxy_pass içersin.
Evet. Her container'ın portunu yalnızca 127.0.0.1 üzerinde yayınlayın ve proxy_pass ile oraya yönlendirin. Bu, container'ları genel internetten uzak tutar; bu önemlidir çünkü Docker'ın yayınlanan portları ufw'yi atlar.
Uygulamalarınızı nginx arkasında barındırın
Tam root erişimi, SSD depolama ve DDoS korumalı HytHost KVM VPS paketleri €2.92/ay'dan başlar.
Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hoursBu rehber işine yaradı mı?