역방향 프록시 사용간 모바일 페이지 로그인이 안되는 문제 수정 방법
저는 ESXi 서버 위에 시놀로지 가상 머신과, Ubuntu 머신(Nginx 서버)을 설치하고,
HTTPS 외부 포트인 443번에 Ubuntu 머신의 Nginx를 노출하여 사용중인 유저인데요
nginx conf의 proxy_pass를 이용하여 시놀로지를 reverse proxy 하면
PC 환경에서는 문제가 없는데, 모바일 환경에서 로그인하면
"로그인이 잘못되었습니다. 다시 로그인하십시오" 라는 팝업과 함께 로그아웃이 되는 문제가 있었습니다.
(내부망 주소로 접속시에는 PC, 모바일 접속 모두 잘 됨, reverse proxy 도메인에서 모바일로 접속하면 발생)
그래서 개발자 도구에서 소스를 까보면서 요청을 분석해보니
시놀로지에서 로그인을 시도하면,
ID, PW를 업로드하는 로그인 요청을 하다가, 최종적으로
/webapi/entry.cgi entrypoint에 요청을 하여 인증 토큰을 쿠키 형태로 발급받게 되는데
내부망 접속에서는 이 부분에서 정상적으로 인증 토큰이 발급되는데, reverse proxy된 접속에서는
인증 토큰 대신 실패 메시지를 보내서, 다시 로그인하라는 팝업이 뜬 것이었습니다.
해당 요청과 해당 요청 이전에서 주고받던 매개변수들은 전부 동일하길래
Referer 또는 Origin 헤더를 시놀로지 모바일 백엔드에서 검수하는 로직이 있는 것 같아
nginx conf에 Referer를 내부망 주소로 강제 설정해주니 접속이 잘 되었습니다.
*. PC는 reverse proxy 상태에서도 로그인이 잘 되면서 왜 모바일만 이런건지는 모르겠습니다 ^^;
[제어판 - 외부 액세스 - 고급]
5000 / 443 / cloud.my-domain.com
[제어판 - 로그인 포털 - DSM]
5000 / 5001 / cloud.my-domain.com
[nginx (간략히 기술)]
server_name cloud.my-domain.com;
# location 블록 내부에서
proxy_set_header Referer https://내부망-IP:5001/;
proxy_pass https://내부망-IP:5001;
저와 같은 문제 겪으신 분이 있는지 모르겠으나, 도움 될 수도 있을 것 같아 글 남겨봅니다.
Nginx 설정에서 Referer 헤더와 직접적으로 관련된 지시문이 없을 경우, Referer 헤더는 주로 웹 브라우저에 의해 자동으로 설정 되어서 그럴거에요 :)
시놀로지의 백엔드 구현 또는 브라우저의 헤더 처리 방식에 따른 것일 수 있겠네요. (Origin, Referer)
각 환경에서 브라우저가 헤더를 다르게 처리하거나, 시놀로지가 모바일 요청에 대해 더 엄격한 보안 정책을 적용할수도 있구요 :)
저는 웹소켓인가 하고 들어왔네요 ^^
좋은 정보입니다.
cmt alert