Puncte:0

Cum se transmite un site html de pe un alt server prin reverse proxy nginx?

drapel cn

Încerc să încarc o aplicație Angular dintr-un alt serviciu intern când apelez localhost:81/internal?pageId=10. Dar tot ceea ce se întâmplă este că nginx mă redirecționează în browser către localhost:80.

Am aceasta configuratie:

  locație ~ /internal(?<secțiune>.+) {
    proxy_pass http://192.168.1.100:8080/public/internal$section;
    proxy_set_header Gazdă $gazdă;
  }

După cum am citit în mai multe alte întrebări, asta ar trebui să funcționeze, dar din anumite motive nginx mă redirecționează către portul 80.

Antetele cererii:

GET /internal/?pageId=10
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3; q=0,9
Acceptare-Codificare: gzip, deflate
Limba de acceptare: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7
Conexiune: păstrați-vă în viață
Gazdă: localhost:81
Solicitări de upgrade-nesigure: 1
Agent utilizator: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, ca Gecko) Chrome/101.0.4951.67 Safari/537.36

Antete de răspuns:

HTTP/1.1 302 găsit
Server: nginx/1.21.6
Data: joi, 19 mai 2022 09:15:34 GMT
Transfer-Codificare: fragmentat
Conexiune: păstrați-vă în viață
Locație: http://localhost/public/internal?pageId=10
X-Powered-By: Jetty(9.4.40.v20210413)

Este chiar posibil acest lucru? Și dacă da, cum repar asta?

Ivan Shatsky avatar
drapel gr
Poate că serviciul dvs. intern nu se așteaptă ca antetul `Host` să fie setat la `$host` (care este egal cu `localhost:81` în cazul dvs.) și ar trebui să utilizați `proxy_set_header Host localhost;`? În plus, modul în care utilizați șirul de interogare nu este transmis în amonte (cu excepția cazului în care adăugați sufixul `$is_args$args` la directiva dvs. `proxy_pass`).
Apollo avatar
drapel cn
Serverul intern nu verifică anteturile. Tocmai am copiat liniile pe care le-am găsit pe StackExchange pentru a mă asigura că nu este o problemă acolo. Puteți da un exemplu cum să adăugați $is_args$args? Înlocuiesc secțiunea $?
Ivan Shatsky avatar
drapel gr
Nu, adăugați-l la sfârșitul URI-ului transmis serverului intern: `proxy_pass http://192.168.1.100:8080/public/internal$section$is_args$args;`. Puteți verifica ce se întâmplă solicitând URI-ul necesar direct de la serverul intern: `curl -v http://localhost/public/internal/?pageId=10`, `curl -v -H 'Host: localhost:81' http: //localhost/public/internal/?pageId=10`. Un exemplu de la întrebarea dvs. (`localhost:81/internal?pageId=10`) nu se potrivește cu anteturile pe care le-ați furnizat (`localhost:81/internal/?pageId=10`, rețineți slash-ul), cu excepția cazului în care se întâmplă o rescrire internă undeva în configurația dvs. nginx.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.