Skip to main content

简介

info

Nginx联合创始人安德鲁·阿列克谢夫(Andrew Alexeev)曾说:Nginx是为对Apache性能不满意的人而构建的。随着Internet需求的变化,Web服务器的工作也在变化。Nginx的构建比以往任何时候都更有效率,更可扩展,更安全,更强大。

note
  • Nginx 使用基于事件驱动架构,使得其可以支持数以百万级别的 TCP 连接。
  • 高度的模块化和自由软件许可证使得第三方模块层出不穷(这是个开源的时代啊)。
  • Nginx 是一个跨平台服务器,可以运行在 Linux、Windows、FreeBSD、Solaris、AIX、Mac OS 等操作系统上。
  • 这些优秀的设计带来的极大的稳定性。

Nginx 基本概念

正向代理与反向代理

为了便于理解,首先先来了解一下一些基础知识,nginx是一个高性能的反向代理服务器那么什么是反向代理呢?

代理是在服务器和客户端之间假设的一层服务器,代理将接收客户端的请求并将它转发给服务器,然后将服务端的响应转发给客户端。

不管是正向代理还是反向代理,实现的都是上面的功能。

如果你对OSI 七层模型与 TCP/IP 四层模型不是很熟悉可以再回顾下

正向代理

正向代理(forward)意思是一个位于客户端和原始服务器 (origin server) 之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标 (原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。

正向代理是为我们服务的,即为客户端服务的,客户端可以根据正向代理访问到它本身无法访问到的服务器资源。

正向代理对我们是透明的,对服务端是非透明的,即服务端并不知道自己收到的是来自代理的访问还是来自真实客户端的访问。

反向代理

反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

反向代理是为服务端服务的,反向代理可以帮助服务器接收来自客户端的请求,帮助服务器做请求转发,负载均衡等。

反向代理对服务端是透明的,对我们是非透明的,即我们并不知道自己访问的是代理服务器,而服务器知道反向代理在为他服务。

为什么选择Nginx

Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。在Nginx网站上,其功能包括:

  • HTTP和HTTPS(TLS / SSL / SNI)
  • 超快速的Web服务器用于静态内容
  • FastCGI,WSGI,SCGI用于动态内容
  • 具有负载平衡和缓存功能的加速Web代理
  • 不间断实时二进制升级和配置
  • 压缩和内容过滤器
  • 虚拟主机
  • FLV和MP4的媒体流
  • 带宽和连接策略
  • 全面的访问控制
  • 自定义日志
  • 嵌入式脚本
  • 带有TLS的SMTP / IMAP / POP3的邮件代理
  • 逻辑,灵活,可扩展的配置
  • 在Linux,FreeBSD,Mac OS X,Solaris和Windows上运行

Nginx有如下优势:

IO多路复用epoll(IO复用)

如何理解呢?举个例子吧!

有A、B、C三个老师,他们都遇到一个难题,要帮助一个班级的学生解决课堂作业。老师A采用从第一排开始一个学生一个学生轮流解答的方式去回答问题,老师A浪费了很多时间,并且有的学生作业还没有完成呢,老师就来了,反反复复效率极慢。老师B是一个忍者,他发现老师A的方法行不通,于是他使用了影分身术,分身出好几个自己同一时间去帮好几个同学回答问题,最后还没回答完,老师B消耗光了能量累倒了。

老师C比较精明,他告诉学生,谁完成了作业举手,有举手的同学他才去指导问题,他让学生主动发声,分开了“并发”。

这个老师C就是Nginx。

轻量级

  • 功能模块少 - Nginx仅保留了HTTP需要的模块,其他都用插件的方式,后天添加
  • 代码模块化 - 更适合二次开发,如阿里巴巴Tengine

CPU亲和

把CPU核心和Nginx工作进程绑定,把每个worker进程固定在一个CPU上执行,减少切换CPU的cache miss,从而提高性能。