[Nginx] 로드 밸런싱(Load Balancing) 사용

haremeat·2022년 1월 26일
0

Etc

목록 보기
3/4
post-thumbnail

nginx 서버는 로드 밸런싱(Load Balancing) 기능을 제공한다.
apache 서버는 특정 모듈을 통해 (mod proxy) 로드 밸런싱을 구현하지만 nginx의 경우 설정 파일에서 기능의 구현만 정의하면 바로 사용할 수 있다.

nginx.conf 예시

vi /etc/nginx/nginx.conf

위 명령어로 nginx.conf 파일에 접근해 수정한다.

http {
    upstream loadtest {
    	server www1.aaa.com:80 weight=2;
        server www2.aaa.com:80;
        server www3.aaa.com:80 backup;
    }
    server {
    	listen 80 default_server;
        listen [::]:80 default_server;
        server_name www.aaa.com
        
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        
        location / {
        	proxy_pass http://loadtest;
        }
    }
}

설명

Reverse Proxy란 클라이언트의 요청을 받아서 내부 서버로 전달해주는 Proxy를 말한다.
위의 nginx.conf 파일에서도 로드 밸런싱을 위해 리버스 프록시 설정을 했는데 각각 설명하자면

proxy_redirect off;

http, server, location을 이용한 리다이렉트 기능을 사용하지 않도록 설정하는 것이다.

proxy_set_header X-Real-IP $remote_addr;

백엔드에 위치한 웹 서버에 전달할 HTTP 추가 헤더 정보에 원격지 클라이언트의 IP 주소를 포함시키는 것이다.

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

백엔드에 위치한 웹 서버에 전달할 HTTP 추가 헤더 정보에 원격지 클라이언트를 위해 프록시로 사용된 서버의 IP 주소를 포함시키는 것이다.

proxy_set_header Host $http_host;

백엔드에 위치한 웹 서버에 전달할 HTTP 요청 헤더 정보에서 Host는 변수 $http_host로 대체한다는 뜻이다. 이 정보는 전면부에 위치한 Nginx 서버를 가리킨다.

upstream loadtest

http 섹션에 로드 밸런싱을 위해 서버 그룹을 정의하는 지시어 upstream에 이름을 생성한다.

server www1.aaa.com:80 weight=2;
server www2.aaa.com:80;
server www3.aaa.com:80 backup;

로드 밸런싱을 위해 사용될 서버 이름과 포트 번호를 지정한다. 여기서 weight=2는 밑의 www2에 비해서 두 배의 부하를 받으라는 뜻이다.
backup의 의미는 위의 프록시로 사용되는 두 서버 중 한 서버가 다운되면 이 서버가 그 대신에 프록시 서버로 사용된다는 의미다. 설정은 했지만 나중을 대비하여 사용하지 않는 경우에는 backup 대신에 down을 사용할 수 있다.

proxy_pass http://loadtest;

nginx 서버의 루트(/) 디렉토리로 요청이 들어오면 위에서 정의한 upstream loadtest로 보내라는 의미이다.

이렇게 설정을 마치면
nginx -t 명령어를 사용해 정상적으로 작동하는지 확인 후 서버를 재시작한다.

service nginx restart

Ref

리눅스 서버 관리 바이블

profile
버그와 함께하는 삶

0개의 댓글