구축 & 운영/Nginx

Nginx와 Node.js의 리버스 프록시 구성

단칸이 2021. 7. 15. 22:12

포워드 프록시 (Forward Proxy)

사용자가 웹 사이트에 연결하는 시나리오에서, 사용자로부터 프록시 서버가 요청을 받아 웹 사이트에 연결한 후, 그 결과를 전달해주는 구조를 '포워드 프록시'라 합니다.

포워드 프록시 (Forward Proxy)

포워드 프록시는 대개 캐시 기능이 있으므로, 자주 사용되는 컨텐츠라면 월등한 성능 향상을 기대할 수 있습니다. 또한, 기업 환경에서는 사용자들에게 지정된 사이트만 연결할 수 있도록 사용을 제한하는 방향으로 사용하기도 합니다.


리버스 프록시 (Reverse Proxy)

클라이언트가 웹 서비스에 데이터를 요청하면, 리버스 프록시 서버는 별도의 어플리케이션 서버를 통해 데이터를 받아 클라이언트에 전달합니다. 일반적으로 어플리케이션 서버는 DB와 연결되는데, 어플리케이션 서버가 외부에 직접 노출되는 것을 막기 위한 네트워크 구성입니다.

Apache - Tomcat의 리버스 프록시 구성

특히 리눅스 환경에서는 SELinux의 기본 정책이 웹 서버는 8080, 8009 포트(톰캣에서 사용하는 포트)로의 포워딩만 허용하는데, 이는 웹 서버가 해킹 당해도 웹 서버의 권한으로는 내부망에 영향을 주지 않도록 하는 안전 장치로 볼 수 있습니다. 또한, 사용자가 증가하는 상황에 맞게 웹 서버나 어플리케이션 서버 유연하게 늘릴 수 있다는 장점이 생깁니다.

 

포워드 프록시는 패킷의 목적지 주소가 어플리케이션 서버와 동일하지만, 리버스 프록시는 패킷의 목적지 주소가 웹 서버라는 점이 가장 큰 차이점 입니다.


Nginx와 Node.js의 리버스 프록시 구성

Node.js 만으로도 웹 서버를 구동할 수 있지만, 실제 운영 환경에서는 리버스 프록시 서버로 Nginx를 앞세우는 경우가 상당히 빈번합니다.

위 그림에서 사용자는 Nginx와 통신을 주고받지만, 실제 데이터는 어플리케이션 서버에서 제공합니다. 이 때 사용자는 어플리케이션 서버의 존재를 알지 못하며, 요청하는 패킷의 목적지는 Nginx가 위치하는 웹 서버가 됩니다.

보안성

사용자는 실제 요청을 처리하는 어플리케이션 서버의 존재를 알 수 없으며, 웹 서버와만 통신이 이루어집니다. 그리고 이는 어플리케이션 서버에서 아직 발견되지 않은 보안 취약점을 보완해주는 역할을 하기도 합니다.

실제로 2013년에 발견된 CVE-2013-4450 취약점의 경우 Node.js 에서 발견된 결함이지만, NginxApache 등에서는 이를 방지하는 기능이 이미 탑재되어 있었습니다.

응답 속도 개선

Nginx에서는 사용자의 요청을 Cache 형태로 가지고 있기 때문에, 동일한 요청이 있을 때 HTML/CSS/IMG 등의 정적 파일의 응답 속도가 개선됩니다.

아래 벤치마크에서 Nginx는 요청이 증가하더라도 퍼포먼스의 변화가 크지 않지만, Express.js는 요청과 비례하여 응답시간이 조금씩 증가하는 형태를 보입니다.

부하 분산

다수의 서버(혹은 포트)에서 서비스를 제공하고 있다면, Nginx에 기본으로 탑재되어 있는 부하 분산 기능을 활용할 수 있습니다.


자료 출처

'구축 & 운영 > Nginx' 카테고리의 다른 글

[CentOS] - Nginx 설치 방법  (0) 2021.12.29