리버스 프록시(Reverse Proxy) 설정

2024. 1. 22. 15:57프로젝트/[EATceed] 몸무게 증량 어플

728x90

 

필자가 구성해야할 구조는 하나의 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