ex06 : Lobby 서버팅(로드밸런싱)
폴더구조 세팅! 아무것도 없으면 이름 이상해지니까 .keep 만들어 놓자.
파일도 세팅
아래 깃 주소 들어가서 ex04에 있는 프로젝트 내부 파일을 현재 내프로젝트 폴더구조에 저장하면 된다.
nginx 설정 정리 꼭 공부하기
개념 정리
클라이언트가 요청을 하면 로비서버가 받아서 로비서버가 S1, S2에 요청을 하게 된다.
이 때 일어나는 것이 PROXY패스
이 설정은 XSS 공격을 막기 위해서 s1에서는 모든 자바스크립트의 요청을 차단한다.
그래서 로비서버 같은 것이 필요하다.
S1은 로비서버의 모든 요청을 허용한다.
하지만 로비서버로 요청을 받게 되면, 로비서버의 정보가 헤더에 담기기 때문에
S1에서는 로비서버의 정보가 필요한게 아니라 클라이언트의 헤더가 필요한 상황이다.
A라는 클라이언트가 B에 요청할 때, 직접적으로 요청하는 것이 아니라,
NginX같은 프록시 서버로 통해서 B로 요청한다.
이때 C는 A에게 리다이렉션을 하라고 응답하지 않고, A의 요청을 프록시 패스로
그대로 B에게 A의 요청을 전달한다.
프록시 패스를 사용하면 같은 도메인에 묶어서 요청을 하게 만들 수 있기 때문에,
CORS 설정을 안하도록 하게 할 수 도 있다.
s1에서는 로비서버의 헤더가 필요한 것이 아니라 클라이언트의 헤더가 필요하다.
S1에서는 20번 주소를 읽어야 되는데, 이렇게 remote Addr이 치환이 되면,
치환이 되었다는 기록을 X-Real-IP를 남기게 된다.
그러므로 이게 보이면 아, 이건 다른 곳에서 오는 거구나 라고 생각하면 된다.
그리고 치환이 되어서 요청이 온것들은 모두 X가 붙는다.
하지만 f12눌려서 개발자 도구로 확인할 수 없는 까닭은 브라우저가 보안상 모든 정보를 노출 시키지 않기 때문이다.
lb 전체코드
nginx.conf
Dockerfile
server1 전체코드
index.html
Dockerfile
server2 전체코드
index.html
Dockerfile
서버 만들기
빌드하기
일단 server1 / serve2 / lb 순대로 빌드를 하자.
Java
복사
docker build -t server1 ./server1
docker build -t server1 ./server2
docker build -t lb ./lb
Java
복사
빌드 하는데, ./ 키워드를 사용하면 현재 위치의 server1 폴더를 찾아서 Dockerfile을 실행한다.
실행하기
이 순서대로 백그라운드로 실행하면 되는데,
포트 번호를 이렇게 한 이유는 nginx.conf를 잘 확인해야된다.
위 그림에서 보듯이,
로비서버에서 요청을 받아서 포트포워딩으로 전달 하는 그림인건데
/server1으로 url 요청이 들어오면 172.17.0.1:8001로 할당을 한다.
그래서 docker run으로 포트 포워딩으로 8001:80이런 설정을 해준다. (아래에 예시)
이렇게 서버 세개를 띄운다.
localhost/server2 형식으로 localhost: 8002번을 때리기를 할 수 있다.
결국 이런 그림으로 server2로 요청이 가게 된다.
컨테이기
inspect로 컨테이너 정보를 확인 할 수 있다.