||<-2>
[[파일:NGINX 로고.svg|width=300]] || || '''개발사''' ||NGINX, Inc (미국 샌프란시스코)|| || '''모기업''' ||F5, Inc (미국 시애틀) || || '''최초 버전''' ||2004년 10월 4일 || || '''종류''' ||[[웹 서버]], [[프록시 서버#s-4|리버스 프록시 서버]] || || '''작성 언어''' ||[[C(프로그래밍 언어)|C]] || || '''라이선스''' ||NGINX: [[BSD 라이선스|BSD 2-Clause]] (무료)[br]NGINX Plus: 상용 라이선스 (유료)|| || '''링크''' ||[[https://nginx.org/|[[파일:홈페이지 아이콘.svg|width=24]]]] | [[https://nginx.com/|[[파일:홈페이지 아이콘.svg|width=24]]]] | [[https://hg.nginx.org/nginx/|소스코드]] || [목차] [clearfix] == 개요 == 가벼우면서도 강력한 프로그램을 목표로 원래는 [[러시아]]에서 개발되었지만 2020년대 이후 현재는 미국에서 운영중인 [[오픈 소스]] 웹 서버 프로그램이다. '엔진엑스'라고 읽는다. [[HTTP]]와 리버스 프록시, IMAP/POP3 등의 서버 구동이 가능하다. [[Java]] 서블릿은 대개 [[아파치 소프트웨어 재단|Apache]]의 [[Tomcat]]을 연동해서 구동하고, [[PHP]]의 경우 PHP-FPM(FastCGI Process Manager)을 연동해서 구동한다. == 역사 == 2002년에 [[러시아]]의 [[프로그래머]] 이고르 시쇼브(Igor Sysoev)가 [[아파치 HTTP 서버|Apache HTTPd]]를 코딩하다 Apache의 C10K 문제[* 10,000개 이상의 소켓을 열면, 하드웨어 성능이 충분함에도 불구하고 I/O 처리 방식의 문제 때문에 프로세스가 제대로 처리하지 못하는 것.]를 보고, 이를 해결하기 위해서 네이티브 Win32 환경에도 돌아갈 무설치 [[웹 서버]] 데몬 프로그램을 개발하기 시작하여 [[2004년]] [[10월 4일]]에 버전 0.1.0을 [[오픈 소스]]로 공개했다.[* [[https://nginx.org/en/CHANGES|NGINX 버전 역사]]] 2011년에는 이고르 시쇼브와 막심 코노발로프(Maxim Konovalov)가 공동으로 NGINX, Inc를 설립하여[* 개발은 러시아에서 하고 있었으나 NGINX, Inc는 글로벌 시장 공략을 위해 미국 샌프란시스코에 등록했다.] 기업시장 공략과 소프트웨어 지원을 강화했다. 2019년 3월에 미국의 F5 Inc가 NGINX, Inc를 6억 7천만 달러에 인수했다.[* [[https://www.nginx.com/blog/nginx-joins-f5/|미국 F5 Inc가 NGINX 인수]]. 인수회사 이름이 F5 Networks, Inc 였으나 2022년에 사명을 F5, Inc로 변경했다.] 2019년 12월에 모스크바의 NGINX 사무실이 압수수색을 당하는 일이 발생했다.[* [[https://www.zdnet.com/article/russian-police-raid-nginx-moscow-office/|NGINX 모스크바 사무실 압수수색]], ZDNet, 2019년 12월 17일.] 창립자 이고르 시쇼브가 NGINX 개발 초창기에 재직했던 Rambler[* Rambler는 러시아 인터넷 포털 회사이다. 한국으로 치면 카카오나 네이버와 같은 존재이다.]라는 회사가 NGINX에 대한 저작권을 주장하고 나섰기 때문이다. 회사 업무와는 무관하게 NGINX를 개발했으나[* [[https://habr.com/ru/company/xakep/blog/136354/|이고르 시쇼브 인터뷰]], 2012년. "회사 업무와는 무관하게 여가 시간에 개발했고, Rambler는 한동안 이 사실을 몰랐다."], Rambler는 임직원이 개발한 것이므로 자사에 저작권이 있다고 주장했다. 그 이후, Rambler의 소유주 Sberbank와 NGINX의 인수자 F5가 협상했으나 결과는 공개되지 않았다.[* 보통 이런 합의를 할때는 NDA(Non-disclosure agreement;비밀유지협약)를 맺는다.] 창립자 이고르 시쇼브는 2022년 1월에 NGINX와 F5를 떠나 은퇴했다.[* [[https://www.nginx.com/blog/do-svidaniya-igor-thank-you-for-nginx|NGINX 창립자 은퇴]], nginx.com, 2022년 1월 18일] 미국 F5가 인수한 이후에도 잔존했던 러시아 개발진을 주축으로 개발이 이어졌으나, [[우크라이나 전쟁]]을 계기로 러시아 보이콧 분위기 및 사이버 보안 우려가 커지자, 2022년 4월을 기점으로 완전히 탈[[러시아|로]]해서 러시아 사무실을 폐쇄하고 미국에서 개발 및 관리하는 것으로 개편되었다.[* [[https://support.f5.com/csp/article/K59427339|NGINX와 러시아의 단절]], F5 Inc 발표문, 2022년 4월 28일.] Apache HTTPd 보다 역사가 오래되지는 않았으나, Apache HTTPd가 많은 한계를 보이고 있는 상황에서, NGINX는 가볍고 높은 성능을 무기로 점유율을 빠르게 늘려나가 현재는 웹 서버 시장점유율 1위가 되었다. 2023년 7월 기준으로 [[웹 서버|웹 서버 소프트웨어]] 순위는 [[NGINX|엔진엑스]](34.3%), [[아파치 HTTP 서버]](31.4%), [[LiteSpeed]](12.2%), [[인터넷 정보 서비스|MS IIS]](5.4%) 순이다.[* [[https://w3techs.com/technologies/overview/web_server|세계 웹 서버 시장점유율, W3Tech]]] [[Cloudflare|클라우드플레어]]는 20.6%이지만 [[CDN]]에 사용되는 것이기 때문에 배후에 있는 실제 웹 서버는 NGINX, Apache, LiteSpeed인 경우가 대부분이다. 기존에 Apache HTTPd로 서비스 하는 곳들도 점차 NGINX로 갈아타는 추세이다. [[마이크로소프트]] 진영에서는 GUI 를 통해 관리할 수 있는 [[인터넷 정보 서비스|IIS]]를 사용하는 경우도 많지만, 도입 환경 및 연계될 시스템과의 문제라서 1:1 비교는 힘들며, [[마이크로소프트]] ASP.NET Core 버전에서는 리눅스를 지원하므로 리눅스에서 사용할 수 없는 IIS를 대신하여, ASP.NET에 내장된 Kestrel WAS와 연계하여 NGINX를 리버스 프록시 서버로 사용하는 케이스가 많다. == 라이선스 == NGINX의 라이선스는 [[BSD 라이선스|BSD 2-Clause 라이선스]]를 사용하는데, "Simplified BSD 라이선스" 또는 "FreeBSD 라이선스"라고 부르기도 한다. 즉, 원 저작자를 밝히고 원래 라이선스를 그대로 유지하는 조건만 갖추면, 자유롭게 수정 및 재배포가 가능하다. GPL과는 달리 수정된 소스를 공개하거나 소스코드를 제공해야 할 의무도 없는 더 자유로운 라이선스이다. NGINX Plus는 상용 라이선스이며 유료이다. 사용료는 Standard 기준으로 연간 $2,500~$3,500 정도하는 것으로 알려져 있다. == 기능 == NGINX는 [[HTTP]]와 [[HTTP/2]] 및 [[HTTP/3]]를 지원한다. 2023년 5월, 메인스트림[* NGINX에서는 개발버전을 mainstream, 안정화 버전을 stable이라고 부른다. 개발버전은 홀수, 안정화 버전은 짝수 번호이다다.]버전인 1.25.0 버전부터 HTTP/3를 공식 지원하기 시작했다[* [[https://quic.nginx.org/|NGINX의 HTTP/3 데모 사이트]]][* [[https://www.nginx.com/blog/binary-packages-for-preview-nginx-quic-http3-implementation/|HTTP/3용 NGINX의 바이너리 파일 설치 방법]]]. 구조적으로는 Apache HTTPd에서 사용하는 요청 당 스레드 혹은 프로세스 기반의 구조 대신, 비동기 이벤트 기반의 구조로 작동한다. 이로 인해서 서버 부하시 성능 예측이 쉽다. 덤으로 10,000개의 동시 접속을 하면, 그 10,000개에 드는 메모리 점유는 평균 2.5MB다. 리눅스 기반으로 구축하는 웹 서버의 경우, 기존의 LAMP([[Linux]] + [[아파치 HTTP 서버|Apache]] + [[MySQL]]/[[MariaDB]] + [[PHP]]/[[Python]]/[[Perl]])에서 Apache 대신 ('''E''')NGINX로 대체된 LEMP를 쓴다. NGINX는 여러 서드파티 기능[* [[TLS]], GeoIP 등]을 모듈로 쓰고 있으며, 그래서 필요하지 않을 경우 모듈을 제외해 놓을 수 있다, 단, 완성된 바이너리를 사용하지 않고 소스를 [[컴파일]]해서 사용할 때는, 사용할 모듈을 컴파일 할 당시에 추가하지 않으면 그 이후에 추가할 수는 없다. 아파치처럼 NGINX도 사용할 때 환경 설정을 바꾸고 나서 서버 데몬을 재시작할 필요 없이 reload 시그널을 보내면 된다. 즉, 프로세스를 재시작할 필요가 없다는 장점이 있다. 물론 Apache도 httpd 명령어에 graceful 기능이 있다. NGINX 유닛이라는 마이크로서비스용 앱 서버를 내놨는데, 정적인 설정 파일이 아니라서 설정을 고치는 중에도 서비스 운영에 방해가 없다고 한다. [[https://www.infoq.com/news/2018/05/nginx-unit-dynamic-web-server |NGINX Releases Open Source Web Server with Dynamic Configuration (May 04, 2018)]] == 적용 확인법 == 웹사이트가 어떤 [[웹 서버]] 프로그램을 사용하는지 확인하려면 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 오류가 뜬다. == 기타 == [[크래쉬 밴디쿳 시리즈]]에 등장하는 N자돌림 빌런들 간부중 [[닥터 엔진|N.Gin]]이 있으나 이것과는 무관하다. 아니, 이 캐릭터가 NGINX보다 훨씬 먼저 나왔다. [[분류:웹 서버 소프트웨어]][[분류:러시아의 발명품]][[분류:미국의 IT 관련 기업]]