Nginx: Wie leite ich eine HTTP-Anfrage an einen anderen Port weiter?

Nginx: Wie leite ich eine HTTP-Anfrage an einen anderen Port weiter?

Was ich tun möchte, ist: Wenn jemand http://localhost/route/abcden Server besucht, antwortet er genau so wiehttp://localhost:9000/abc

Jetzt konfiguriere ich meinen Nginx-Server wie folgt:

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

Die HTTP-Anforderung wird 9000korrekt an den Port weitergeleitet, der empfangene Pfad ist jedoch http://localhost:9000/route/abcnicht korrekt http://localhost:9000/abc.

Irgendwelche Vorschläge?

Antwort1

Ich hasse diese Subtilität hier, aber versuchen Sie, am Ende von 9000 ein / hinzuzufügen, wie unten. Dadurch wird jetzt nicht mehr „Route“ an die weitergeleitete Anfrage angehängt.

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

Antwort2

Ich glaube, Sie können den zusätzlichen Teil der URL mit „rewrite“ entfernen. In Ihrem Fall könnten Sie Folgendes verwenden:

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

Wenn Ihre App jedoch interne Links enthält, können diese immer noch auf /abc/foo verweisen. In diesem Fall müssen sie stattdessen auf /route/abc/foo verweisen, damit die Rohanforderung korrekt eingeht. Es ist möglicherweise besser, die Nginx-Konfiguration so zu belassen, wie sie ist, und Ihre App stattdessen so zu konfigurieren, dass sie erkennt, dass sie sich in einem Unterverzeichnis befindet, wenn möglich.

Ich weiß, das ist eine alte Frage, aber für mich war sie der erste Treffer bei Google, als ich versuchte, dasselbe Problem zu lösen!

Antwort3

Versuche Folgendes

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

Antwort4

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

Dieser Code hört auf 8080 und leitet auf Port 8787 auf Compute-1-36 um. Sie können einen anderen Pfad im Standort auswählen/

verwandte Informationen