1) 서문
- 이 글에서는 Nginx 로드밸런서를 도커로 GCP에 배포한 과정에 대해서 다뤄보겠습니다.
콘서트 티켓 프로젝트에서는 고가용성, 부하 조절을 위해 Nginx를 도입했습니다.
2) Nginx 도입 과정
(1) Nginx용 GCP 인스턴스 생성
- Nginx 배포를 위한 GCP 인스턴스를 독립적으로 생성합니다.
(2) Nginx 도커 이미지 다운로드
- docker pull nginx를 통해 Nginx 도커 이미지를 다운로드할 수 있습니다.
(3) nginx.conf 설정
-nginx.conf는 Nginx의 기본 설정 파일로, 모든 설정에 대한 진입점입니다.
워커 프로세스 개수, 튜닝, 동적 모듈 적재와 같은 글로벌 설정 항목을 포함하여,
다른 Nginx 세부 설정 파일에 대한 참조를 지정합니다.
(3-1) 설정 분석
- 전역 설정
worker_processes auto; events { worker_connections 1024; }
- worker_processes auto; → CPU 코어 수에 맞춰 워커 프로세스를 자동으로 조정
- worker_connections 1024; → 각 워커가 동시에 처리할 수 있는 최대 연결 수 설정
- Upstream 서버 설정
(1) 웹소켓 서버 그룹
upstream websocket_servers
{ least_conn;
server 34.64.102.105:8081;
server 34.64.36.141:8081; }
- upstream websocket_servers → 웹소켓 서버들을 하나의 그룹으로 묶음
- least_conn; → 가장 적은 연결을 가진 서버로 우선 라우팅
- 두 개의 웹소켓 서버(8081 포트 사용)로 요청을 분배
(2) Spring 서버 그룹
upstream spring_servers {
least_conn;
server 34.64.102.105:8080;
server 34.64.36.141:8080; }
least_conn;
server 34.64.102.105:8080;
server 34.64.36.141:8080; }
- upstream spring_servers → Spring 서버들을 하나의 그룹으로 묶음
- least_conn; → 현재 연결 수가 가장 적은 서버로 트래픽 분배
- 두 개의 백엔드 서버(8080 포트 사용)로 요청을 전달
-서버 블록
- 기본 설정
server { listen 80;
- listen 80; → 80번 포트(HTTP)에서 요청을 받음
- 이 서버 블록 안에서 웹소켓과 API 요청을 각각 처리
- 웹소켓 요청 처리
location /gs-guide-websocket {
proxy_pass http://websocket_servers;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $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; }
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $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; }
- 설명
- /gs-guide-websocket 경로로 요청이 들어오면 websocket_servers 그룹으로 보냄
- proxy_http_version 1.1; → 웹소켓은 HTTP 1.1 이상에서 지원되므로 설정 필수
- proxy_set_header Upgrade $http_upgrade;
→ 웹소켓 핸드셰이크(연결 업그레이드) 지원 - proxy_set_header Connection "Upgrade";
→ 웹소켓 연결을 유지하도록 설정 - proxy_set_header Host $host;
→ 원본 요청의 Host 헤더를 유지 - proxy_set_header X-Real-IP $remote_addr;
→ 클라이언트의 실제 IP를 전달 - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
→ 프록시를 거치는 모든 IP 정보를 전달 - proxy_set_header X-Forwarded-Proto $scheme;
→ HTTP/HTTPS 스키마 정보를 전달
- API 요청 처리
location /api/
{ proxy_pass http://spring_servers;
proxy_set_header Host $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; }
- 설명
- /api/ 경로로 들어오는 요청을 spring_servers 그룹으로 보냄
- proxy_set_header 설정을 통해 원본 요청 정보를 유지하면서 전달
'콘서트 티켓 프로젝트' 카테고리의 다른 글
활성/비활성 사용자 구분 후 비활성 사용자 웹소켓 연결 끊김 처리 (0) | 2025.03.09 |
---|---|
Websocket과 Redis Pub/Sub을 활용한 대기열->활성화열 전환 알림 시스템 (0) | 2025.03.07 |
[#1] 서버 성능 개선하기 - 웹소켓 연결 테스트 (0) | 2025.03.03 |