개발
프록시 서버 환경에서 HTTPS 요청시 잘못된 사이트가 나오는 문제 해결
워낙 특수한 상황인 경우다보니 검색해도 잘 나오지 않아 삽질하다가 해결한 기록을 남겨보고자한다.
프록시 서버에서 HTTPS 요청시
내가 일하는 회사에서 나는 서버관리자로 업무를 보고있다.
우리 회사는 웹 서비스를 제공하는 회사인데, 관리하는 사이트가 많다보니 이걸 전부 개별 서버로 둘 수 없어 하나의 서버에 두고 이를 관리하고있다.
그런 환경을 만들기 위해서는 프록시 서버를 두고 우리 서버로 오는 모든 요청을 프록시 서버가 분배하는 방식으로 구현해 사용하고 있었다.

대충 서버단에서는 위 그림과 같은 요청이 빈번하게 일어나고 있었다.
대부분의 경우에는 1, 2번의 경우처럼 클라이언트가 요청한 도메인의 서버 블록이 있으면 프록시 서버가 해당 내용을 잘 찾아 전달하는 문제없는 형태를 띄고있다.
하지만 3번의 경우처럼 https(SSL)을 사용하지 않는 서버 블록에 대한 요청을 https로 요청해버리니까 프록시 서버는 매칭되는 결과가 없어 이상한 결과를 반환하는 문제가 발생했다.
상식적으로 위의 상황처럼 https사이트가 없으면 http사이트가 뜨면 될거같은데, 실제로는 https사이트 중 가장 첫번째 서버블록의 사이트로 요청이 전달되는 문제가 일어난 것이다.
관련내용을 알아보니, Nginx의 경우에 https로 매칭되는 서버 블록 이름이 없으면 가장 첫번째 https 서버 블록을 반환한다고 한다.
이를 default 설정이라고 하는데, 내가 명시적으로 특정 서버블록에 default를 설정하지 않으면 절차적으로 위에서 가장 가까운 http/https 스키마에 해당하는 블록을 반환한다고 한다.
잘못된 요청에 대한 대응
이런 상황에서 최선의 방법은 서버 블록단에서 잘못된 https 요청을 http로 바꿔주는 작업을 하면 되겠지만, 우리 서버의 경우에는 SSL을 사용하지않으면 별도의 https 블록을 생성하지는 않고, 또 나중에 추가로 SSL을 작업하는 경우도있어 301 리다이렉트 처리를 해두기가 좀 힘든 상황이었다.
여기서 생각한게 '가장 첫번째 https 스키마 블록이 보여진다면, 임의의 첫번째 서버블록을 두면 되지 않을까?'라는 해결방안이었다.

기존에 문제가 되었던게 잘못된 https 요청으로 의도치 않은
https://b.com
이 요청되었다는거니까, 그럼 이런 Nginx의 성질을 이용해 내가 의도한 서버블록을 보여주면 되는것이 아닌가.그래서 바로 위의 그림처럼
https://temp.com
이라는 서버블록을 만들고 해당 블록에 SSL을 설치한 후 해당 페이지에서 관련된 오류를 보여주는 파킹 페이지를 구현했다.이렇게 하면 사용자에게 너가 잘못된 URL(https 주소)로 들어와서 이 오류 페이지가 보여졌고, 내가 올바른 URL(http주소)을 다시 제공해줄테니 이 주소로 다시 브라우저 주소창에 입력해 들어와달라는 메시지를 보여주는것으로 그나마 유저 친화적인 페이지를 보여주는것이 가능했다.
왜 위와같이 사용자가 직접 주소를 다시 칠 필요가 있냐면 그건 요즘 브라우저들이 HSTS라는 정책으로 인해 한번 https 주소로 접근한 이력이있는 도메인은 하이퍼링크, 폼 액션, 스크립트 리다이렉트의 방법으로 http 주소로 보내도 브라우저단에서 이를 https로 자동 리다이렉트 시키기 때문이다.
이를 무력화 하는 방법이 사용자가 직접 http주소를 요청하는 방법밖에 없기 때문이다.
뭐 약간 스마트하지않은 처리방법일진 몰라도 이게 현재로썬 그나마 일반 사용자도 납득할 수 있는 유일한 방법이 아닐까 싶다.
끝!
#Nginx #문제해결
0
개의 댓글
개발 카테고리의 다른 글

03/20
라라벨에서 RSS / ATOM 피드 생성기 구현하기
진짜 오랜만에 개발글 하나 써봅니다. 오늘 소개할 내용은 대부분의 블로그에서 RSS 피드를 제공하는데, 그 RSS 피드를 직접 만...

02/27
JSON 뷰어 구현 노트
요즘 작업에 필요한 유틸리티 사이트들의 기능을 직접 내 블로그에 올려두는 작업을 하고있다.서버단 자원사용하는것도아니고 자...

02/27
BASE64 암호 해독하는법 (BASE64 해독기)
우리가 일반적으로 BASE64 암호화 코드를 직접적으로 해독하는경우는 거의 없긴한데, 온라인상에서 링크의 직접노출, 이미 암호...