Nginx
1.简介:
Nginx是一款轻量级的Web服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。
2.反向代理
(1)正向代理:例如,通过代理服务器(VPN等)访问谷歌等网站,即需要提前配置第三方代理代理服务器进行访问,而非直接访问称为正向代理。
如图,客户端提前配置代理服务器,请求代理服务器,然后代理服务器请求目标服务器获取响应,然后代理服务器将响应返回给客户端。
(2)反向代理:客户端对代理无感知,因为客户端无需配置,只需要将请求发送到反向代理服务器,由反向代理服务器请求目标服务器获取响应后返回客户端即可,此时反向代理服务器和目标服务器对外就是一个服务器,暴漏的是代理服务器地址,而非真实服务器地址。
如图,此时的www.baidu.com就是一个反向代理服务器,客户端请求www.baidu.com后,反向代理服务器将其转发给其他服务器,然后获取响应转发给客户端。
3.负载均衡
传统方式:客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕后,再将结果返回给客户端。
这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是比较适合的,成本也低。但是随着信息数量的不断增长,访问量和数据量的飞速增长,以及系统业务的复杂度增加,这种架构会造成服务器相应客户端的请求日益缓慢,并发量特别大的时候,还容易造成服务器直接崩溃。很明显这是由于服务器性能的瓶颈造成的问题。
负载均衡实现:即将原本单点处理的模式,改成多个服务器,通过请求类型转发请求到不同的服务器,然后将所有请求平均的分配到每台服务器中实现负载均衡。
4.动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
5.Nginx安装
安装:
(1)从官网下载nginx压缩包。
(2)下载并安装依赖:pcre、openssl、zlib。使用wget命令下载依赖,解压后执行文件目录下可执行文件configure。然后执行make && make install。
(3)解压nginx压缩包,解压后执行文件目录下可执行文件configure。然后执行make && make install。
(4)启动nginx,在/usr/local/nginx/sbin目录下执行nginx脚本启动。
常用命令:
(1)nginx -v:查看版本号(可用于查看是否安装成功)
(2)nginx -s stop:关闭nginx服务。
(3)nginx:启动nginx服务
(4)nginx -s reload:重新加载nginx(更新配置文件)
6.Nginx配置:
文件目录:ubuntu下位于/etc/nginx/目录下(nginx.conf)。
配置文件组成:
(1)全局块:
从配置文件开始到events块之间的内容,主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配置运待Nginx服务器的用户(组)、允许生成的worker process数,进程PID存放路径、日志存放路径和类型以及配置文件的引入等。
(2)events块:
events块涉及的指令主要影响 Nginx服务器与用户的网络连接,常用的设置包括是否开启对多 work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word rocess可以同时支持的最大连接数等。这部分的配置对Nginx的性能影响较大,在实际中应该灵活配置。
(3)http块:
这算是Nginx服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。需要注意的是:http块也可以包括http全局块、server块。
Http全局块:http全局块配置的指令包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等。
Server块:这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完金一样的,该技术的产生是为了节省互联网服务器硬件成本。每个http块可以包括多个server块,而每个server 块就相当于一个虚拟主机。而每个server块也分为全局server块,以及可以同时包含多个locaton块。
全局Server块:最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。
Location块:一个server 块可以配置多个location块。这块的主要作用是基于Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是IP别名)之外的字符串(例如前面的/uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
7.Location匹配原则
关于这部分,推荐博文:https://www.cnblogs.com/zhaof/p/5945576.html?utm_source=itdadao&utm_medium=referral。翻译的很不错,基本上说明了。
自己总结下:
(1)Location块声明时可以使用普通字符前缀或者正则表达字符前缀进行匹配。
(2)普通字符前缀前可以加等于号,进行精确匹配。(例:location = /page.html 表示精确匹配page,当一个页面使用特别频繁时使用,可以加快访问速度)精确匹配完成后就会停止匹配。
(3)普通匹配可以匹配到多个结果,所以先进行普通匹配,一旦匹配到并不会立即停止,会继续匹配,然后进行正则匹配,若正则匹配到则立即停止,不会进行其他匹配,而是直接使用该结果。若正则匹配不到,则使用普通匹配程度最高的那个结果。
(4)普通uri匹配是没有顺序的,而正则uri匹配是有顺序的,从上至下,直至匹配到结果或全部匹配结束。
(5)location后加 ~ 号表示uri中含有正则,并区分大小写,~*表示包含正则但不不区分大小写,^~”表示在普通uri前要求Nginx服务器找到普通uri匹配度最高的那个location后,立即处理此请求,并不再进行正则匹配。
(6)location的执行逻辑和location的编辑顺序无关。
8.负载均衡实现
负载均衡实现的是将请求均匀的分配到多个服务器上进行请求处理,减小单台服务器的压力。
配置:
(1)在http全局块下配置upstream。(相当于一个均衡负载规则,通过该规则转发给配置的服务器)。
http { # 这里配置多个服务器地址,负载均衡 upstream api { server localhost:8666; server localhost:8667; } server { listen 7004; server_name localhost; location / { #负载均衡规则转发 proxy_pass http://api; } }
(2)负载均衡的多种方式。
a.轮询(默认),按请求时间顺序分发到不互通服务器上。如果服务器宕机,则自动剔除。
b.权重(weight),根据权重大小分配请求(默认为1),服务器权重越大,表示可处理的请求越多,接受的请求也越多,用于后端服务器性能不均的情况。使用,在对应服务器后加:weight = 权重值;
c.ip_hash,每个请求按访问的ip的hash结果分配。这样每个访客将固定的访问固定的后端服务器,解决了session问题。在规则下加ip_hash;然后添加服务器地址。
d.fair按后端服务器的响应时间分配,优先最短响应时间分配。在服务器地址后添加fair。
注意:每一行均以;结尾。
9.动静分离。
配置:
两个location表示存放静态资源目录。其中root表示目录的父目录。
10.高可用集群的搭建
原因:单个nginx服务器可能宕机导致无法进行请求处理。使用keepalived,当nginx服务器(MASTER)宕机时,使用另一个nginx服务器(BACKUP)进行请求转发。
解决技术:keepalived
多个nginx服务器(不同主机上)ip,绑定到同一虚拟ip。须在每台nginx服务器上安装keepalived。
通过配置keepalived.conf进行配置,位于/etc/keepalived目录下。
keepalived介绍:https://blog.csdn.net/u014022631/article/details/79970238