Puncte:0

Site-ul web folosește o adresă URL greșită după proxy prin Nginx

drapel cn

Este prima dată când folosesc nginx și găsesc această situație destul de enigmatică. Site-ul meu este găzduit la web.example.com și pentru a ajunge la backend, cererile sunt direcționate prin nginx ca un proxy invers. După procesarea prin nginx, adresa URL se schimbă la adresa URL a serverului nginx (proxy.example.com) în loc să fie adresa URL a site-ului web.

Fluxul arată cam așa:

web.example.com -> nginx (proxy.example.com) -> backend (service.example.com)

Când înregistrez cererea în serviciul backend, pot vedea că x-forwarded-host este setat la proxy.example.com. Este corect sau ar trebui setat web.example.com Aici?

Fișierul nginx.conf este:

evenimente {
    conexiuni_muncitor 1024;
}

http {
    includ /etc/nginx/mime.types;
    aplicație de tip_default/octet-stream;

    log_format principal '$remote_addr - $remote_user [$time_local] $status'
        '"$request" $body_bytes_sent "$http_referer" '
        '"$http_user_agent" "$http_x_forwarded_for"';

    access_log logs/access.log principal;

    server { # simplu reverse-proxy
        asculta 80;
        nume_server proxy.example.com;

        locație /site {
            proxy_set_header Gazdă $http_host;
            proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
            proxy_set_header x-forwarded-host $gazdă;
            proxy_set_header x-forwarded-server $gazdă;
            proxy_set_header x-real-ip $adresă_la distanță;
            proxy_pass_request_headers activat;
            proxy_pass http://service.example.com$request_uri;
        }
    }
}

Cum obțin adresa URL la care să revin web.example.com/site după ce a trecut prin acest flux în loc să arate ca proxy.example.com/site?

Mulțumiri.

Michael Hampton avatar
drapel cz
Această configurație pare corectă. Mai exact ce vezi că este o problemă? Fii specific.
drapel cn
@MichaelHampton problema este că adresa URL a proxy-ului este expusă. De ce se întâmplă asta? Doresc ca adresa URL să rămână web.example.com.
Michael Hampton avatar
drapel cz
Ce anume vrei sa spui? Descrierea vagă este inutilă.
drapel cn
Adresa URL din bara de locație a browserului se schimbă din web.example.com în proxy.example.com, astfel încât utilizatorii finali să poată vedea adresa URL a proxy-ului. Nu cred că asta ar trebui să se întâmple
Michael Hampton avatar
drapel cz
OK, acum am înțeles. Totuși, asta nu este cauzat de nginx; acesta este backend-ul tău.
drapel cn
@MichaelHampton poți spune mai multe? Cum ar schimba backend-ul meu adresa URL din bara de locație?
Michael Hampton avatar
drapel cz
Niciunul dintre noi nu poate ști; este backend-ul tău și nu ai spus nimic despre ce este.
drapel cn
Backend este o aplicație java care rulează pe Tomcat 9. Înregistrez anteturile care vin în acea aplicație și văd anteturile x-forward-* setate la `proxy.example.com`
Michael Hampton avatar
drapel cz
Ce antet? Din nou, fii specific.
drapel cn
x-forward-host și x-forward-for sunt ambele setate la proxy.example.com
Michael Hampton avatar
drapel cz
Aceasta nu corespunde configurației nginx pe care ați arătat-o. Ce mai este în această stivă? De data aceasta, spune-ne totul și nu omite detalii relevante.
drapel cn
@MichaelHampton da, am mai adăugat câteva antete în depanare.
drapel ar
Ai putea te rog să detaliezi stiva ta? Spui că ai un site web la `web.example.com` și folosești un nginx ca proxy invers pentru `service.example.com`, așa că este web-ul tău servit de serverul nginx și contextul `/site` este proxy la backend sau aveți un element anterior înainte de acel nginx? Dacă nu îl aveți, de ce serverul nginx este numit intern `proxy.example.com` în loc de `web.example.com`?

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.