nginx

덤프버전 : r20200302

파일:attachment/nginx/nginx.gif


nginx

1. 개요
2. NGINX Unit
3. 사용 사이트
4. 여담


1. 개요[편집]


2002년부터 러시아프로그래머 이고르 시쇼브(Игорь Сысоев)가 Apache HTTPd를 코딩하다 Apache의 C10K 문제[1]를 보고, 이를 극복하기 위해서 네이티브 Win32 환경에도 돌아갈 무설치 웹 서버 데몬 프로그램에 대한 개발을 시작하여 2004년 스푸트니크 1호 발사일에 발표한 오픈 소스 웹 서버 프로그램. 현재 이고르 시쇼브와 그가 설립한 회사인 nginx.Inc.가 이 프로젝트를 운영중에 있다. 목표는 가벼우면서도 강력한 프로그램이라고 한다. HTTP와 리버스 프록시, IMAP/POP3 등의 서버 구동이 가능하다. Java 서블릿은 대개 Apache톰캣을 연동해서 구동하고, PHP의 경우 PHP-FPM(FastCGI Process Manager)을 연동해서 구동한다.

읽을 때는 '엔진엑스'라고 읽는다. 아직 역사가 그리 오래되지 않아서 점유율 면에선 Apache HTTPd에게 많이 밀린다. 하지만 신규 서비스를 중심으로 점유율 상승에 가속이 붙는 중이며, 이미 Apache HTTPd가 많은 한계를 많이 보이고 있으므로 특별한 사유가 없다면 nginx로 갈아타는 추세다. 확장 모듈이 Apache HTTPd보다 부족한 게 흠인데, 어차피 Apache HTTPd의 많은 확장 모듈을 제대로 쓰는 사람은 드물다. 오히려 쓰지도 않으면서 괜히 리소스만 낭비하는 모듈이 대부분이다.[2] 따라서 호환성 확인 후 별다른 문제가 없다면 nginx로 갈아타는 것이 현 추세. 이미 Apache HTTPd에서 많이 사용하는 필수적인 모듈은 nginx에도 존재하고 일부 모듈은 Apache HTTPd의 것보다 수십배 이상 빠르다. 마이크로소프트 진영에서는 GUI 제공으로 인해 관리가 쉬운 인터넷 정보 서비스에 밀리지만, 이쪽은 도입 환경 및 연계될 시스템과 취향의 문제라서 1:1 비교가 힘들다.

구조적으로는 Apache HTTPd에서 사용하는 요청 당 스레드 혹은 프로세스 기반의 구조 대신 비동기 이벤트 기반의 구조로 작동한다. 이로 인해서 서버 부하시 성능 예측이 쉽다. 덤으로 10,000개의 동시 접속을 하면 그 10000개에 드는 메모리 점유는 평균 2.5MB다.(...) 리눅스 기반으로 구축하는 웹 서버의 경우 기존의 LAMP(Linux + Apache + MySQL + PHP or Python or Perl)에서 Apache 대신 (E)nginx로 대체된 LEMP를 쓴다. nginx는 여러 서드파티 기능[3]을 모듈로 쓰고 있으며, 그래서 필요하지 않을 경우 모듈을 제외해 놓을 수 있다, 단, 완성된 바이너리를 사용하지 않고 소스를 컴파일해서 사용할 때 처음부터 사용할 모듈을 추가하지 않으면 그 이후에 추가가 안되는 건 함정.

nginx는 현재 HTTP/2를 발빠르게 지원하려고 하고 있다. HTTP/2 보급화를 계기로 콩라인 등극을 목표로 하는 듯하다. 그 전까지 이 분야의 콩라인 주자는 마이크로소프트의 인터넷 정보 서비스.

단, 위의 장점들은 전적으로 리눅스/유닉스용 버전에만 해당된다. 윈도우용 nginx는 아직도 불완전한 버전이라서 본래의 성능이나 확장성을 발휘하지 못하며 UDP 관련 기능도 지원하지 않는다. 참고 향후 윈도우용 버전을 개선하겠다는 약속은 있으나 몇년이 지나도 그대로라 사용자들도 반쯤 포기 상태이다. Apache HTTPd도 윈도우 버전은 퍼포먼스가 썩 좋지 않아, 윈도우 환경에서 본격적인 서버를 운영하려면 아직까지는 윈도우 서버를 구입해서 IIS를 사용할 수밖에 없다.

nginx를 사용할 때 환경 설정을 바꾸고 나서 서버 데몬을 재시작할 필요 없이 reload 시그널을 보내면 된다. 즉, 프로세스를 재시작할 필요가 없다는 장점이 있다.

2017년 10월 기준으로 실질적으로 작동하는 웹 사이트(active site)들에서 쓰이는 웹 서버 소프트웨어 순위는 아파치 HTTP 서버(44.89%), 엔진엑스(20.65%), 구글 웹 서버(7.86%), MS 인터넷 정보 서비스(7.32%) 순이다.[4]

2019년 3월 F5에 6억 7천만 달러(한화로 약 7500억 원)에 인수되었다. #


2. NGINX Unit[편집]


NGINX Unit이라는 마이크로서비스용 앱 서버를 내놨는데, 정적인 설정 파일이 아니라서 설정을 고치는 중에도 서비스 운영에 방해가 없다고 한다. NGINX Releases Open Source Web Server with Dynamic Configuration (May 04, 2018)


3. 사용 사이트[편집]


가나다 순이다. 실제로 확인해보려면 HTTP 헤더의 Server 항목을 보면 된다. 또는 Is This site down에서 Server: 칸을 확인하면 된다.


Cloudflare에서는 NGiИX를 변형한 Cloudflare-nginx를 사용한다.


4. 여담[편집]


파일:external/ivandarmawan.files.wordpress.com/nginxwelcome.jpg
nginx를 처음 깔면 환영 문구가 나오는데, 구식버전에서는 그냥 빈 화면에 Welcome to nginx만 뜨고 땡이다. 근데 문제는 몇몇 악성코드들이 컴퓨터를 감염시켜 로컬 DNS를 변경, 사이트를 변경시키는데 하필이면 저 화면만 뜨는 서버로 이동시킨다는 것. 덕택에 nginx도 악성코드 취급을 받아, 현재는 설치 후 기본 페이지를 저렇게 변경해놨다.


[1] 10,000개 이상의 소켓을 열게 되면 하드웨어 성능이 충분함에도 불구하고 I/O 처리 방식의 문제 때문에 프로세스가 제대로 처리하지 못하는 것.[2] 사용자가 주어진 모듈이 어떤 기능을 하는지 다 알지 못하기 때문이다.[3] TLS, GeoIP 등[4] https://news.netcraft.com/archives/2017/10/26/october-2017-web-server-survey-13.html[5] 어떤 잉간이 나무위키 검색어 입력창에 원주율 소수 1만자리까지 친 결과, nginx Too Large 오류가 떴다. 참고로 나무위키 주소의 길이가 7475자를 넘어가면 HTTP ERROR 431 오류를, 8195자를 넘어가면 414 Request-URI Too Large 오류가 뜬다