fragen stichworte

Nginx - Beim Tunnel werden URLs ohne Portnummer umgeleitet

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

ausprobiert
proxy_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.

antworten

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.