Nginx 리버스 프록시 리디렉션


14

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동일한 로그인 페이지 로 리디렉션되며 다시 로그인해야합니다. 이 이중 로그인을 피할 수 있습니까?


tonio94, 문제가 해결 되었습니까? 그렇다면 대답을 수락하십시오. 아니라면 무엇이 빠졌는지 명확히하십시오.
cnst

2
방금 어제 테스트했는데 작동하며 proxy_redirect를 제거해야합니다. 도와 주셔서 감사합니다.
tonio94

답변:


27

설정하지 마십시오 proxy_redirectoff당신이하고있는 생각하고 있지된다. proxy_redirectURL 재 작성과 유사한 작업을 수행합니다 (예 :

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를 제공하고 ( nginxs IP 와 반대 ) X-Forwarded-Proto클라이언트가 nginxHTTP 또는 HTTPS를 통해 연결되었는지 확인합니다 .


당신의 도움을 주셔서 감사합니다. proxy_redirect는 필요하지 않지만 proxy_set_header Referer ip_of_the_app : 7180 을 설정해야 제대로 작동합니다.
tonio94

@ tonio94-고마워, 나는 대답을 업데이트했다. 의 일반적인 사용법 Referer은 단순히 $http_referer요청에서 복사하는 것입니다. 요청에 Referer 헤더가없는 경우에는 작동하지 않으므로 하드 코딩은 경우에 따라 해결 방법입니다.
grochmal

@JonathanKomar-감사합니다. 수정되었습니다. 당신의 의견을 알아 차리는데 시간이 걸렸습니다.
grochmal

@grochmal 감사합니다, 당신은 기본적으로 다음과 같은 정보로 내 생명을 구했습니다 : proxy_set_header HOST $ host;
Obay Abd-Algader
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.