Ich verwende nginx
als Reverse-Proxy und wenn ich mich in meiner Weboberfläche anmelde, werde ich zur Proxy-URL weitergeleitet. 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 http://my-app.net
, gebe Anmeldeinformationen ein, werde dann http://ip_of_the_app:7180
auf dieselbe Anmeldeseite weitergeleitet und muss mich erneut anmelden. Kann diese doppelte Anmeldung vermieden werden?
linux
nginx
reverse-proxy
tonio94
quelle
quelle
Antworten:
Nicht gesetzt
proxy_redirect
zuoff
, die nicht das tut , was Sie denken , es tut.proxy_redirect
führt etwas Ähnliches wie das Umschreiben von URLs aus, zum Beispiel:Auf diese Weise können Sie den
/sales/
Pfad an einer anderen Stelle hosten . Aber selbst dannproxy_redirect
erledigen die Standardparameter genau das kostenlos für Sie. Standardmäßig wird der Speicherort in das umgeleitet, in dem sich der Speicherort befindetproxy_pass
(und die Standardparameter werden verwendet, wenn Sie sie überhaupt nicht festlegenproxy_redirect
oder verwendenproxy_redirect default;
).Sie müssen nicht einstellen
proxy_redirect
.Was Sie vermissen, sind Header, die an die App gesendet werden müssen. Das wichtigste von ihnen ist
HOST
. Dadurch wird das Proxy wie gewünscht durchgeführt und die korrekte URL im Browser beibehalten.Beachten Sie, dass die App at
http://ip_of_the_app:7180/
jetzt die Anfrage mit demHost: my-app.net
Header empfängt .Sie sollten auch ein paar weitere Header verwenden:
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 an (im Gegensatz zunginx
s IP) undX-Forwarded-Proto
prüfen Sie, ob der Clientnginx
über HTTP oder HTTPS mit dem verbunden ist.quelle
Referer
einfach darin besteht$http_referer
, sie aus der Anforderung zu kopieren. Dies funktioniert nicht, wenn die Anforderung keinen Referer-Header enthält. Daher ist die Hardcodierung in einigen Fällen eine Lösung.