[nginx] 개념 및 활용

스크린샷 2018-11-06 오후 5.17.09.png

트래픽이 많은 웹사이트를 위해 확장성을 위해 설계한 비동기 이벤트 기반구조의 웹서버 소프트웨어입니다. 이 프로그램은 가벼움과 높은 성능을 목표로 만들어 졌으며, 러시아의 프로그래머,이고르 시쇼브가 Apache의 C10K Problem(하나의 웹서버에 10,000개의 클라이언트의 접속을 동시에 다룰 수 있는 기술적인 문제)를 해결하기 위해 만든 Event-driven구조의 HTTP, Reverser Proxy, IMAP/POP PROXY server를 제공하는오픈소스 서버 프로그램입니다.

 

Apache

– 쓰레드 / 프로세스 기반 구조로 요청 하나당 쓰레드 하나가 처리하는 구조
– 사용자가 많으면 많은 쓰레드 생성, 메모리 및 CPU 낭비가 심함
– 하나의 쓰레드 : 하나의 클라이언트 라는 구조

nginx

– 비동기 Event-Driven 기반 구조.
– 다수의 연결을 효과적으로 처리가능.
– 대부분의 코어 모듈이 Apache보다 적은 리소스로 더 빠르게 동작가능
– 더 작은 쓰레드로 클라이언트의 요청들을 처리가능

 

스크린샷 2018-11-06 오후 3.00.38.png

기존에는 동시 연결을 처리하던 process나 thread기반의 모델들은 개별 process, thread로 연결을 처리하고  네트워크 또는 입출력 작업을 blocking 하였다. 그렇기 때문에 애플리케이션에 따라 메모리나 CPU소비 측면에서 매우 비효율적일수도 있다. 또한, 별도의 process,thread를 생성하려면 heap 및 stack 메모리 할당을 포함한 새로운 런타임 환경을 준비하거나 새로운 execution context를 생성했어야 했고, 추가적인 CPU시간도 이러한 항목을 생성하는데 소모되며 과도한 컨텍스트 스위칭이 발생할시 thread thrashing으로 인해 성능이 저하될수 있다고 한다.

그래서 이벤트 기반, 비동기식, 단일스레드, 논블러킹 아키텍처가 나오기 시작했고 nginx아키텍쳐의 기반이 되었다.  nginx는 multiplexing 및 이벤트 알림을 중점적으로 사용하고 특정작업을 별도의 프로세스에 할당한다, 연결은 worker라고 불리는 한정된 단일 스레드 프로세스에서 매우 효율적인 실행루프로 처리된다. 각 worker는 초당 수천개의 동시 연결 및 요청을 처리할 수 있다.

 

 

환경설정(튜닝) – nginx.conf 파일

nginx.conf 파일은 접속자수, 동작 프로세스수 등 퍼포먼스에 기본적인 설정 항목을 담고 있다.

스크린샷 2018-11-06 오후 4.58.38

  1. worker_processes : 프로세스 실행 가능수 (‘auto’로 설정 가능) , 코어수만큼 할당하는것이 보통이며 코어 수보다 더 높게도 할당 가능.
  2. worker_connections : 하나의 프로세스가 처리할 수 있는 커넥션의 수

 

스크린샷 2018-11-06 오후 4.58.52

3. keepalive_timeout : 접속시 커넥션을 몇초동안 유지할 것인지 설정

4. server_tokens : 헤더에 nginx의 버전을 숨기는 역할(보안상 설정하는 것이 좋음)

 

 

 

Linux – 설치

nginx 설치

출처 : https://www.lesstif.com/pages/viewpage.action?pageId=25100304#RHEL/CentOSUbuntu%EC%97%90nginx%EC%84%A4%EC%B9%98-RHEL/CentOS%EC%97%90nginx%EC%84%A4%EC%B9%98

 

댓글 남기기