http://iwanhae.ga
제가 얻은 무료 도메인 입니다.

그리고 여기서 재미난 점은

http://blog.iwanhae.ga
http://git.iwanhae.ga
http://data.iwanhae.ga

이 세가지에 있는데

셋다 모두 같은 ip주소를 가르킨다는점 입니다. 1 이게 무슨의미냐하면

세 주소 모두 같은 서버(오드로이드)에서 나온것이라는 거죠.

하지만 보시면 알겠지만 셋다 서로 다른 사이트를 보여줍니다.

어떻게 이런것이 가능한걸까요?

비밀은 리버스 프록시에 있습니다.

일단 다음이 현재 제 서버의 구조입니다.

일단 인터넷과 직접적으로 연결된 공유기는 DMZ설정을 통해 모든 포트로의 요청에대해 오드로이드로 넘겨줍니다.

그리고 80번 포트로의 요청의 경우 nginx가 그 요청을 받게되죠.

그리고 80번 포트로의 요청은 일반적으로 http 프로토콜 규격에 맞게 요청이 들어옵니다.

대충 다음과 같이 말이죠

그럼 만약에 누군가가 "blog.iwanhae.ga"로 요청을 넣었다 가정해 봅시다.

그럼 host 부분은 "blog.iwanhae.ga"가 될터이고 그걸 nginx가 읽습니다.

그럼 nginx는 제가 미리 설정해둔 상황에 따라 지금 받은 요청을 5000번 포트로 똑같이 보내고, 5000번포트에서 작동중인 node.js는 그에 맞는 응답을 nginx로 보냅니다.

그리고 nginx는 그 응답을 받아 다시 누군가에게 보내주는거죠.

그리고 여기서 재미난점은 공유기 뒤에 위치해서 서버로 제역할을 못하는놈에게도 같은 역할을 할수있다는 겁니다.

분명 공유기는 모든 통신을 오드로이드로 연결했지만

리버스 프록시는 nginx가 일종의 프록시 서버로서 다시 응답을 주는 구조기 때문에 공유기 안에서도, 로컬네트워크의 다른 컴퓨터랑 연결이 가능하다는 겁니다.

그리고 그 결과가 "data.iwanhae.ga" 인거죠.

재미있죠?

참고로 "리버스 프록시"에서 "리버스"란 "자신의 뒤쪽"을 의미합니다.

모든 요청은 자신이 받고, 자신의 뒤쪽에 있는 서버랑 연결해준다는 의미죠.

이때 외부에서 볼때는 이 "프록시 서버" 하나만 존재하기 때문에 외부에선 이게 하나의 서버인지, 여러개의 서버인지, 정보가 어디로 전송되는지 같은 서버에대한 내용을 알수 없습니다.

이러한 특징덕분에 주로 보안이나, 부하분산을 위해 많이 쓰이는 개념입니다.