Używam nginx
jako odwrotnego proxy i kiedy loguję się w interfejsie internetowym, jestem przekierowywany na adres URL proxy. Chciałbym tego uniknąć i zawsze utrzymywać „server_name” jako adres URL. Czy to możliwe?
To jest moje /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;
}
}
Łączę się http://my-app.net
, wprowadzam dane logowania, a następnie jestem przekierowywany http://ip_of_the_app:7180
na tę samą stronę logowania i muszę zalogować się ponownie. Czy można uniknąć podwójnego logowania?
linux
nginx
reverse-proxy
tonio94
źródło
źródło
Odpowiedzi:
Nie nastawiaj się
proxy_redirect
na tooff
, że nie robi to, co myślisz.proxy_redirect
wykonuje coś podobnego do przepisywania adresów URL, na przykład:Umożliwia to hostowanie
/sales/
ścieżki w innym miejscu. Ale nawet wtedy domyślne parametry dlaproxy_redirect
dokładnie to robią za darmo. Domyślnie przekierowuje lokalizację na wszystko, co jest w niej obecneproxy_pass
(a domyślne parametry są używane, jeśli w ogóle nie ustawionoproxy_redirect
lub nie użytoproxy_redirect default;
).Nie musisz ustawiać
proxy_redirect
.Brakuje nagłówków, które należy wysłać do aplikacji. Najważniejszym z nich jest
HOST
. Spowoduje to wykonanie proxy zgodnie z potrzebami i zachowanie poprawnego adresu URL w przeglądarce.Pamiętaj, że aplikacja at
http://ip_of_the_app:7180/
otrzyma teraz żądanie zHost: my-app.net
nagłówkiem.Należy również rozważyć użycie kilku dodatkowych nagłówków:
Pozwoli to na lepsze logowanie w aplikacji pod adresem
http://ip_of_the_app:7180/
.X-Forwarded-For
podanie adresu IP rzeczywistego klienta (w przeciwieństwie donginx
adresu IP s) iX-Forwarded-Proto
sprawdzenie, czy klient nawiązał połączenie zanginx
pośrednictwem protokołu HTTP lub HTTPS.źródło
Referer
to po prostu$http_referer
kopiowanie go z żądania. To nie działa, jeśli żądanie nie ma nagłówka odwołania, dlatego też kodowanie na stałe jest rozwiązaniem w niektórych przypadkach.