Nginx: come inoltro una richiesta http a un'altra porta?


65

Quello che voglio fare è

Quando qualcuno visita http://localhost/route/abcla risposta del server esattamente comehttp://localhost:9000/abc

Ora configuro il mio Nginx in questo modo:

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

La richiesta http viene spedita 9000correttamente, ma il percorso ricevuto http://localhost:9000/route/abcnon lo è http://localhost:9000/abc.

Qualche suggerimento ?

Risposte:


65

Odio la sottigliezza qui, ma prova ad aggiungere un / alla fine di 9000 come sotto. Ora non aggiungerà più "route" alla richiesta inoltrata.

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

4
Questa dovrebbe essere la risposta accettata. La semplice aggiunta /è ben documentata come il modo per rimuovere il prefisso elencato nella posizione.
Bernard,

40

Ritengo che tu possa utilizzare la riscrittura per rimuovere la parte aggiuntiva dell'URL. Nel tuo caso penso che potresti usare:

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;
}

Tuttavia, se la tua app contiene collegamenti interni, potrebbe comunque puntare a / abc / foo, e in questo caso dovrà invece puntare a / route / abc / foo in modo che la richiesta non elaborata arrivi correttamente. Potrebbe essere meglio lasciare la configurazione di nginx così com'è e invece configurare l'app per essere consapevole che vive in una sottodirectory, se puoi.

So che questa è una vecchia domanda, ma è stata la migliore hit di Google per me quando stavo cercando di risolvere lo stesso problema!


Grazie ! in questo link possiamo rivedere l'elenco delle variabili: wiki.nginx.org/HttpProxyModule#Variables
Edgard Leal

17

Prova quanto segue

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;
}

Questa soluzione ha funzionato meglio per me, poiché conserva il nome host.
Shafique Jamal,

Pulito e semplice.
Ravshan Samandarov,

7

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/;
    }
  }

Questo codice è in ascolto su 8080 e reindirizza alla porta 8787 sul calcolo 1-36. Puoi selezionare un altro percorso nella posizione /

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.