저는 이를 nginx
역방향 프록시로 사용하고 있는데 웹 인터페이스에 로그인하면 프록시 URL로 리디렉션됩니다. 나는 이것을 피하고 항상 "server_name"을 URL로 유지하고 싶습니다. 가능합니까?
이 내 꺼야 /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;
}
}
연결하고 http://my-app.net
로그인 정보를 입력하면 http://ip_of_the_app:7180
동일한 로그인 페이지로 리디렉션되어 다시 로그인해야 합니다. 이중 로그인을 피할 수 있나요?
답변1
proxy_redirect
그렇게 설정하지 마십시오 off
. 그것은 당신이 생각하는 일을 하고 있지 않습니다. proxy_redirect
URL 재작성과 유사한 작업을 수행합니다. 예를 들면 다음과 같습니다.
location /sales/ {
proxy_pass http://ip_of_the_app:7180/;
proxy_redirect http://ip_of_the_app:7180/ http://$host/sales/;
}
이를 통해 경로를 /sales/
다른 곳에서 호스팅할 수 있습니다. 하지만 그렇더라도 기본 매개변수를 사용하면 proxy_redirect
무료로 이를 수행할 수 있습니다. 기본값은 존재하는 모든 위치로 위치를 리디렉션하는 것입니다(전혀 설정하지 않거나 사용하는 경우 proxy_pass
기본 매개변수가 사용됩니다).proxy_redirect
proxy_redirect default;
설정할 필요가 없습니다 proxy_redirect
.
누락된 것은 애플리케이션에 전송해야 하는 헤더입니다. 그 중 가장 중요한 것은 HOST
. 이렇게 하면 필요에 따라 프록시가 수행되고 브라우저에 올바른 URL이 유지됩니다.
location / {
proxy_pass http://ip_of_the_app:7180/;
proxy_set_header HOST $host;
}
이제 애플리케이션은 http://ip_of_the_app:7180/
헤더가 포함된 요청을 받게 됩니다 Host: my-app.net
.
또한 더 많은 헤더 사용을 고려해야 합니다.
proxy_set_header Referer $http_referer;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
이렇게 하면 애플리케이션 내에서 더 나은 로그인이 가능해집니다 http://ip_of_the_app:7180/
. X-Forwarded-For
실제 클라이언트의 IP( nginx
IP가 아님)를 제공하고 X-Forwarded-Proto
클라이언트가 nginx
HTTP 또는 HTTPS를 통해 연결되어 있는지 확인합니다.