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


Was ich machen möchte ist,

Wenn jemand zu Besuch kommt http://localhost/route/abc die Antwort des Servers genau so wie http://localhost:9000/abc

Jetzt konfiguriere ich mein Nginx wie folgt:

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

Die HTTP-Anfrage wird an den Port gesendet 9000 richtig, aber der Weg ist es http://localhost:9000/route/abc nicht http://localhost:9000/abc.

Irgendein Vorschlag ?


45
2017-09-05 10:12


Ursprung




Antworten:


Ich hasse die Subtilität hier, aber versuche ein / am Ende von 9000 wie unten hinzuzufügen. Es wird nun nicht mehr "route" an die weitergeleitete Anfrage angehängt.

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

41
2018-05-19 19:28



Dies sollte die akzeptierte Antwort sein. Einfach hinzufügen / ist gut dokumentiert als die Möglichkeit, das Präfix, das an dem Ort aufgelistet ist, zu entfernen. - Alkaline


Ich glaube, dass Sie den zusätzlichen Teil der URL durch Umschreiben entfernen können. In deinem Fall denke ich, du könntest 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, verweisen sie möglicherweise trotzdem auf / abc / foo, und wenn Sie dies tun, müssen sie stattdessen auf / route / abc / foo zeigen, damit die rohe Anfrage korrekt ankommt. Sie können besser die Nginx-Konfiguration unverändert lassen und stattdessen Ihre App so konfigurieren, dass sie in einem Unterverzeichnis lebt, wenn Sie können.

Ich weiß, dass dies eine alte Frage ist, aber es war der beste Google-Hit für mich, als ich versuchte, das gleiche Problem zu lösen!


33
2018-02-26 12:53



Vielen Dank ! In diesem Link können wir die Liste der Variablen überprüfen: wiki.ninx.org/HttpProxyModule#Variables - Edgard Leal


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

11
2017-09-05 10:31



Diese Lösung funktionierte am besten für mich, da der Hostname beibehalten wurde. - 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/;
    }
  }

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 /


5
2017-10-09 08:58