32. Implement Reverse Proxies and Load Balancers
리버스 프록시란?
리버스 프록시는 사용자와 백엔드 서버 사이의 중간 역할을 합니다. 일반적인 흐름:
- 사용자가 프록시에 요청 전송
- 프록시가 웹 서버로 전달
- 서버가 응답
- 프록시가 클라이언트에 전달
이 아키텍처의 이점:
- 서버 업그레이드 시 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