-
리버스 프록시(Reverse Proxy) 설정Project Trouble Shooting/[EATceed] 몸무게 증량 어플 2024. 1. 22. 15:57728x90
필자가 구성해야할 구조는 하나의 EC2에 2개의 WAS가 있는 구조이다.
해당 구조로 설정한 이유는 2개의 WAS 중 1개가 매우 가벼워 굳이 1개의 EC2를 더 띄울 필요가 없었기 때문이다.
따라서, 2개의 WAS의 라우팅이 필요하여 리버스 프록시를 이용하기로 하였다.
참고 : 리버스 프록시
클라이언트의 요청을 대신 받아 내부 서버로 전달해주는 것을 리버스 프록시라고 한다.
장점
- 보안 : 모든 요청은 Reverse Proxy에 들어오며, 사용자는 내부 서버의 존재를 모른다. 오직 Reverse Proxy만이 내부 서버를 알고 있다.
- 로드 밸런싱 : Proxy 서버가 로드 밸런싱 즉, 부하 여부에 따라 요청을 분배할 수 있다.
- 캐싱 : 미리 렌더링된 버전의 페이지를 캐시하여 페이지 로드 시간을 단축할 수 있다.구조는 아래와 같습니다.
구조
Nginx가 라우팅하는 방법
결론부터 말하자면, Nginx는 /etc/nginx/sites-available/ 폴더 내에 있는 default 파일을 기준으로 라우팅을 합니다
물론, default 파일만 사용하는 것은 아니고 원한다면 커스텀하게 파일을 추가할 수 있습니다.
만약, 추가할 경우에는 sites-enabled에 심볼릭 링크를 만들어 적용해야합니다.nginx의 sites-available의 default 파일
server { listen 80; access_log /var/log/nginx/access_new.log; error_log /var/log/nginx/error_new.log; location /api { proxy_pass [IP V4 주소] 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; } ... }
- listen 80 : nginx 서버가 80 포트에서 들어오는 웹 요청을 수신
설정에 따라 다르겠지만 필자는 ALB의 Taget Group에 요청을 보내는 Port를 80으로 설정하였다.
location /api { proxy_pass [IP V4 주소] 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; }
이는 /api 경로로 요청온 것들을 처리하는 명령어이다.
각 헤더들은 아래와 같은 의미를 가진다.
- $remote_addr : nginx로 요청을 보낸 client의 address 정보
- $http_x_forwarded_for - nginx로 들어왔을 때 존재 하던 X-Forwarded-For 설정 그대로 제공
- $proxy_add_x_forwarded_for - nginx로 들어왔을 때 존재 하던 X-Forwarded-For 설정에 $remote_addr 값 추가
마찬가지로 다른 WAS로 보낼 location을 위와 똑같이 정의해주면된다. 물론, 같은 경로 /api 이면 안된다.location 블록 우선 순위
location 블록의 우선순위
1. 정확한 위치 일치
2. Prefix(접두사) 위치 일치 (location ^~ ...)
3. 일반적인 위치 일치(부분 일치)글을 읽어주셔서 감사합니다!
728x90'Project Trouble Shooting > [EATceed] 몸무게 증량 어플' 카테고리의 다른 글
개발용 인프라 구축 (2) 2024.03.08 헥사고날 아키텍처 회고 (1) (0) 2024.02.12 [Spring Security] @AuthenticationPrincipal을 커스텀 해보자(Feat : ArgumentResolver) (0) 2024.01.11 JPA 대소문자 구별 에러 해결 with MariaDB (0) 2024.01.01 Foreign key constraint is incorrectly formed 에러 해결 (0) 2023.12.31