Aller au contenu principal

32. Implement Reverse Proxies and Load Balancers


리버스 프록시란?​

리버스 프록시는 사용자와 백엔드 서버 사이의 중간 역할을 합니다. 일반적인 흐름:

  1. 사용자가 프록시에 요청 전송
  2. 프록시가 웹 서버로 전달
  3. 서버가 응답
  4. 프록시가 클라이언트에 전달

이 아키텍처의 이점:

  • 서버 업그레이드 시 DNS 전파 지연 없이 프록시 설정만 변경하여 트래픽 전환 가능
  • "웹 트래픽 필터링, 빠른 전달을 위한 페이지 캐싱, 추가 최적화 수행" 가능

로드 밸런싱 기본​

로드 밸런싱은 단일 서버가 과부하되지 않도록 여러 서버에 요청을 분산합니다. 로드 밸런서는 가장 바쁘지 않은 서버로 요청을 지능적으로 라우팅합니다.

Nginx로 리버스 프록시 설정​

설치 및 기본 설정​

Nginx를 설치하고 /etc/nginx/sites-available에 설정 파일 생성:

sudo apt install nginx
sudo vim /etc/nginx/sites-available/proxy.conf

기본 리버스 프록시 설정:

server {
listen 80;
location / {
proxy_pass http://1.1.1.1;
}
}

특정 URL 경로(/images)에 대한 설정:

server {
listen 80;
location /images {
proxy_pass http://1.1.1.1;
}
}

비표준 포트 사용:

server {
listen 80;
location /images {
proxy_pass http://1.1.1.1:8081;
}
}

요청 헤더 보존​

원본 요청 정보를 전달하기 위해 proxy_params 파일 포함:

server {
listen 80;
location /images {
proxy_pass http://1.1.1.1;
include proxy_params;
}
}

/etc/nginx/proxy_params 파일의 헤더 내용:

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

설정 활성화​

심볼릭 링크를 생성하여 설정 활성화:

sudo ln -s /etc/nginx/sites-available/proxy.conf /etc/nginx/sites-enabled/proxy.conf
sudo rm /etc/nginx/sites-enabled/default

테스트 및 적용:

sudo nginx -t
sudo systemctl reload nginx.service

Nginx를 로드 밸런서로 설정​

기본 로드 밸런서 설정​

리버스 프록시 설정을 제거하고 새 로드 밸런서 설정 파일 생성:

sudo rm /etc/nginx/sites-enabled/proxy.conf

/etc/nginx/sites-available/lb.conf 생성:

upstream mywebservers {
server 1.2.3.4;
server 5.6.7.8;
}

server {
listen 80;
location / {
proxy_pass http://mywebservers;
}
}

기본값은 라운드 로빈(Round-robin) 분산입니다. 더 지능적인 라우팅을 위해 least_conn 방식 사용:

upstream mywebservers {
least_conn;
server 1.2.3.4;
server 5.6.7.8;
}

server {
listen 80;
location / {
proxy_pass http://mywebservers;
}
}

고급 로드 밸런싱 옵션​

서버 성능 기반 가중치 할당:

upstream mywebservers {
least_conn;
server 1.2.3.4 weight=3;
server 5.6.7.8;
}

서버를 임시로 제거하려면 down 파라미터 사용:

upstream mywebservers {
least_conn;
server 1.2.3.4 weight=3 down;
server 5.6.7.8;
}

백업 서버 지정:

upstream mywebservers {
least_conn;
server 1.2.3.4;
server 5.6.7.8;
server 10.20.30.40 backup;
}

커스텀 포트 서버:

upstream mywebservers {
least_conn;
server 1.2.3.4:8081;
server 5.6.7.8;
server 10.20.30.40 backup;
}

server {
listen 80;
location / {
proxy_pass http://mywebservers;
}
}

로드 밸런서 활성화​

sudo ln -s /etc/nginx/sites-available/lb.conf /etc/nginx/sites-enabled/lb.conf
sudo nginx -t
sudo systemctl reload nginx.service