리버스 프록시 & 로드 밸런싱 설정

리버스 프록시 (Reverse Proxy)

리버스 프록시는 백엔드 개발자가 설정하고 기능은 다음과 같다.

  1. 캐싱

  2. 보안

  • 익명성과 비슷한 개념이다. (서버는 자신에게 보낸 주체가 누군지 모름)

  • 클라이언트의 IP와 포트번호가 리버스 프록시로 연결되어 있다.

  1. SSL 중앙화 관리

  • 클라이언트와의 https 통신은 리버스 프록시 서버랑만 하고, 리버스 프록시 서버와 서버는 http 통신을한다. 그렇기 때문에 SSL 인증서를 리버스 프록시에서만 관리 가능하다.

로드 밸런싱 (Load Balancing)

로브 밸런싱은 서버의 부하를 분산 해주는 장치, 기술(기능)이다.

  1. Scale up : 서버를 H/W 적으로 업그레이드를 하는 방법이다.

  • 비용적인 부담이 커진다.

  1. Scale out : 하나의 서버를 여러개의 서버로 두어 부하를 분산시키는 방법이다.

  • 클라이언트의 요청을 어떻게 분산시킬 것인가를 해결해야 한다.

클라이언트의 증가로 기존 서버의 트래픽이 증가했을 때 서버를 확장하는 방법은 두가지가 있다.

이 역할을 해주는 것이 로드 밸런싱이고, 로드 밸런서 서버를 이용해도 되지만 리버스 프록시 서버 자체로도 가능하다.

Nginx 설정파일

nginx 설정 파일 경로는 거의 /etc/nginx 에 있다.

여기서 확인해야 할 파일은 nginx.conf와 default.conf다.

Nginx.conf

http 섹션이 존재하고, Web Server 관련 설정을 하는 중요한 섹션이다.

include /etc/nginx/conf.d/*.conf 라는 내용이 있는데, 이는 * (모든 .conf 파일들을 include) conf.d 디렉토리에는 default.conf가 포함되어 있다.

즉, default.conf의 내용을 nginx.conf로 불러오는 것이다.

default.conf

./conf.d/default.conf 파일이 있다.

  • conf.d 디렉토리에 없으면 /etc/nginx/sites-available을 확인하자.

설정 중에서 상단의 server 블록은 하나 이상의 Web Server를 정의하는 블록이다.

  • sever_name : IP나 도메인을 작성하면 그 IP나 도메인에 Nginx를 호스트한다.

  • location: 특정 URL에 대한 정의이다. 정적 파일을 서빙하거나 프록시 패싱, Redirection을 설정할 수 있다.

리버스 프록시 구성

location에 proxy_pass를 입력한다. 이놈이 리버스 프록시 해주는 놈이다. 어디에 할 지 지정해준다.

proxy_pass의 backend는 Upstream Server이다.

  • upstream 섹션을 구성하고 name을 설정 해야한다.

  • 이 섹션에 로드 밸런싱을 할 서버를 정의해준다.

동작과정

location 섹션에 접속을 하게되면 proxy_pass라는 놈이 Upstream 섹션으로 요청을 던진다.

그럼 Upstream 섹션이 요청들을 정의한 서버로 넘겨준다.

로드 밸런싱 알고리즘

라운드 로빈 (Round Robin)

가장 기본 설정이다. 도메인이나 IP만 입력하면 라운드 로빈 알고리즘으로 로드 밸런싱이 설정된다.

Least Connections (최소 연결)

요청에 따라서 연결된 횟수가 가장 적은 서버로 연결시켜 전송한다.

Least Time

커넥션이 가장 적고(&) 평균 응답시간이 가장 적은 쪽을 선택해서 분산한다. (Nginx +에서만 가능하다.)

IP Hash

Client IP 주소를 해싱해서 특정 서버로만 요청을 보내도록 할 수 있다. 즉, 한번 요청 받은 서버가 있으면 해당 서버에만 요청을 하도록 한다. (Stick Session 방식처럼 동작 가능(?))

Generic Hash

사용자가 정의한 값으로도 분산 시킬 수 있다.

Random

랜덤으로 분산한다.

Server 지시어 파라미터

weight

업스트림 서버의 비중이다. 특정 서버에 가중치를 설정해서 가중치 배수만큼 트래픽을 더 받을 수 있다.

max_fails

n으로 지정한 횟수만큼 실패가 일어나면 서버가 죽은것으로 판단한다. 그럼 다른 서버로 트래픽을 보낸다.

fail_timeout

서버와의 커넥션이 n만큼 기다려도 연결되지 않는다면 죽은것으로 판단하고 다른 서버로 트래픽을 보낸다.

max_fails가 지정된 상태에서 n만큼 서버가 응답하지 않으면 죽은것으로 판단한다.

down

해당 서버를 사용하지 않게 지정한다.

backup

모든 서버가 동작하지 않을 때 backup으로 표시된 서버가 사용되고 그 전까지 사용하지 않는다.

Last updated