Nginx是什么?
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上Nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用Nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx能做什么?
- 基本HTTP服务:Nginx可以提供基本HTTP服务,可以作为HTTP代理服务器和反向代理服 务器,支持通过缓存加速访问,可以完成简单的负载均衡和容错,支持 包过滤功能,支持SSL等。
- 邮件服务:Nginx提供邮件代理服务也是其基本开发需求之一,主要包含以下特 性, 支持IMPA/POP3代理服务功能 和 支持内部SMTP代理服务功能。
- 反向代理:作为web服务器最常用的功能之一,尤其是反向代理
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。
反向代理隐藏了真实的服务器,当我们请求www.baidu.com的时候,背后有成千上万台服务器为我们服务,但请求具体到那一台服务器,我们不知道,也不需要知道,我们只需要知道反向代理服务是谁就好了,www.baidu.com就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器,Nginx就是反向代理服务器,用来做负载均衡。
反向代理
- 需要有一个负载均衡设备来分发用户请求,将用户请求分发到真实的服务器上
- 真实服务器返回自己的服务到负载均衡设备
- 负载均衡将真实服务器的服务返回用户
用户和负载均衡设备直接通信,也意味着用户做服务器域名解析时,解析得到的IP其实是负载均衡的IP,而不是真实服务器的IP,这样有一个好处是,当新加入/移走服务器时,仅仅需要修改负载均衡的服务器列表,而不会影响现有的服务。 - 负载均衡
Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Ip hash。Nginx负载均衡配置请参考Nginx架构二之实战
正向代理
- 正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。
正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性(由mod_cache提供)减少网络使用率。
和反向代理不同之处在于,典型的正向代理是一种最终用户知道并主动使用的代理方
比如当我们请求www.google.com时,会被拒绝掉。我们可以找一台国外的代理服务器,让这台代理服务器帮我们去请求www.google.com,然后代理服务器在把响应的结果返回给我们。
正向代理
1)用户希望代理服务器帮助自己,和要访问服务器通信,为了实现此目标,需要以下工作:
a) 用户IP报文的目的IP = 代理服务器IP
b) 用户报文端口号 = 代理服务器监听端口号
c) HTTP 消息里的URL要提供服务器的链接
2)代理服务器可以根据c)里的链接与服务器直接通信
3)服务器返回网页
4)代理服务器打包3)中的网页,返回用户。
两者的区别在于:正向代理代理的对象是客户端,反向代理代理的对象是服务端。
Nginx的优点
速度更快、并发更高
单次请求或者高并发请求的环境下,Nginx都会比其他Web服务器响应 的速度更快。一方面在正常情况下,单次请求会得到更快的响应,另一 方面,在高峰期(如有数以万计的并发请求),Nginx比其他Web服务器更 快的响应请求。Nginx之所以有这么高的并发处理能力和这么好的性能 原因在于Nginx采用了多进程和I/O多路复用(epoll)的底层实现。
epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。epoll除了提供select/poll那种IO事件的水平触发(Level Triggered)外,还提供了边缘触发(Edge Triggered),这就使得用户空间程序有可能缓存IO状态,减少epoll_wait/epoll_pwait的调用,提高应用程序效率。
linux2.6及以上内核才 支持epoll,我们可以使用uname -a命令来查询linux的内核版本
yangyanping@ZBMac-WP2HJYDWY conf % uname -a
Darwin ZBMac-WP2HJYDWY 21.2.0 Darwin Kernel Version 21.2.0: Sun Nov 28 20:28:41 PST 2021; root:xnu-8019.61.5~1/RELEASE_ARM64_T6000 arm64
yangyanping@ZBMac-WP2HJYDWY conf %
配置简单,扩展性强
Nginx的设计极具扩展性,它本身就是由很多模块组成,这些模块的使 用可以通过配置文件的配置来添加。这些模块有官方提供的也有第三方 提供的模块,如果需要完全可以开发服务自己业务特性的定制模块。
高可靠性
Nginx采用的是多进程模式运行,其中有一个master主进程和N多个 worker进程,worker进程的数量我们可以手动设置,每个worker进程 之间都是相互独立提供服务,并且master主进程可以在某一个worker进 程出错时,快速去"拉起"新的worker进程提供服务。
热部署
现在互联网项目都要求以7*24小时进行服务的提供,针对于这一要求, Nginx也提供了热部署功能,即可以在Nginx不停止的情况下,对Nginx 进行文件升级、更新配置和更换日志文件等功能。
Nginx的核心
名称 | 作用 |
---|---|
nginx | 二进制可执行文件 |
/conf/nginx.conf | 配置文件 |
error.log | 错误的日志记录 |
access.log | 访问日志记录 |