Więc konfiguruję wirtualną ścieżkę, wskazując na aplikację node.js w moim nginx conf. odpowiednia sekcja wygląda tak:
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;
}
Działa świetnie, z tym wyjątkiem, że moja aplikacja node.js (aplikacja ekspresowa) wywołuje przekierowanie.
Na przykład w polu dewelopera działa nginx na porcie 8080, więc adres URL do katalogu głównego aplikacji węzła wygląda następująco:
http: // localhost: 8080 / app
Kiedy wywołuję przekierowanie do „/ app” z węzła, rzeczywiste przekierowanie przechodzi do:
Odpowiedzi:
Problem polega na tym, że aplikacja Node.js nieprawidłowo wydaje przekierowanie. Możesz użyć
proxy_redirect
tej metody w celu skorygowania tego w nginx:źródło
Właśnie musiałem rozwiązać ten sam problem z Jenkinsem działającym za nginx. Zrobiłem to, włączając port serwera do
Host
nagłówka wysyłanego do Jenkinsa:Mam nadzieję, że to pomaga.
źródło
Próbowałem powyższych rozwiązań, ale wszystkie one zawiodły za każdym razem, gdy aplikacja węzła wydała w pełni kwalifikowany adres URL w nagłówku lokalizacji, na przykład „ http://nodeapp.com:8080/new/location ”
Więc skończyłem używając $ http_host do przekazania hosta i portu. I używając dopasowania ~ ^, aby całkowicie przepisać adresy URL.
W naszym przypadku serwer Node działa na 8080, a nasz serwer proxy nginx na 8000. Oznacza to, że każdy w pełni kwalifikowany adres URL w nagłówku lokalizacji musi zostać przepisany. Mam nadzieję, że to komuś pomoże !!
źródło
W przypadku rozmowy dotyczącej tego pytania poprawnym rozwiązaniem jest dostosowanie
Host
dyrektywy nagłówka proxy .Zmień to:
Do tego:
$http_host
przechowuje wartość określoną w nagłówku HTTP HOST, który obejmuje port. Przekierowania powinny odebrać niestandardowy port bez dalszego dostosowywania konfiguracji OP.Te odpowiedzi (ten sam bilet) dopracowują:
źródło