Przekieruj podścieżkę do zewnętrznego hosta za pomocą Nginx

14

Muszę stworzyć dość prostą mapę w Nginx przekierowującą podścieżkę na inny serwer, który znajduje się w tej samej podsieci.

  • Serwer Nginx: 192.168.0.2
  • Serwer Tomcat: 192.168.0.3:8443

Próbowałem umieścić to w sekcji serwera

    location /tomcatapi/ {
        rewrite /tomcatapi/(.*) $1 break;
        proxy_pass http://192.168.0.3:8443;
    }

ale dostaję dostęp do http://www.myservice.com/tomcatapi/ to strona błędu 500 i w pliku dziennika nginx mam ten błąd:

    the rewritten URI has a zero length

Czego mi brakuje w tym konflikcie?

carlo.polisini
źródło

Odpowiedzi:

13

Spójrzmy na twoją linię przepisywania:

rewrite /tomcatapi/(.*) $1 break;

Bierzesz ten bit w nawiasach (tj. Wszystko po /tomcatapi/), który zostaje przypisany $1, i używasz go jako jedynej zawartości przepisanego URI.

W twoim przykładzie nie ma już nic /tomcatapi/, więc przepisywanie kończy się puste, i właśnie o tym narzeka nginx.

Jeśli zmienisz regułę przepisywania na

rewrite /tomcatapi/(.*) /$1 break;

wtedy zawsze będziesz mieć co najmniej /w wyniku przepisania.

Flup
źródło
Dziękuję za odpowiedź, w każdym razie dodałem „/”, ale teraz uzyskując dostęp do adresu URL przeglądarka utknęła w stanie ładowania, aw pliku dziennika widzę teraz inny błąd: wysyłanie nie wysłało prawidłowego nagłówka HTTP / 1.0 podczas odczytu nagłówka odpowiedzi z wysyłania
carlo.polisini
Co mówią dzienniki na serwerze Tomcat?
Flup
Znalazłem błąd, błąd polegał na tym, że aplikacja była dostępna tylko na https, a nie http! Tak więc składnia była tuż po twojej korekcie, po prostu zastąpiłem http https, aby to działało.
carlo.polisini,