Nginx简介
1. 介绍
ngnix是一种高性能http代理服务器技术,可以实现http请求的处理。其理论单台服务器上限并发访问量能达到10万条。
2. 作用
ngnix主要有两个作用:负载均衡、静态分离
-
负载均衡
nginx作为代理,可以在核心配置文件中配置多个虚拟服务器(http服务器)接收到达nginx的http请求,根据配置逻辑实现监听判断,满足条件的请求将会由该虚拟服务器处理。从而可以让用户通过同一个域名和端口号访问到不同的服务器集群节点。
-
动静分离
可以将一个web项目中用到的静态资源如:.html .js .img 交给nignx管理,动态资源由后端服务器处理。客户端通过网络,使用域名+默认端口(80)访问到ngnix的服务器,再通过nginx的计算可以负载均衡的访问后端服务器集群。
3. 配置文件参数说明
参数 | 说明 |
---|---|
http{} | 其内容表示了nginx作为http服务器代理运行的所有逻辑 |
server | http{}中可以配置多个server,每个server都是一个可以接收http请求的虚拟服务器,和能接受http请求的真实服务器是一样 |
listen | 表示该server在nginx中运行时所监听的nginx服务器上所有该端口的访问 |
server_name | listen发现请求后,判断请求中的host头,匹配则进入该server.不同的2个server配置中,监听端口和域名名称不能相同 |
location / | 负责计算请求uri路径,判断其是否匹配,一旦匹配进入到location内部,不匹配则不处理. |
proxy_pass | 代理路径,一旦进入location,可以通过这个关键字转向后端服务器. |
4. location的匹配规则和优先级
同一个server的里可以同时存在多个location,根据请求中携带uri地址结构不同、值不同,分到不同location来处理不同请求。当有多个location同时匹配成功时,优先级如下判断:
类型 | 例子 | 说明 |
---|---|---|
精确匹配 | location =/image | 去掉域名和端口 uri地址必须完全等于image |
有修饰的字符串前缀匹配 | location ^~/image | uri地址以/image开始,可以表示多级 |
无修饰的字符串前缀匹配 | location /image | uri地址以 /image开始,不能表示多级 /image/haha |
正则匹配区分大小写 | location ~.png$ | uri以.png结尾,区分大小写 |
正则匹配不区分大小写 | location ~*.png$ | uri地址以.png/.pNg/.pnG/等结尾 |
通配 | location / | 只要满足server中端口和域名都能匹配到这个/ |
- 相互包含关系的优先级确定
- 有修饰的字符串前缀匹配如果有包含关系,以最大匹配长度的优先级最高 。
- 正则表达式有包含关系,以配置在上的正则优先级更高 。
5. 均衡负载
nginx可以通过虚拟的集群域名,来实现一个后端集群的统一管理的list列表,通过不同方式的负载均衡计算可以实现负载均衡的访问.
5.1 轮询配置
通过nginx管理后端3个应用的访问节点 8091 8092 8093,按照顺序,依次访问每一个节点就是轮询的访问方式.(list管理的服务器列表,需要引入一个关键字upstream)此时,proxy_pass不能指向一个具体的服务器,而应指向这个虚拟域名myservers
5.2 权重配置
轮询作为依次访问的逻辑,一种物理平均的负载均衡计算,如果后端运行服务器集群每个节点性能不同,应该给高性能的服务器分配更多的请求,给低性能的服务器分配少的请求,可以使用权重。
5.3 ip_hash
⭐️ session共享
要想使用服务器集群,必定要解决session共享的问题,一般而言有三种方法:
- 集群共享session:通过集群节点之间的有效代码逻辑,使得每一个节点的所有session对象在其他节点都有存储。这样无疑会造成每个服务器分配大量资源处理冗余session对象。
- 代理ip_hash计算(nignx支持):只要客户端ip地址不发生变化,对应负载均衡的计算就只能访问同一个节点。这样会将客户端强耦合到一个后端服务器上,一旦那台服务器出现问题,这些客户端将被动暂停对系统的使用。
- 采用第三方存储器(redis):不将session存储在服务器上,使用第三方存储容器。缺点是将占用更多的网络带宽资源。
ip_hash计算逻辑
对节点个数n模运算,取余