NGINX
NGINX는 경량화된 웹 서버이다. 웹 서버는 무엇인가? 웹 브라우저와 같은 클라이언트로부터 HTTP 요청을 받아들이고, HTML 문서와 같은 웹 페이지를 반환하는 서버이다. 즉, NGINX는 HTTP 서버로서 정적 파일을 반환해 준다.
NGINX는 Reverse Proxy Server로 활용되어 서버의 부하를 줄이는 로드 밸런서이기도 하다.
Apache VS NGINX
Apache 웹서버는 클라이언트로부터 받은 요청을 처리할 때 새로운 프로세스를 생성하여 처리한다. 따라서 CPU와 메모리의 자원 소모가 커져서 요청이 많아지면 부하가 심해진다.
Nginx는 Event-Driven 구조로 고정된 프로세스만 생성하고, 요청은 비동기 방식으로 처리한다. 따라서 자원의 효율적인 운용이 가능하다.
Reverse proxy??
클라이언트가 서버로 요청을 보내면 서버는 요청에 대한 응답으로 클라이언트에게 리소스를 반환한다. Proxy server는 클라이언트와 서버의 징검다리가 된다. 클라이언트의 요청을 서버가 직접 받는 것이 아니라 Proxy server가 대신 받아주고, Proxy server는 그 요청을 다시 서버에게 보낸다. 서버는 클라이언트에게 리소스를 직접 전달하는 것이 아니라 Proxy server에게 전달하고, Proxy server는 전달받은 리소스를 클라이언트에게 전달한다.
이런 짓을 왜하냐? Proxy Server는 Forword Proxy와 Reverse Proxy로 구분된다.
Forword Proxy는 내부망에서 외부 인터넷의 연결을 요청하는 형태로, 정해진 사이트만 연결이 가능하게 설정하여 보안이 중요한 환경에서 사용한다.
서버의 앞에서 클라이언트의 요청을 받을 수 있어서 로드 밸런서로 사용할 수 있다. 또 클라이언트에게 실제 서버의 IP주소를 감출 수 있어 실제 서버로 들어오는 외부의 공격을 막을 수 있다.
NGINX 구조
NGINX는 하나의 Master Process와 다수의 Worker Process로 구성되어 실행된다. Master Process는 configuration을 읽고, 유효한지 평가를 한다. 그리고 Worker Process를 관리한다. Worker Process는 클라이언트의 요청을 실제로 처리하는 역할을 하며, Worker Process의 개수는 configuration을 통해 정의하거나 CPU 코어에 맞게 자동으로 조정된다.