Mein Problem ist sehr ähnlich: nginx-Proxy-Weiterleitungen ignorieren Port
Ich verwende Nginx 1.0.14.
Ich möchte in der Lage sein, ssh-tunnel in meine Django-Website zu integrieren, damit ich remote arbeiten kann. Ich habe auf meinem PC ein einfaches Django-Projekt mit einer sehr einfachen Nginx-Konfiguration (Starter, Standard) getestet. Ich tunnle und die Umleitung kehrt mit der Portnummer als Teil der URL zurück. Ich bin mir sicher, dass dies kein Django-Problem ist. Es ist hauptsächlich meine Nginx-Konfiguration.
Hier ist der relevante Teil.
server {
listen 80;
server_name localhost 127.0.0.1;
server_name_in_redirect off;
# location other services go here
location ~/forum/(.*)$ {
#rewrite ^(.*):(.*)/forum(.*)$/$2 last;
#rewrite ^(.*)$ http://localhost:8000/$1;
#rewrite ^/forum(.*)$ $1 break;
# the forum service runs as local, listens to 8000 port...
proxy_pass http://localhost:8000;
proxy_redirect default;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Was passiert also, wenn ich einen SSH-Tunnel habe?
ssh -L 1111:192.168.1.165:80 username@server-address -N
dann öffne den Browser, http://localhost:1111
, und wenn ich mich anmelde oder etwas mache, das eine Umleitung erfordert, erhalte ich http://localhost/forum/Startseite anstelle von http://localhost: 1111/froum/Startseite
Diese Links sind falsch. Nginx wird sich (von der Serverseite) beschweren, dass sie nicht vorhanden sind.
Intern läuft das Serviceforum unter http://localhost:8000
Ich habe Sachen wie
ausprobiertproxy_set_header $host:$server_port; # or
proxy_set_header $proxy_host:$proxy_port; # or
proxy_set_header $host:$proxy_port; # or
rewrite ^(.*):(.*)/forum(.*)$/$2 last;
#rewrite ^/forum(.*)$ $1 break;
proxy_redirect http://localhost/http://$host:$proxy_port;
Der 2. Proxy-Set-Header zeigt einen kleinen Fortschritt. Nach dem Drücken von submit
erhalte ich eine leere Seite mit der ursprünglichen URL (http://localhost: 1111/post und dann sehe ich dieselbe URL erneut).
Haben Sie eine Idee, wie Sie mein Problem lösen können? Vielen Dank.
Also kam ich auf eine einfache Lösung ... als meine eigene Antwort ...
proxy_set_header Host $host;
$host
sollte durch $http_host
ersetzt werden, obwohl ich die Bedeutung von beiden nicht ganz sicher bin.
Sie müssen proxy_redirect aktivieren. Der Hostheader der Antwort wird neu geschrieben, um das Problem zu vermeiden, mit dem Sie konfrontiert sind. Wenn Sie den Standardwert festlegen, sollte dies der Trick sein.