NGINX
최근 편집일시 : (♥ 0)
1. 개요[편집]
가벼우면서도 강력한 프로그램을 목표로 러시아에서 개발된 오픈 소스 웹 서버 프로그램이다. 상업용 지원은 미국의 Nginx, Inc.에서 담당하고 있다. '엔진엑스'라고 읽는다. HTTP와 리버스 프록시, IMAP/POP3 등의 서버 구동이 가능하다. Java 서블릿은 대개 Apache의 Tomcat을 연동해서 구동하고, PHP의 경우 PHP-FPM(FastCGI Process Manager)을 연동해서 구동한다.
2. 역사[편집]
2002년에 러시아의 프로그래머 이고르 시쇼브(Igor Sysoev)가 Apache HTTPd를 코딩하다 Apache의 C10K 문제[1] 를 보고, 이를 해결하기 위해서 네이티브 Win32 환경에도 돌아갈 무설치 웹 서버 데몬 프로그램을 개발하기 시작하여 2004년 10월 4일에 버전 0.1.0을 오픈 소스로 공개했다.[2] 2011년에는 이고르 시쇼브와 막심 코노발로프(Maxim Konovalov)가 공동으로 Nginx, Inc.를 설립하여[3] 기업시장 공략과 소프트웨어 지원을 강화했다. 2019년 3월에 미국의 F5 Inc가 Nginx, Inc.를 6억 7천만 달러에 인수했다.[4]
2019년 12월에 모스크바의 NGINX 사무실이 압수수색을 당하는 일이 발생했다.[5] 창립자 이고르 시쇼브가 NGINX 개발 초창기에 재직했던 Rambler[6] 라는 회사가 NGINX에 대한 저작권을 주장하고 나섰기 때문이다. 회사 업무와는 무관하게 NGINX를 개발했으나[7] , Rambler는 임직원이 개발한 것이므로 자사에 저작권이 있다고 주장했다. 그 이후, Rambler의 소유주 Sberbank와 NGINX의 인수자 F5가 협상했으나 결과는 공개되지 않았다.[8] 창립자 이고르 시쇼브는 2022년 1월에 NGINX와 F5를 떠나 은퇴했다.[9]
미국 F5가 인수한 이후에도 러사아 개발진을 주축으로 개발이 이어졌으나, 우크라이나 전쟁을 계기로 사이버 보안 우려가 커지자, 2022년 4월을 기점으로 러시아 사무실을 폐쇄하고 미국에서 개발 및 관리하는 것으로 개편되었다.[10]
Apache HTTPd 보다 역사가 오래되지는 않았으나, Apache HTTPd가 많은 한계를 보이고 있는 상황에서, NGINX는 가볍고 높은 성능을 무기로 점유율을 빠르게 늘려나가 현재는 웹 서버 시장점유율 1위가 되었다. 2023년 4월 기준으로 웹 서버 소프트웨어 순위는 엔진엑스(34.5%), 아파치 HTTP 서버(32.2%), 클라우드플레어(20.2%), LiteSpeed(11.8%), MS IIS(5.6%) 순이다.[11] 클라우드플레어는 CDN에 사용되는 것이기 때문에 배후에 있는 실제 웹 서버는 NGINX나 Apache HTTPd인 경우가 대부분이다.
기존에 Apache HTTPd로 서비스 하는 곳들도 점차 NGINX로 갈아타는 추세이다. 마이크로소프트 진영에서는 GUI 를 통해 관리할 수 있는 IIS를 사용하는 경우도 많지만, 도입 환경 및 연계될 시스템과의 문제라서 1:1 비교는 힘들며, 마이크로소프트 ASP.NET Core 버전에서는 리눅스를 지원하므로 리눅스에서 사용할 수 없는 IIS를 대신하여, ASP.NET에 내장된 Kestrel WAS와 연계하여 NGINX를 리버스 프록시 서버로 사용하는 케이스가 많다.
3. 라이선스[편집]
NGINX의 라이선스는 BSD 2-Clause 라이선스를 사용하는데, "Simplified BSD 라이선스" 또는 "FreeBSD 라이선스"라고 부르기도 한다. 즉, 원 저작자를 밝히고 원래 라이선스를 그대로 유지하는 조건만 갖추면, 자유롭게 수정 및 재배포가 가능하다. GPL과는 달리 수정된 소스를 공개하거나 소스코드를 제공해야 할 의무도 없는 더 자유로운 라이선스이다.
NGINX Plus는 상용 라이선스이며 유료이다. 사용료는 Standard 기준으로 연간 $2,500~$3,500 정도하는 것으로 알려져 있다.
4. 기능[편집]
NGINX는 HTTP와 HTTP/2를 지원하고 있으며, HTTP/3는 개발중에 있다. 클라우드플레어에서는 자체적으로 개발한 NGINX 확장모듈을 이용하여 HTTP/3 상용 서비스를 하고 있으며, NGINX 측에서도 자체 HTTP/3를 베타테스트 중이다[12] . 2023년부터는 레드햇 엔터프라이즈 리눅스 9과 우분투 22.04 LTS 용으로 HTTP/3 NGINX의 설치 가능한 바이너리 파일도 제공하기 시작했다[13] .
구조적으로는 Apache HTTPd에서 사용하는 요청 당 스레드 혹은 프로세스 기반의 구조 대신, 비동기 이벤트 기반의 구조로 작동한다. 이로 인해서 서버 부하시 성능 예측이 쉽다. 덤으로 10,000개의 동시 접속을 하면, 그 10,000개에 드는 메모리 점유는 평균 2.5MB다. 리눅스 기반으로 구축하는 웹 서버의 경우, 기존의 LAMP(Linux + Apache + MySQL/MariaDB + PHP/Python/Perl)에서 Apache 대신 (E)NGINX로 대체된 LEMP를 쓴다. NGINX는 여러 서드파티 기능[14] 을 모듈로 쓰고 있으며, 그래서 필요하지 않을 경우 모듈을 제외해 놓을 수 있다, 단, 완성된 바이너리를 사용하지 않고 소스를 컴파일해서 사용할 때는, 사용할 모듈을 컴파일 할 당시에 추가하지 않으면 그 이후에 추가할 수는 없다.
아파치처럼 NGINX도 사용할 때 환경 설정을 바꾸고 나서 서버 데몬을 재시작할 필요 없이 reload 시그널을 보내면 된다. 즉, 프로세스를 재시작할 필요가 없다는 장점이 있다. 물론 Apache도 httpd 명령어에 graceful 기능이 있다.
NGINX 유닛이라는 마이크로서비스용 앱 서버를 내놨는데, 정적인 설정 파일이 아니라서 설정을 고치는 중에도 서비스 운영에 방해가 없다고 한다. NGINX Releases Open Source Web Server with Dynamic Configuration (May 04, 2018)
5. 적용 확인법[편집]
웹사이트가 어떤 웹 서버 프로그램을 사용하는지 확인하려면 HTTP 응답 헤더의 server 항목을 보면 된다. 다만, 일부 CDN(클라우드프론트 처럼 원본 서버의 server 헤더를 그대로 전송하는 경우도 있다.)을 사용하는 경우에는 CDN 측에서 사용하는 서버로 표시되기 때문에 배후에 있는 실제 서버의 종류는 알 수 없다. 또한, 보안을 위하여 웹 서버 프로그램의 버전은 물론이고 종류도 공개되지 않도록 설정하는 경우도 많다. 웹 서버 프로그램의 종류와 버전을 알면 그에 특화된 공격이 용이해지기 때문이다.
웹 서버 프로그램의 종류를 공개하지 않거나 CDN으로 가린 경우에도 특별한 방법을 써서 확인할 수 있는 경우도 있다. 예를 들면, 나무위키는 CDN을 사용하기 때문에 실제로 어떤 웹 서버를 사용하는지 알 수 없다. 그런데 나무위키 검색창에 원주율을 소수 1만 자리까지 쳐 보면 nginx Too Large 오류가 뜬다. 즉, CDN 뒤쪽의 실제 웹 서버는 NGINX를 사용하고 있다는 뜻이다. 그리고 나무위키는 주소의 길이가 7,475자를 넘기면 HTTP ERROR 431 오류를, 8,195자를 넘기면 414 Request-URI Too Large 오류가 뜬다.
이 문서의 내용 중 전체 또는 일부는 2024-08-21 00:35:42에 나무위키 NGINX 문서에서 가져왔습니다.
[1] 10,000개 이상의 소켓을 열면, 하드웨어 성능이 충분함에도 불구하고 I/O 처리 방식의 문제 때문에 프로세스가 제대로 처리하지 못하는 것.[2] NGINX 버전 역사[3] 개발은 러시아에서 하고 있었으나 Nginx, Inc.는 글로벌 시장 공략을 위해 미국 샌프란시스코에서 설립했다.[4] 미국 F5 Inc가 NGINX 인수. 인수회사 이름이 F5 Networks, Inc 였으나 2022년에 사명을 F5, Inc로 변경했다.[5] NGINX 모스크바 사무실 압수수색, ZDNet, 2019년 12월 17일.[6] Rambler는 러시아 인터넷 포털 회사이다. 한국으로 치면 카카오나 네이버와 같은 존재이다.[7] 이고르 시쇼브 인터뷰, 2012년. "회사 업무와는 무관하게 여가 시간에 개발했고, Rambler는 한동안 이 사실을 몰랐다."[8] 보통 이런 합의를 할때는 NDA(Non-disclosure agreement;비밀유지협약)를 맺는다.[9] NGINX 창립자 은퇴, nginx.com, 2022년 1월 18일[10] NGINX와 러시아의 단절, F5 Inc 발표문, 2022년 4월 28일.[11] 세계 웹 서버 시장점유율, W3Tech[12] NGINX의 HTTP/3 데모 사이트[13] HTTP/3용 NGINX의 바이너리 파일 설치 방법[14] TLS, GeoIP 등