Server

[Nginx] Reverse Proxy Port Forwarding

박현국 2025. 3. 21. 16:50

목차

1. Nginx 란?

2. Reverse Proxy 와 Forward Proxy

3. Nginx 를 통한 Port Forwarding

 

 

Nginx 란? 

 

 Nginx 는 경량 웹서버로 정적파일을 서빙하는 web server, 또는 요청을 다른 서버로 전달하는 reverse proxy server 로 활용되어 WAS (Web Application Server) 의 부하를 줄이는 로드 밸런서로 사용할 수 있다.

  • Nginx 는 2가지 특징이 있다.
    1. Web Server 로 정적 컨텐츠를 처리함으로써, 동적 컨텐츠를 처리하는 WAS 의 부하를 줄일 수 있다.
    2. Reverse Proxy Server 로 내부 백엔드 서버로 전달하고, 응답을 클라이언트 포트로 다시 돌려보내는 역할을 한다.
    이번 포스팅에서 다뤄볼 주제는 2번 사항인 ReverseProxy 에 대해서 다뤄보겠다.
  • Event-Driven 방식
    ● 서버로 들어오는 여러 개의 커넥션을 Event-Handler 를 통해 비동기 방식으로 처리한다.
    ● 이러한 방식으로 인해 적은 메모리로 서버를 운영할 수 있다.
    ● 싱글 스레드, 프로세스로 작동한다.
    → Event-Listener 를 통해 요청 흐름을 처리하여, 많은 수의 요청도 효율적으로 처리 가능
  • HTTP 프로토콜과 WebSocket 프로토콜에서 상황에 맞게 사용 가능하다.
    ● HTTP 프로토콜 : 일반적인 웹 요청의 경우 클라이언트는 HTTP 로 요청을 보내고, Nginx 는 해당 요청을 백엔드 서버 즉, api 콜 하는 곳으로 전달한다.
    WebSocket 프로토콜 : 클라이언트가 WebSocket 연결을 요청하면, 초기에는 HTTP 요청으로 Upgrade 과정을 거친다. Nginx 는 이 요청을 감지하고, 헤더를 설정하여, 웹소켓 서버로 업그레이드 요청을 전달한다.
    → 초기 핸드 쉐이크는 HTTP 로 이루어지지만, 이후 연결은 WebSocket 프로토콜로 전환되어 양방향 통신이 이루어진다.

 

※ Nginx 설정

nginx.conf 설정파일에서 simple directive 와 block directive 에 의해 서버의 location, name 등이 제어된다.

 

Reverse Prooxy 와 Forward Proxy

 

프록시 (Proxy) 란?

프록시 서버는 클라이언트가 자신을 통해서 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이다.

즉, 프록시 (Proxy) 란 서버와 서버사이의 중계기 역할은 한다고 보면 된다.

사용하는 이유는 보안상의 이유로 직접 통신할 수 없는 클라이언트 사이에서 대리로 통신을 수행하여 보안을 향상시킨다.

 

보통 웹은 클라이언트 -> 서버, 서버 -> 클라이언트로 통신하며 데이터를 전달할때, 중복되는 데이터를 반복하여 전달하는 상황이 발생한다. 이를 매번 처리하는 것은 리소스 낭비와 서버 부하로 이어지게 되는데, 이를 본 서버에 도달하기 전에 새로운 서버 (proxy server)  를 미리 배치하여, 중복요청에 대해 동일한 응답을 할 수 있다면, 클라이언트에겐 빠른 속도의 서비스를 , 서버에게는 불필요한 부하를 줄일 수 있는 효과를 낼 수 있게 된다.

 

Reverse Proxy 

인터넷과 서버 사이에 존재하는 프록시 서버로 실제 서버를 대신하여 클라이언트의 요청을 받아서 동작한다. 
즉, 외부 클라이언트의 요청을 받아 여러 서버로 전달하는 중간다리 역할을 수행한다.

  • 로드 밸런싱 : Nginx는 클라이언트의 요청을 프록시 서버에 분산하기 위해 로드 밸런싱을 수행하여 성능, 확장성 및 신뢰성을 향상시킬 수 있습니다.
  • 캐싱 : Nginx를 역방향 프록시로 사용하면 미리 렌더링된 버전의 페이지를 캐시하여 페이지 로드 시간을 단축할 수 있습니다. 이 기능은 프록시 서버의 응답에서 수신한 콘텐츠를 캐싱하고 이 콘텐츠를 사용하여 매번 동일한 콘텐츠를 프록시 서버에 연결할 필요 없이 클라이언트에 응답하는 방식으로 작동합니다.
  • SSL 터미네이션 : Nginx는 클라이언트와의 연결에 대한 SSL 끝점 역할을 할 수 있습니다. 수신 SSL 연결을 처리 및 해독하고 프록시 서버의 응답을 암호화합니다.
  • 압축 : 프록시 서버가 압축된 응답을 보내지 않는 경우 클라이언트로 보내기 전에 응답을 압축하도록 Nginx를 구성할 수 있습니다.
  • DDoS 공격 완화 : 수신 요청과 단일 IP 주소당 연결 수를 일반 사용자에게 일반적인 값으로 제한할 수 있습니다. 또한 Nginx를 사용하면 클라이언트 위치와 "User-에이전트" 및 "Referer"와 같은 요청 헤더 값을 기준으로 액세스를 차단하거나 제한할 수 있습니다.

 

Forward Proxy

클라이언트 바로 뒤에 놓여 있어서, 같은  내부망에 존재하는 클라이언트의 요청을 받아 인터넷을 통해 외부 서버에서 데이터를 가져와 클라이언트에게 응답해준다. 

즉, 클라이언트가 서버에 접근하고자 하면 클라이언트와 인터넷 사이에 위치하여 클라이언트 정보가 서버에 노출되지 않도록 한다.

 

 

즉, 리버스 프록시는 서버에 위치하여, 외부의 요청을 내부 서버로 전달하며, 포워드 프록시는 클라이언트 측에서 외부 요청을 대리 수행하여, 클라이언트의 정보를 보호하거나 특정 정책을 적용한다.

Nginxs 의 경우 리버스 프록시로 사용한다.

 

Nginx 를 통한 Port Forwarding

 

라우터나 방화벽에서 특정 포트로 들어오는 모든 트래픽을 다른 ip/port 로 전달하는 네트워크 레벨에서 포트포워딩과 비슷한 개념으로, 애플리케이션 계층의 포트 전달이라고 보면 된다.

 

 

admin.dalbps.com 이라는 domain 을 443 포트 (https) 에서 받아서 해당 index.html 파일을 무조건 보여줘라라는 의미

 

Nginx 를 통해 SSL 관련 암호화 설정을 구성하면, 외부로부터 들어오는 보안 연결을 유지하면서 내부 서버의 IP 나 포트를 자유롭게 지정하여 포워딩할 수 있다.