Vraag Nginx: Hoe stuur ik een http-verzoek door naar een andere poort?


Wat ik wil doen is,

Wanneer iemand bezoekt http://localhost/route/abc de serverreactie precies hetzelfde als http://localhost:9000/abc

Nu configureer ik mijn Nginx als volgt:

location /route {
    proxy_pass  http://127.0.0.1:9000;
}

De http-aanvraag is de verzonden poort 9000 correct, maar het pad dat het heeft ontvangen is http://localhost:9000/route/abc niet http://localhost:9000/abc.

Enige suggestie ?


45
2017-09-05 10:12


oorsprong




antwoorden:


Ik haat de subtiliteit hier, maar probeer een / aan het einde van 9000 toe te voegen, zoals hieronder. Het voegt nu niet langer 'route' toe aan het doorgestuurde verzoek.

location /route {
    proxy_pass  http://127.0.0.1:9000/;
}

41
2018-05-19 19:28



Dit zou het geaccepteerde antwoord moeten zijn. Gewoon toevoegen / is goed gedocumenteerd als de manier om het voorvoegsel van de locatie te verwijderen. - Alkaline


Ik geloof dat je herschrijven kunt gebruiken om het extra deel van de URL te verwijderen. In jouw geval denk ik dat je zou kunnen gebruiken:

location /route/ {
    rewrite ^/route/?(.*)$ /$1 break;    
    proxy_pass  http://127.0.0.1:9000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Als uw app echter interne links bevat, wijzen ze mogelijk nog steeds naar / abc / foo en als u dit doet, moeten ze in plaats daarvan verwijzen naar / route / abc / foo zodat het onbewerkte verzoek correct wordt weergegeven. Het is misschien beter om de nginx-configuratie te laten zoals deze is en in plaats daarvan je app te configureren om je ervan bewust te zijn dat deze in een submap leeft, als je kunt.

Ik weet dat dit een oude vraag is, maar het was de beste Google-hit voor mij toen ik probeerde hetzelfde probleem op te lossen!


33
2018-02-26 12:53



Bedankt ! in deze link kunnen we de lijst met variabelen bekijken: wiki.nginx.org/HttpProxyModule#Variables - Edgard Leal


Probeer het volgende

location /route/ {
        proxy_pass  http://127.0.0.1:9000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

11
2017-09-05 10:31



Deze oplossing werkte het beste voor mij, omdat het de hostnaam bewaart. - Shafique Jamal


vim nginx.conf

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

  server {
    listen 8080;

    location / {
      proxy_pass http://compute-1-36:8787;
      proxy_redirect http://compute-1-36:8787/ $scheme://$host:8080/;
    }
  }

Deze code luistert op 8080 en stuurt door naar poort 8787 op compute-1-36. U kunt een ander pad op locatie selecteren /


5
2017-10-09 08:58