Nginx 是免费的开源软件,根据类 BSD 许可证的条款发布。
Nginx 是异步框架的网页服务器,也可以用作反向代理、负载平衡器和 HTTP 缓存。大部分 Web 服务器使用 Nginx,通常作为负载均衡器。Nginx 是免费的开源软件,根据类 BSD 许可证的条款发布。
Nginx 软件由伊戈尔·赛索耶夫创建并于 2004 年首次公开发布。 2011 年成立同名公司以提供支持。2019 年 3 月 11 日,Nginx 公司被 F5 Networks 以 6.7 亿美元收购。
Nginx 特点
Nginx 可以部署在网络上使用 FastCGI 脚本、SCGI 处理程序、WSGI 应用服务器或 Phusion Passenger 模块的动态 HTTP 内容,并可作为软件负载均衡器。
Nginx 使用异步事件驱动的方法来处理请求。Nginx 的模块化事件驱动架构可以在高负载下提供更可预测的性能。
Nginx 是一款面向性能设计的 HTTP 服务器,相较于 Apache、lighttpd 具有占有内存少,稳定性高等优势。与旧版本(<=2.2)的 Apache 不同,Nginx 不采用每客户机一线程的设计模型,而是充分使用异步逻辑从而削减了上下文调度开销,所以并发服务能力更强。整体采用模块化设计,有丰富的模块库和第三方模块库,配置灵活。 在 Linux 操作系统下,Nginx 使用 epoll 事件模型,得益于此,Nginx 在 Linux 操作系统下效率相当高。同时 Nginx 在 OpenBSD 或 FreeBSD 操作系统上采用类似于 epoll 的高效事件模型 kqueue。
根据 Netcraft 在 2016 年 11 月网络服务器调查, Nginx 被发现是所有“活跃”站点(被调查站点的 18.22%)和百万最繁忙站点(被调查站点的 27.83%)中使用次数最多的 Web 服务器。根据 W3Techs 的数据,前 100 万个网站中的 37.7%,前 10 万个网站中的 49.7%,以及前 10000 个网站中的 57.0%被使用。 据 BuiltWith 统计,在全球前 10000 个网站中,有 38.2%的网站使用 Nginx。 维基百科使用 Nginx 作为其 SSL 终端代理。 从 OpenBSD 5.2 版本(2012 年 11 月 1 日)开始,Nginx 成为了 OpenBSD 基础系统的一部分,提供了替代 Apache 1.3 系统的替代方案, 但是后来被替换为 OpenBSD 自己的 httpd(8)。
可大量并行处理
Nginx 在官方测试的结果中,能够支持五万个并行连接,而在实际的运作中,可以支持二万至四万个并行连接。
Nginx 与 Apache 相比
Nginx 的编写有一个明确目标就是超越 Apache Web 服务器的性能。 Nginx 提供开箱即用的静态文件,使用的内存比 Apache 少得多,每秒可以处理大约四倍于 Apache 的请求。 低并发下性能与 Apache 相当,有时候还低于,但是在高并发下 Nginx 能保持低资源低消耗高性能。还有高度模块化的设计,模块编写简单。配置文件简洁。
这种性能提升的代价是降低了灵活性,例如能够以每个文件为基础覆盖系统范围的访问设置( Apache 使用.htaccess 文件来完成这个工作,而 Nginx 并没有内置这样的功能)。 以前,向 Nginx 添加第三方模块需要使用静态链接的模块从源代码重新编译应用程序。在版本 1.9.11 中部分地克服了这一点,增加了动态模块加载。但是,模块仍然必须与 Nginx 同时编译,而不是所有的模块都与这个系统兼容——有些需要更老的静态链接过程。
Nginx 模块
整体采用模块化设计是 Nginx 的一个重大特点,甚至 http 服务器核心功能也是一个模块。旧版本的 Nginx 的模块是静态的,添加和删除模块都要对 Nginx 进行重新编译,1.9.11 以及更新的版本已经支持动态模块加载。
数据统计
截至 2017 年 3 月,中国注册域名总数的 9.65%使用 Nginx。
截至 2018 年 1 月,Nginx 服务或者代理了全球 30.46% 的网站。
PHP 集成
自 PHP-5.3.3 起,PHP-FPM 加入到了 PHP 核心,编译时加上–enable-fpm 即可提供支持。PHP-FPM 以守护进程在后台运行,Nginx 响应请求后,自行处理静态请求,PHP 请求则经过 fastcgi_pass 交由 PHP-FPM 处理,处理完毕后返回。Nginx 和 PHP-FPM 的组合,是一种稳定、高效的 PHP 运行方式,效率要比传统的 Apache 和 mod_php 高出不少。
PHP-FPM 不支持 Windows 平台,由于没有 fastcgi 进程管理器管理 php-cgi.exe,因此一旦 php-cgi.exe 崩溃退出,前端将失去响应,这时 Nginx 会返回“The page you are looking for is temporarily unavailable. Please try again later.”的错误信息。因此在 Windows 上用 Nginx 和 php-cgi.exe 组合来运行 PHP 的方式并不可靠,稳定性有待提高。