Was ich tun möchte, ist: Wenn jemand http://localhost/route/abc
den 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 9000
korrekt an den Port weitergeleitet, der empfangene Pfad ist jedoch http://localhost:9000/route/abc
nicht 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/