Nginx proxy 설정하기

2022. 2. 14. 21:31
반응형

Proxy?

다른 서버에서 리소스를 찾는 클라이언트의 요청에 대한 중개자 역할을 하는 서버이다. 따라서 프록시 서버는 클라이언트와 클라이언트가 찾고 있는 데이터를 호스팅하는 실제 서버 사이에 위치한다. 클라이언트에게 프록시 서버는 실제 백엔드 서버로 나타나고, 백엔드 서버에는 프록시 서버가 클라이언트처럼 보인다.

Reverse Proxy?

하나 이상의 백엔드 서버 앞에 위치하여 각 요청에 사용할 백엔드 서버를 결정하는 것이다.

Why Reverse Proxy?

  • 동시성 : 다중 연결을 더 잘 처리할 수 있는 역방향 프록시를 추가하면 백엔드 서버 성능이 크게 향상될 수 있다.
  • 복원력 : 백엔드 서버의 상태를 모니터링하고 서비스가 재개될 때까지 실패한 서버에 대한 요청 전송을 중지할 수 있다. 역방향 프록시가 여전히 작동 중인 백엔드 서버에 요청을 자동으로 보내기 때문에 클라이언트에는 오류가 표시되지 않는다.
  • 확장성 : 역방향 프록시는 백엔드 서버 그룹에 대한 단일 “공개 얼굴"이기 때문에 변화하는 트래픽 부하에 따라 서버를 추가 및 제거할 수 있다.
  • 레이어 7라우팅 : 역방향 프록시는 모든 서버로 향하는 트래픽을 보고 필요에 따라 요청과 응답을 수정하여 각 요청을 보낼 위치에 대한 지능적인 결정을 내릴 수 있다. 요청의 특정 HTTP 헤더, URL의 일부, 클라이언트의 지리적 위치 등에 따라 라우팅 결정을 내릴 수 있다.
  • 캐싱 : 역방향 프록시는 캐싱을 수행하기에 좋은 장소이다. 일반적으로 모든 요청을 백엔드 서버로 보내고 각 백엔드 서버가 자체 캐시를 구축하도록 하는 것보다 콘텐츠를 개시하는 것이 훨씬 더 효율적이다.
  • 기타 기능 : 역방향 프록시는 백엔드 서버 앞에 앉음으로써 대역폭 또는 요청 속도에 따른 트래픽 형성, 연결 제한, 다양한 인증 체계와의 통합, 활동 모니터링 등과 같은 다른 기능도 수행할 수 있다.

proxy_pass 설정하기

내가 이전에 만든 nginx로 react 배포하기에서 만든 설정에다 추가해줄 것이다. 앞에 과정은 그 부분을 참고하자. 그럼 설정들을 수정해 주자.

sudo nano /etc/nginx/sites-available/myapp.conf

설정 파일을 열고 아래처럼 입력해주자.

server {
  listen 80;
  location / {
    root   /home/user/myapp/build;
    index  index.html index.htm;
    try_files $uri $uri/ /index.html;
  }
  
  location /api {
    proxy_pass http://[서버 url];
  }
}

이렇게 설정해주고 나면, 프론트에서 서버에 직접 요청하는 것이 아니라, 요청을 자기자신 url로 보내면, proxy가 그걸 받아서 실제 서버에 요청을 보내고 데이터를 받아와 준다.

예를들어, 클라이언트 주소가 http://localhost:3000 이고 api 데이터 요청을 서버(http://localhost:4000)에게 보내려고 하면, axios.get(”http://localhost:4000”)이렇게 보낼 것이다. 그런데 위처럼 proxy_pass를 설정을 하고, 클라이언트에서 axios.get(”http://localhost:4000”)이 부분을 axios.get(”http://localhost:3000”) 으로 바꾸면, proxy가 실제 서버(http://localhost:4000)로 요청을 보내 데이터를 받아서 클라이언트로 보내주게 될 것이다.

 

참고 사항

NGINX Plus를 사용하는 역방향 프록시 참고링크
[Nginx] nginx.conf 에 Proxy 설정
참고링크

반응형
LIST

'학습 TIL > Nginx' 카테고리의 다른 글

Nginx로 React 배포하기 (우분투 환경)  (0) 2022.02.14

BELATED ARTICLES

more