documentația nginx explică comportamentul:
Dacă directiva proxy_pass este specificată cu un URI, atunci când o solicitare este transmisă serverului, partea unui URI de solicitare normalizat care se potrivește cu locația este înlocuită cu un URI specificat în directivă:
În cazul dvs., înseamnă că URI-ul cererii este înlocuit cu /api/v1/
URI specificat în dvs proxy_pass
directivă.
Dacă doriți ca URI să fie transmis așa cum este, atunci trebuie să faceți:
locație /api/v1/ {
proxy_pass http://frontend-api.preprod.example.com;
}
În acest caz, nginx utilizează URI-ul din cererea originală cu proxy_pass
destinație, așa cum este descrisă de:
Dacă proxy_pass este specificat fără un URI, URI-ul cererii este transmis serverului în aceeași formă cu cea trimisă de un client atunci când cererea inițială este procesată, sau URI-ul complet normalizat al cererii este transmis la procesarea URI-ului modificat:
Dacă doriți să înlocuiți o parte a URI-ului cererii cu o altă parte, trebuie să utilizați capturarea expresiilor regulate:
locație ~ ^/sursă/cale/(.*) {
proxy_pass http://example.com/destination/path/$1;
}
Editați | ×:
Pentru ca numele de domeniu al cererii inițiale să fie transmis în amonte, trebuie să setați Gazdă
Antet HTTP pentru cererea în amonte:
proxy_set_header Gazdă $gazdă;
Este adesea util să transmiteți și adresa IP a vizitatorului prin antet:
proxy_set_header X-Forwarded-For $remote_addr;