nginx简介

 nginx

 

1.      它是什么

Nginx是一款高性能的Web服务器软件,主要用于提供网上信息浏览服务,为高并发网站的应用场景而设计,可以在Linux、macOS和Windows等操作系统中运行,它的优点包括性能高、稳定性好、结构模块化、配置简单以及资源消耗非常低等。拥有HTTPS访问、gzip压缩、虚拟主机和URL重写等功能,不但可以搭配FastCGI程序处理动态请求,还可以用于代理、反向代理、负载均衡和缓存服务器等功能。

 

2.      功能

2.1.    进程和访问控制

Nginx由一个主进程和多个工作进程组成,主进程接收客户端请求,再转交给工作进程处理,从而很好地利用多核心CPU的计算能力。

 

从上图中可以很明显地看到,4个worker进程的父进程都是master进程,worker进程都是从父进程fork出来的,父进程为daemon进程。

在nginx多进程中,每个worker都是平等的,因此每个进程处理外部请求的机会权重都是一致的。

Master进程负责读取并验证配置文件nginx.conf;管理worker进程;

Worker进程职责:

每一个Worker进程都维护一个线程(避免线程切换),处理连接和请求;注意Worker进程的个数由配置文件决定,一般和CPU个数相关(有利于进程切换),配置几个就有几个Worker进程。

 

2.2.    日志记录

Nginx提供了非常灵活的日志记录功能,它可以使每个模块拥有独立的日志进行记录,并且根据记录内容的不同又分为访问日志和错误日志。

(1)访问日志用于记录客户端访问Nginx的每一个请求。记录用户的IP、访问时间、请求方式、响应状态、地域来源、跳转来源、使用终端等信息。

(2)错误日志记录在访问Nginx时出错的记录,可以查看某个服务的性能瓶颈。

2.3.    虚拟主机技术

虚拟主机技术是指一台物理主机服务器上划分出多个磁盘空间,每个磁盘空间都是一台虚拟主机,每台虚拟主机都可以独立对外提供Web服务,且互不干扰。

利用虚拟主机可把多个不同域名的网站部署在同一台服务器上,而不必再为建立一个网站单独购买一台服务器,既解决了维护难题,又节省了硬件成本。

 

 

3.      模块配置应用

Nginx的高度模块化设计,使得每个模块的功能相对简单,便于实现功能的扩展性。

3.1.    模块化结构设计

模块化结构设计就是以功能块为单位进行程序设计,实现其求解算法的一种方法。模块化结构设计的目的是为了降低程序复杂度,使程序设计、调试和维护等操作简单化,方便团队协作以及应用的扩展升级。

Nginx分为5大模块:核心模块、标准HTTP模块、可选HTTP模块、邮件服务模块和第三方模块。

3.2.    gzip

gzip(GNU-ZIP)是一种压缩技术,经过gzip压缩后,页面大小可以变为原来的30%甚至更小。gzip网页压缩的实现需要浏览器和服务器的支持。P195

 

gzip的压缩过程:首先在服务器端压缩,然后传到浏览器端后解压。当浏览器支持gzip解压时,会在请求消息头中包含Accpet-Encoding:gzip,这样Nginx就会向浏览器发送经过gzip后的内容,同时在响应消息头中加入Content-Encoding:gzip,声明这是gzip后的内容,告知浏览器要先解压后才能解析输出。

 

3.3.    负载均衡

Nginx支持的负载均衡调度算法方式如下:

weight轮询(默认,常用):接收到的请求按照权重分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,Nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。

ip_hash(常用):每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。

fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是Nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块。

url_hash:按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在Nginx作为静态服务器的情况下提高缓存效率。同样要注意Nginx默认不支持这种调度算法,要使用的话需要安装Nginx的hash软件包。

 

4.      总结

简单点描述就是复用及解耦,如果每次访问都需要提供不同的处理并得出不同的结果,中间层的意义会大为减少,但实际中用户所访问的资源在大多数情况下是比较集中的,这时,中间层就会非常有用了。

当然,增加一层屏蔽层对安全和负载均衡也是非常有好处的。

 

转载于:https://www.cnblogs.com/wodeboke-y/p/11348592.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值