Server

Nginx를 통한 리버스 프록시

민철킹 2021. 9. 17. 14:31

안녕하세요! 😄

이번 팀 프로젝트에서 Nginx를 사용한 무중단 배포를 맡아 작업을 진행하고 있습니다.

무중단 배포를 위해 현재 Nginx를 Reverse Proxy로 설정해두었는데 이 글에서는 해당 내용에 관해 이야기해보려 합니다.

먼저, Nginx가 무엇인지?, 그 다음으로 Reverse Proxy와 Forward Proxy의 차이점, 마지막으로 저희 서버에 대해 언급을 하며 글을 마무리하겠습니다.


Nginx

Nginx는 웹 서버(Web Server)입니다. Apache보다 동작이 단순하고 전달자의 역할만 하기 때문에 동시접속 처리에 특화되어 있는데요.

Nginx에서는 동시 접속자가 약 700명 이상이라면 Nginx 환경을 권장한다고 합니다. AWS상에서 시장 점유율이 44%에 가깝고 성능이 좋습니다.

Nginx의 가장 큰 특징은 비동기 이벤트 기반의 구조인데, Apache의 스레드/프로세스 기반 구조에 대조적입니다. 이는 서버에 많은 부하가 생길 경우의 성능을 예측하기 쉽게 해줍니다.

Forward Proxy vs Reverse Proxy

먼저 포워드 프록시는 인터넷 앞에 두어 클라이언트의 요청을 받아 인터넷으로 전달해줍니다.

포워드 프록시는 대부분 캐시 기능이 있어 자주 사용되는 컨텐츠라면 성능 향상을 가져올 수 있고 정해진 사이트만 연결하게 설정하는 등 웹 사용 환경을 제한할 수 있어 보안이 매우 중요한 기업 환경등에서 많이 사용합니다.

리버스 프록시로 웹 서버를 설정하면 인터넷이 클라이언트의 요청을 받아 웹 서버로 전달하고 리버스 프록시는 이 요청을 다시 내부 서버로 전달하게 됩니다. 리버스 프록시의 용도는 아래와 같습니다.

  • 로드 밸런싱
    • 백엔드 서버 앞에 존재하므로 속도와 용량을 극대화하는 동시에 서버에 부하를 나누어줌(분산)
  • 웹 가속
    • 일반적으로 요청되는 콘텐츠를 캐시할 수 있어 클라이언트-서버 간의 트래픽 흐름을 높일 수 있음
  • 보안 및 익명성
    • 백엔드 서버로 향하는 요청을 가로채기 때문에 보안에 대한 역할을 수행
    • 또한 웹 서버로만(Nginx를 쓰면 80포트)로 접근하기 때문에 외부에서는 내부 서버로 접근하는 포트를 모름

백엔드 서버에 적용

어떤가요? 간략한 위의 내용만 읽어보아도 리버스 프록시를 사용해야할 것만 같은 기분이 드시나요?

이번에는 저희 백엔드 서버에 리버스 프록시를 적용시킨 것에 대해 이야기해봅시다.

리버스 프록시를 설정한 저희 백엔드의 서버는 위의 그림과 같습니다.

 

포트 두 곳에 jar를 각각 배포하였고, 앞단에 존재하는 Nginx(리버스 프록시)는 클라이언트의 요청을 적절히 나누어 두 포트로 배분해줍니다.

 

클라이언트는 내부 서버에 직접 접근할 수 없고 무조건 Nginx(80 포트)를 통해서만 접근이 가능합니다.

소스 코드로 살펴볼까요?😮

 

 

upstream backend { 
include 설정파일 경로 
}

server {
	location / { 
    proxy_pass http://backend; 
    } 
}

내부 서버가 사용하는 포트에 대해서는 따로 분리하여 conf파일을 만들었고 해당 파일을 include하여 사용됩니다.

이제 이렇게 설정된 리버스 프록시를 통해 무중단 배포를 진행하려합니다.

 

그에 관한 내용은 다음에 이어질 글에서 작성될 예정입니다.

반응형

'Server' 카테고리의 다른 글

무중단 배포 자동화  (0) 2021.09.17