nginx proxy geçişi yönlendirmeleri yoksay bağlantı noktası


34

Yani nginx conf bir node.js uygulamasını işaret ederken sanal bir yol kuruyorum. ilgili bölüm öyle görünüyor:

location /app {
  rewrite /app/(.*) /$1 break;
  proxy_pass http://localhost:3000;
  proxy_redirect off;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Node.js uygulamamın (hızlı uygulama) yönlendirmeyi çağırması dışında harika çalışıyor.

Örnek olarak, dev box 8080 portunda nginx kullanıyor ve bu yüzden url, düğüm uygulamasının kök dizinine benziyor:

http: // localhost: 8080 / uygulaması

Düğümden '/ app' dizinine bir çağrı yaptığımda, gerçek yönlendirme şu noktaya gider:

http: // localhost / uygulama


İşte kullanımı öneren bazı cevaplar: proxy_set_header Host $ http_host; Ancak kimse güvenlik açığına yol açabileceğini söylemedi (ana bilgisayar başlık saldırısı). Burada saldırı örneği ve burada daha fazla bilgi var

Yanıtlar:


14

Sorun Node.js uygulamasının yönlendirmeyi doğru vermemesidir. Bunu proxy_redirectnginx'te düzeltmek için kullanabilirsiniz :

proxy_redirect http://localhost/ http://localhost:8080/;

47

Aynı sorunu Jenkins'in nginx'in arkasından geçmesiyle de çözmek zorunda kaldım. Benim için ne yaptı, sunucu portunu HostJenkins'e gönderilen başlığa eklemek oldu :

proxy_set_header Host $host:$server_port;

Umarım yardımcı olur.


3
Bingo. @mgorven'in dediği gibi, düğüm yönlendirmeyi çok kötü ayarlıyor, çünkü nginx ev sahibini çok fazla yönlendiriyor
Eric

5

Yukarıdaki çözümleri denedim, fakat düğüm uygulaması konum başlığında " http://nodeapp.com:8080/new/location " gibi tam bir URL yayınladığında hepsi başarısız oldu

Bu yüzden $ http_host kullanarak host ve port'u geçtim. Ve URL'leri tamamen yeniden yazmak için bir eşleşme ~ ^ kullanarak.

  proxy_pass http://10.0.0.3:8080;

  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header Host $http_host;

  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

  proxy_redirect default;
  proxy_redirect ~^(https?://[^:]+):\d+(?<relpath>/.+)$ http://10.0.0.3:8000$relpath;

Bizim durumumuzda, Node server 8080'de çalışıyor ve nginx proxy'imiz 8000'de çalışıyor. Bu, bir yer başlığındaki her tam URL adresinin yeniden yazılması gerektiği anlamına geliyor. Umarım bu birine yardımcı olur!


4

Bu soru üzerine yapılan konuşmada , uygun karar vekilin Hostbaşlık direktifini ayarlamaktır .

Bunu değiştir:

proxy_set_header Host $host;

Buna:

proxy_set_header Host $http_host;

$http_hostdeğeri, bağlantı noktasını içeren HTTP HOST başlığında belirtilen şekilde tutar. Yönlendirmeler, OP kurulumunda daha fazla kişiselleştirme yapmadan özel portu almalıdır.

Bu cevaplar (aynı bilet) daha da detaylandırıyor:

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.