nginx

Posted by yunki kim on September 19, 2021

nginx

 경량 웹 서버이다. 클라이언트로 부터 요청을 받았을 때 요청에 맞는 정적파일을 응답해 주는 HTTP Web Server로 활용되거나 Reverse Proxy Server로 활용해 WAS 서버의 부하를 줄이는 load balancer 역할을 하기도 한다. 

nginx 흐름

  nginx는 Event-driven 방식을 사용해 동작하기 때문에 한개 또는 고정된 프로세스만을 사용하고 비동기 방식을 사용해 요청을 동시에 처리할 수 있다. 따라서 요청이 많이 들어온다 해도 새로운 프로세스 또는 쓰레드를 생성하지 않기 때문에 프로세스, 쓰레드 생성 비용이 존재하지 않는다. 그때문에 적은 자원으로 효율적인 운영이 가능하며 단일 서버에서 동시에 많은 연결을 처리할 수 있다. 

  Event-Driven

    apache의 C10K 문제점을 해결하기 위해 만들어진 Event-Driven 구조의 웹서버 SW이다. C10K는 하드웨어 자원이 충분함에도 IO처리 방식의 문제 때문에 프로세스가 제대로 처리를 하지 못하는 문제이다. 처음 BSD 소켓(네트워크 프로그램 TCP/IP 계층에서 가장 많이 사용되는 소켓)을 설계 할 때 하드웨어 사양이 되지 않아서 이를 고려하지 않고 설계를 했다. 

  OSI7 layer중 application layer 아래에서 웹서버가 HTTP 통신을 한다. 

구조

  Nginx는 하나의 master process와 여러개의 worker process로 구성되 있다. Master process는 설정을 읽고, 유효성 검사와 worker process를 관리 한다. Worker porcess에서는 요청을 효율적으로 분배하기 위해 OS에 의존적인 메커니즘을 사용한다. Worker process의 갯수는 설정파일에서 정의되고 컴퓨터의 CPU 코어 수에 맞추어 worker process의 수가 자동으로 조정된다.