目录
- 1. 介绍
- 1.1 常见服务器的对比
- 1)IIS
- 2)Tomcat
- 3)Apache
- 4)Lighttpd
- 1.2 Nginx的优点
- (1) 速度更快、并发更高
- (2) 配置简单、扩展性强
- (3) 高可靠性
- (4) 热部署
- (5) 成本低、BSD许可证
- 2. Nginx常用功能
- 2.1 基本HTTP服务
- 2.2 高级HTTP服务
- 2.3 邮件服务
- 3. 反向代理
- 3.1 正向代理
- 3.2 反向代理
- 4. Nginx常用功能模块
- 4.1 Nginx 四大核心功能:
- 4.2 Nginx核心组成
1. 介绍
- Nginx (“engine x”) 是一个具有高性能的【HTTP】和【反向代理】的【WEB服务器】,同时也是一个【POP3/SMTP/IMAP代理服务器】,是由伊戈尔·赛索耶夫 (俄罗斯人) 使用 C 语言编写的。Nginx 的第一个版本是 2004年10月4号 发布的 0.1.0 版本。另外值得一提的是,伊戈尔·赛索耶夫将 Nginx 的源码进行了开源,这也为 Nginx 的发展提供了良好的保障。
- Nginx 官网:https://nginx.org
1.1 常见服务器的对比
-
打开 Nginx 的官网,点击右边栏中的【about】。
-
可以看到一段话,根据 Netcraft 公司的调研,Nginx 实时的全球服务器市场占比份额,笔者写本文时是 2022 年 11 月,可以看到 Nginx 占全球服务器市场的 21.21% ,将近五分之一的市场,可以说是非常牛逼了。
-
我们可以点进这个超链接,进入 [Netcraft 官网](November 2022 Web Server Survey | Netcraft News),可以看到最新的全球服务器占比图。可以看到,Nginx 自 2010 开始就发展非常迅猛。
1)IIS
- 全称 (Internet Information Services) 即互联网信息服务,是由微软公司提供的基于 Windows 系统的互联网基本服务。Windows 作为服务器在稳定性与其他一些性能上都不如类 UNIX 操作系统,因此在需要高性能 Web 服务器的场合下,IIS 可能就会被"冷落"。
2)Tomcat
- Tomcat 是一个运行 Servlet 和 JSP 的 Web 应用软件,Tomcat 技术先进、性能稳定而且开放源代码,因此深受 Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的 Web 应用服务器。但是 Tomcat 天生是一个重量级的 Web 服务器,对静态文件和高并发的处理比较弱。
- 一台空载的 Tomcat 服务器,其并发访问量最高在 200~300 左右。而一台 Nginx 服务器可以达到 5 万~6 万 次/秒的并发访问量。
3)Apache
- Apache 的发展时期很长,同时也有过一段辉煌的业绩。从上图可以看出大概在 2014 年以前都是市场份额第一的服务器。Apache 有很多优点,如稳定、开源、跨平台等。但是它出现的时间太久了,在它兴起的年代,互联网的产业规模远远不如今天,所以它被设计成一个重量级的、不支持高并发的Web服务器。在 Apache 服务器上,如果有数以万计的并发 HTTP 请求同时访问,就会导致服务器上消耗大量内存,操作系统内核对成百上千的 Apache 进程做进程间切换也会消耗大量的 CUP 资源,并导致 HTTP 请求的平均响应速度降低,这些都决定了 Apache 不可能成为高性能的 Web 服务器。这也促使了 Lighttpd 和 Nginx 的出现。
4)Lighttpd
-
Lighttpd 是德国的一个开源的 Web 服务器软件,它和 Nginx 一样,都是轻量级、高性能的 Web 服务器,欧美的业界开发者比较钟爱 Lighttpd ,而国内的公司更多的青睐 Nginx ,同时网上 Nginx 的资源要更丰富些。
-
经过各个服务器的对比,种种迹象都表明,Nginx 将以性能为王。这也是我们为什么选择 Nginx 的理由。
1.2 Nginx的优点
(1) 速度更快、并发更高
- 单次请求或者高并发请求的环境下,Nginx 都会比其他 Web 服务器响应的速度更快。一方面在正常情况下,单次请求会得到更快的响应,另一方面,在高峰期 (如有数以万计的并发请求),Nginx 比其他 Web 服务器更快的响应请求。Nginx 之所以有这么高的并发处理能力和这么好的性能,是因为 Nginx 采用了多进程和 I/O 多路复用 (epoll) 的底层实现。
(2) 配置简单、扩展性强
- Nginx 的设计极具扩展性,它本身就是由很多模块组成,这些模块的使用可以通过配置文件的配置来添加。这些模块有官方提供的也有第三方提供的模块,如果需要完全可以开发服务自己业务特性的定制模块。
(3) 高可靠性
- Nginx 采用的是多进程模式运行,其中有一个 master 主进程和 N 多个 worker 进程。master 进程负责管理 worker 进程。worker 进程的数量我们可以手动设置,每个 worker 进程之间都是相互独立提供服务,并且 master 主进程可以在某一个 worker 进程出错时,快速去"拉起"新的 worker 进程提供服务。
(4) 热部署
- 现在互联网项目都要求以 7×24 小时地进行服务的提供,针对于这一要求,Nginx 也提供了热部署功能,即可以在 Nginx 不停止的情况下,对Nginx 进行文件升级、更新配置和更换日志文件等功能。
(5) 成本低、BSD许可证
-
BSD 是一个开源的许可证,世界上的开源许可证有很多,现在比较流行的有六种分别是GPL、BSD、MIT、Mozilla、Apache、LGPL。这六种的区别是什么,我们可以通过下面一张图来解释下:
-
Nginx 本身是开源的,我们不仅可以免费的将 Nginx 应用在商业领域,而且还可以在项目中直接修改 Nginx 的源码来定制自己的特殊要求。这些点也都是 Nginx 为什么能吸引无数开发者继续为 Nginx 来贡献自己的智慧和青春。比如 OpenRestry 这款产品就是 Nginx + Lua ;淘宝在 Nginx 的基础上进行二次开发的产品 Tengine 。
2. Nginx常用功能
- Nginx 提供的基本功能服务从大体上归纳为"基本HTTP服务"、“高级HTTP服务”和"邮件服务"等三大类。
2.1 基本HTTP服务
Nginx 可以提供基本 HTTP 服务,可以作为 HTTP 代理服务器和反向代理服务器,支持通过缓存加速访问,可以完成简单的负载均衡和容错,支持包过滤功能,支持 SSL 等。
- 处理静态文件、处理索引文件以及支持自动索引;
- 提供反向代理服务器,并可以使用缓存加上反向代理,同时完成负载均衡和容错;
- 提供对 FastCGI 、memcached 等服务的缓存机制,同时完成负载均衡和容错;
- 使用 Nginx 的模块化特性提供过滤器功能。Nginx 基本过滤器包括 gzip 压缩、ranges 支持、chunked 响应、XSLT、SSI 以及图像缩放等。其中针对包含多个 SSI 的页面,经由 FastCGI 或反向代理,SSI 过滤器可以并行处理。
- 支持 HTTP 下的安全套接层安全协议 SSL 。
- 支持基于加权和依赖的优先权的 HTTP/2 。
2.2 高级HTTP服务
- 支持基于名字和 IP 的虚拟主机设置。
- 支持 HTTP/1.0 中的 KEEP-Alive 模式和管线 (PipeLined) 模型连接。
- 自定义访问日志格式、带缓存的日志写操作以及快速日志轮转。
- 提供 3xx~5xx 错误代码重定向功能。
- 支持重写 (Rewrite) 模块扩展。
- 支持重新加载配置以及在线升级时无需中断正在处理的请求。
- 支持网络监控。
- 支持 FLV 和 MP4 流媒体传输。
2.3 邮件服务
Nginx 提供邮件代理服务也是其基本开发需求之一,主要包含以下特性:
- 支持 IMPA/POP3 代理服务功能。
- 支持内部 SMTP 代理服务功能。
Nginx支持电子邮件协议:
- POP3 :Post Office Protocol 3 。邮局协议的第三个版本。
- SMTP:Simple Mail Transfer Protocol 。简单邮件传输协议。
- IMAP:Internet Mail Access Protocol 。交互式邮件存取协议。
3. 反向代理
- 反向代理是 Nginx 的三大核心功能之一。为了更好地理解反向代理,先来介绍一下正向代理。
3.1 正向代理
- 在没有代理时,客户端和服务端都是直接通信 (下图三角形的底边) 。
- 而正向代理就是在客户端和服务端之间添加了一个代理。客户端发送请求时,不再直接发送到服务端,而是先发送到代理 Proxy ,经过代理 Proxy 再将请求发送到代理认为合适的服务端去处理。
- 服务端响应时,响应的数据不是直接返回给客户端,也是先返回给代理,再由代理返回给客户端。
- 代理 Proxy 就相当于客户端和服务端之间的中间人。我们常用的翻墙就是基于这种模式。
3.2 反向代理
- 反向代理可以接收客户端的请求,把客户端的请求分发给多个不同的服务端,降低单个服务端的压力。
- 可以将服务端隐藏起来,增强了服务端安全性。
- 【正向】一词的理解,就是正向代理是为客户端而服务的;而【反向】就相反,反向代理是为服务端服务的。
4. Nginx常用功能模块
4.1 Nginx 四大核心功能:
- 静态资源部署 (前端页面);
- Rewrite 地址重写;
- 反向代理;
- 负载均衡;
4.2 Nginx核心组成
nginx
二进制可执行文件nginx.conf
配置文件error.log
错误的日志记录access.log
访问日志记录