Nginx介绍

date: 2017.02.16; modification:2017.05.17

目录:

1 Nginx 介绍

1.1 Nginx 是什么

Nginx(发音同engine x)是一个网页服务器, 并且它能反向代理HTTP, HTTPS, SMTP, POP3, IMAP的协议链接, 以及一个负载均衡器和一个HTTP缓存.

起初是供俄国大型的门户网站及搜索引擎Rambler(俄语: Рамблер)使用.此软件BSD-like 协议下发行, 可以在UNIX, GNU/Linux, BSD, Mac OS X, Solaris,以及Microsoft Windows等操作系统中运行.

特点:

Nginx是一款面向性能设计的HTTP服务器, 相较于Apache, lighttpd具有占有内存少,稳定 性高等优势. 与旧版本(<=2.2)的Apache不同, nginx不采用每客户机一线程的设计模型, 而是充分使用异步逻辑,削减了上下文调度开销, 所以并发服务能力更强.整体采用模块 化设计, 有丰富的模块库和第三方模块库, 配置灵活.在Linux操作系统下, nginx使用 epoll事件模型, 得益于此, nginx在Linux操作系统下效率相当高.

同时Nginx在OpenBSD或FreeBSD操作系统上采用类似于epoll的高效事件模型kqueue.

整体采用模块化设计是nginx的一个重大特点, 甚至http服务器核心功能也是一个模块. 旧版本的nginx的模块是静态的, 添加和删除模块都要对nginx进行重新编译, 1.9.11以及更新的版本已经支持动态模块加载.

1.2 历史背景

Apache不再适用?

Apache web服务器软件发源于20世纪90年代, 目前仍在互联网网站上占据大部分. Apache的架构适合当时的操作系统和硬件, 并且也符合当时的互联网状况: 一个网站通常使用一台物理服务器运行一个Apache实例. 2000年之后, 显然这种单服务器模型已经无法通过简单复制来满足日益增长的web服务需求. 虽然Apache为后续的开发提供了坚实的基础, 但他为每个新连接派生一个进程的做法并不适合网站的非线性扩展. 最终, Apache成为一个注重于功能多样化, 丰富的第三方扩展, 以及适用于各种web应用开发的通用web服务器软件. 然而, 当硬件成本越来越低, 每个连接消耗的CPU和内存越来越多, 使用这样功能繁多的单一软件不再具有可伸缩性.

因而, 当服务器硬件, 操作系统和网络设施不再成为网站增长的主要限制因素时, 世界范围内的网站开发者开始寻求更高效的手段来架设web服务器. 大约十年前, 著名软件工程师Daniel Kegel提出: "是时候让web服务器支持同时处理10000用户了", 并且预言了现在被称为云服务的技术. Kegel的C10K设想明显推动了许多人尝试解决这个问题 --通过优化web服务器来支持大规模客户端连接的并发处理, Nginx是其中做的最成功的一个.

为了解决10000个并发连接的C10K问题, Nginx基于一个完全不同的架构—更适合于同时连 接数和每秒请求数非线性增长. Nginx基于事件模型, 而没有模仿Apache为每个请求派生 新进程或线程的做法. 最终结果就是即使负载增加了, 内存和CPU使用率始终保持可控制 的. 现在Nginx使用普通的硬件就能在一个服务器上处理成千上万的并发连接.

Nginx的第一个版本发布之后, 一般被用来同Apache一同部署, Nginx处理用来处理HTML, CSS, JavaScript脚本和图片等静态内容, 以此来降低基于Apache的应用服务器的并 发和延时. 随着开发的进程, 通过支持FastCGI, uswge和SCGI等协议, 以及分布式内 存对象缓存系统如memcached, Nginx也集成了其它应用. Nginx也增加了其他有用的 功能, 例如支持负载均衡和缓存的反向代理. 这些附加功能使Nginx成为一个用于构 建可伸缩的web基础设施的高效工具集.

在2012年2月, Apache 2.4.x版本发布. 虽然这个最新的版本增加了用于加强可伸缩性和 性能的并发处理核心模块和代理模块. 但要说性能, 并发能力和资源利用率是否能赶上或 超过纯事件驱动模型的web服务器还为时尚早. Apache新版本具有了更好的性能值得高兴, 这也许能减轻仍未解决的典型Nginx+Apache架构后端的瓶颈.

使用Nginx有更多的优点吗?

部署Nginx最关键的好处就是能够高性能高效的处理高并发. 然而, 现在还有更多有意思 的好处.

最近几年, web架构师开始接受将应用层设施从web服务器中分离的解耦和理念. 然而, 这 并不仅仅是将原先基于LAMP(Linux, Apache, MySQL, PHP, Python or Perl)所构建的网 站, 变为基于LEMP(E表示Engine x)的. 而是将web服务器推入基础设施的边缘, 并且用不 同的方法整合相同或更新的应用和数据库工具集的实践.

Nginx很适合做这些工作. 他提供了必要的关键功能用于方便将下列功能从应用层剥离到 更高效的边缘web服务器层: 并发, 长连接处理, SSL(安全套接字层), 静态内容, 压缩和 缓存, 连接和请求限速, 以及HTTP媒体流等. 为了增强处理大规模并发用户的性能, Nginx也允许直接整合memcached, Redis或者其他的NoSQL解决方案.

随着开发包和现代编程语言的广泛使用, 越来越多的公司改变了他们应用开发和部署的方 式. Nginx已经成为这些改变范例之中的最重要的部件之一, 并且已经帮助许多公司在预 算内快速启动和开发他们的web服务.

Nginx开发始于2002年, 2004年基于2-clause BSD授权正式对外发布. 自发布起, Nginx用 户就在不断增长, 并且贡献提议, 提交bug报告, 建议和评测报告都极大的帮助和促进了 整个社区的发展.

Nginx代码完全用C语言从头写成, 已经移植到许多体系结构和操作系统, 包括: Linux, FreeBSD, Solaris, Mac OS X, AIX以及Microsoft Windows. Nginx有自己的函数库, 并且除了zlib, PCRE和OpenSSL之外, 标准模块只使用系统C库函数. 而且, 如果不需 要或者考虑到潜在的授权冲突, 在构建时可以不使用这些第三方库.

谈谈关于Windows版本Nginx. 当nignx在Windows环境下工作时, Windows版本的Nginx更像 是概念验证版本, 而不是全功能移植. 这是由于目前Nginx和Windows内核架构之间交互的 某些限制导致. Windows版本ngnix已知的问题包括: 低并发连接数, 性能降低, 不支持缓 存和带宽策略. 未来Windows版本的Nginx的功能会更接近主流版本.

1.3 特新列表(Features list)

From: https://nginx.org/en/ on (2017.02.16)

Basic HTTP server features

Other HTTP server features

Mail proxy server features

TCP/UDP proxy server features

Architecture and scalability

Tested OS and platforms

nginx 与 nginx plus对比

https://www.nginx.com/products/feature-matrix/