본문 바로가기
DevOps

Nginx - Nginx에 대한 이해와 활용 방법 (프록시 서버 만들기 & Node.js)

by devLog by Ronnie's 2021. 6. 24.

Nginx - Nginx에 대한 이해와 활용 방법 (프록시 서버 만들기 & Node.js)

 

개발 도중에 cors에러 관련해서 해결 방안을 찾다가 프록시서버를 두어 해결할 수 있다는 말을 듣고 프록시 서버로 유명한 Nginx에 대해서 공부한 내용을 정리해둔다. 처음보는 새로운 기술을 이용할때면 처음에는 쉽지는 않지만 해결해나가는 과정에서 성취감을 주는 것 같다. 이만 각설하고 본론으로 들어가본다.

 

간단하게 용어 정리를 먼저 해보자.

 

Nginx

Nginx란 트래픽이 많은 웹사이트에 확장성을 위해 설계한 비동기 이벤트 기반 구조의 웹서버 소프트웨어이다.

특징으로는 가벼움과 높은 성능을 지향한다. 

 

리버스 프록시 서버란?

내부 어플리케이션과 외부 클라이언트 사이에 자리잡아서 클라이언트의 요청을 적절한 서버로 보내주는 역할을 하는 것이다. Node.js나 tomcat같은 많은 어플리케이션들은 스스로 서버와 같은 역할을 할 수 있지만 Nginx에서 제공하는 로드 밸런싱, 보안, 가속화 등의 이유로 Nginx를 사용한다. 아래에 그림을 참고하여 리버스 프록시 서버의 느낌을 알 수있다.

 

Apache & Nginx현재도 많이 쓰이고 있지만 과거에는 더 많이 쓰였던 Apache와 비교를 간단하게 해보려고 한다.먼저 점유율을 보면 다음과 같다. Nginx에 상승세가 두드러지게 보인다.

Apache

- 쓰레드 / 프로세스 기반 구조로 요청 하나당 쓰레드 하나가 처리하는 구조

- 사용자가 많으면 많은 쓰레드 생성, 메모리 및 CPU 낭비가 심함

- 하나의 쓰레드 : 하나의 클라이언트 라는 구조

Nginx

- 비동기 Event-Driven 기반 구조.

- 다수의 연결을 효과적으로 처리가능.

- 대부분의 코어 모듈이 Apache보다 적은 리소스로 더 빠르게 동작가능

- 더 작은 쓰레드로 클라이언트의 요청들을 처리가능

이처럼 Nginx는 여러개의 커넥션을 전부 다 이벤트 핸들러를 통해 비동기 방식으로 처리해 먼저 처리되는 것부터 로직이 진행되게하여 아파치보다 적은 리소스로 더 빠르게 동작이 가능하다.

 

Node.js에 원작자인 라이언 달은 Nginx를 프록시 서버로 앞단에 놓고 node.js를 뒤쪽에 놓는게 버퍼 오버플로우 취약점에 의한 공격을 어느정도 방지한다고 말했다. 여기서 버퍼 오버플로우란 메모리 공간을 벗어나는 경우 오버플로우가 되고 이 때 사용되지 않아야 할 영역에 데이터가 덮어씌워져 주소, 값을 바꾸는 공격이다.

 

이처럼 Nginx를 앞단에 둠으로써 보안적인 이슈도 방지가 가능하다.

 

 

그럼 이제 Nginx와 Node.js를 이용한 프록시 서버 구성하는 방법에 대해 알아보자.

내용이 길어져 아래 링크를 통해 나누었다.

댓글