it-swarm.com.de

Nginx Reverse Proxy-Umleitung

Ich verwende nginx als Reverse-Proxy und wenn ich mich in meiner Weboberfläche anmelde, werde ich zur Proxy-URL umgeleitet. Ich möchte es vermeiden und immer den "Servernamen" als URL behalten. Ist es möglich?

Das ist mein /etc/nginx/conf.d/my_app.conf:

server { 
    listen 443 ssl; 
    server_name my-app.net; 
    ssl_certificate /etc/pki/tls/certs/my-app.cer; 
    ssl_certificate_key /etc/pki/tls/private/my-app.key; 
    ssl_protocols TLSv1.1 TLSv1.2; 
    access_log /var/log/nginx/my-app.access.log main; 

    location / { 
        proxy_pass http://ip_of_the_app:7180/; 
        proxy_redirect off; 
    } 
} 

Ich verbinde mich über http://my-app.net, Gib Anmeldeinformationen ein, werde dann auf derselben Anmeldeseite zu http://ip_of_the_app:7180 Weitergeleitet und muss mich erneut anmelden. Kann diese doppelte Anmeldung vermieden werden?

14
tonio94

Setzen Sie proxy_redirect Nicht auf off, das tut nicht das, was Sie denken. proxy_redirect Führt etwas Ähnliches wie das Umschreiben von URLs aus, zum Beispiel:

location /sales/ { 
    proxy_pass http://ip_of_the_app:7180/; 
    proxy_redirect http://ip_of_the_app:7180/ http://$Host/sales/; 
}

Auf diese Weise können Sie den Pfad /sales/ An einer anderen Stelle hosten. Aber selbst dann erledigen die Standardparameter für proxy_redirect Genau das kostenlos für Sie. Standardmäßig wird der Speicherort in das umgeleitet, was in proxy_pass Vorhanden ist (und die Standardparameter werden verwendet, wenn Sie proxy_redirect Überhaupt nicht festlegen oder proxy_redirect default; Verwenden).

Sie müssen nicht proxy_redirect Setzen.


Was Sie vermissen, sind Header, die an die App gesendet werden müssen. Der wichtigste von ihnen ist Host. Dadurch wird das Proxy wie gewünscht durchgeführt und die korrekte URL im Browser beibehalten.

location / { 
    proxy_pass http://ip_of_the_app:7180/; 
    proxy_set_header Host $Host;
}

Beachten Sie, dass die App unter http://ip_of_the_app:7180/ Die Anfrage jetzt mit dem Header Host: my-app.net Empfängt.


Sie sollten auch ein paar weitere Header verwenden:

proxy_set_header Referer $http_referer;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;

Dies ermöglicht eine bessere Protokollierung in der App unter http://ip_of_the_app:7180/. X-Forwarded-For Geben Sie die IP des tatsächlichen Clients (im Gegensatz zu nginxs IP) und X-Forwarded-Proto An, um zu überprüfen, ob der Client über HTTP oder HTTPS mit dem nginx verbunden ist .

27
grochmal