2024. 1. 22. 15:57ㆍ프로젝트/[EATceed] 몸무게 증량 어플
필자가 구성해야할 구조는 하나의 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. 일반적인 위치 일치(부분 일치)
글을 읽어주셔서 감사합니다!
'프로젝트 > [EATceed] 몸무게 증량 어플' 카테고리의 다른 글
개발용 인프라 구축 (2) | 2024.03.08 |
---|---|
헥사고날 아키텍처 회고 (1) (0) | 2024.02.12 |
Spring Security에서 Unauthorized, Forbidden 처리 (0) | 2024.01.15 |
[Spring Security] @AuthenticationPrincipal을 커스텀 해보자(Feat : ArgumentResolver) (0) | 2024.01.11 |
JPA 대소문자 구별 에러 해결 with MariaDB (0) | 2024.01.01 |