Nginx

发布于:2024-06-02 ⋅ 阅读:(144) ⋅ 点赞:(0)

1、什么是nginx?

Nginx以事件驱动的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、负载平衡服务器。在性能上,Nginx占用很少的系统资源,能支持更多的并发连接,达到更高的访问效率;在功能上,Nginx是优秀的代理服务器和负载均衡服务器;在安装配置上,Nginx安装简单、配置灵活。

Nginx支持热部署,启动速度特别快,还可以在不间断服务的情况下对软件版本或配置进行升级,即使运行数月也无需重新启动。

在微服务的体系之下,Nginx正在被越来越多的项目采用作为网关来使用,配合Lua做限流、熔断等控制。

它的作用主要是体现在三个方面:

  1. 反向代理
  2. 负载均衡
  3. 动态分离

1.1、正向代理

正向代理:对客户端的代理

1.2、反向代理

反向代理:对服务器端的代理

1.3、负载均衡

        通过nginx可以配置服务器集群,将原本应该由一台服务器处理的请求,分散到多台服务器共同处理

        假设超市促销,有1000人买东西,他们到收银台买单,此时只有一个收银员。此时,超市可以多开放一 些收银窗口,这样可以 共同处理请求,减少单个收银员的压力

配置负载均衡有下列好处:

        1、在高并发环境下,大量请求可以分散到多个服务器进行处理,减少单台服务器压力

                高并发:大量请求同时访问

        2、配置服务器集群,可以实现高可用

                高可用:在集群环境下,请求是由多台服务共同处理,即使某一些服务器出现问题,其他正常 的服务器依然可以正常处理请求,不会影响用户体验

1.4、动静分离

将静态资源(例如图片)放在静态资源服务器,将动态资源(例如:数据库的数据)放在web服务器中, 数据从不同的服务器加载,这样可以提高处理效率

2、location规则以及优先级详解

nginx 配置文件里往往有多个location来区分不同的路径来执行不同的配置

2.1、location 匹配命令

  1. 正则匹配 location ~ /abc { }
  2. 不区分大小写的正则匹配 location ~* /abc { }
  3. 匹配路径的前缀,如果找到停止搜索 location ^~ /abc { }
  4. 精确匹配 location = /abc { }
  5. 普通路径前缀匹配 location /abc { }

优先级

        4 > 3 > 2 > 1 > 5

2.2、详解

location = / {
# 精确匹配 / ,主机名后面不能带任何字符串
[ configuration A ]
}

================

location / {
# 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求
# 但是正则和最长字符串会优先匹配
[ configuration B ]
}
location /documents/ {
# 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
[ configuration C ]
}

================

location ~ /documents/Abc {

# 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
[ configuration CC ]
}
location ^~ /images/ {

# 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。
[ configuration D ]
}

================

location ~* \.(gif|jpg|jpeg)$ {

# 匹配所有以 gif,jpg或jpeg 结尾的请求
# 然而,所有请求 /images/ 下的图片会被 config D 处理,因为 ^~ 到达不了这一条正则
[ configuration E ]
}

================

location /images/ {

# 字符匹配到 /images/,继续往下,会发现 ^~ 存在
[ configuration F ]
}

================

location /images/abc {

# 最长字符匹配到 /images/abc,继续往下,会发现 ^~ 存在
# F与G的放置顺序是没有关系的
[ configuration G ]
}

================

location ~ /images/abc/ {

# 只有去掉 config D 才有效:先最长匹配 config G 开头的地址,继续往下搜索,匹配到这一条正则,采用
[ configuration H ]
}

2.3、Location处理逻辑

1.用uri测试所有的prefix string;
2.Uri精确匹配到=定义的loacation,使用这个location,停止搜索;
3.匹配最长prefix string,如果这个最长prefix string带有^~修饰符,使用这个location,停止搜索,否则:
4.存储这个最长匹配;
5.然后匹配正则表达;
6.匹配到第一条正则表达式,使用这个location,停止搜索;
7.没有匹配到正则表达式,使用#4步存储的prefix string的location。

2.4、location 优先级官方文档

  1. Directives with the = prefix that match the query exactly. If found, searching stops.
  2. All remaining directives with conventional strings, longest match first. If this match used the ^~ prefix, searching stops.
  3. Regular expressions, in order of definition in the configuration file.
  4. If #3 yielded a match, that result is used. Else the match from #2 is used.

  1. =前缀的指令严格匹配这个查询。如果找到,停止搜索。
  2. 所有剩下的常规字符串,最长的匹配。如果这个匹配使用^〜前缀,搜索停止。
  3. 正则表达式,在配置文件中定义的顺序。
  4. 如果第3条规则产生匹配的话,结果被使用。否则,使用第2条规则的结果。

参考:

nginx的location优先级-腾讯云开发者社区-腾讯云 (tencent.com)

nginx location匹配规则 (redis.com.cn)