nginx组件location匹配的规则和优先级

注意:

location匹配的规则和优先级——重点

nginx常用的变量——要求掌握

rewrite重定向功能——掌握,理解

location 匹配的规则和和优先级

location匹配

常见的nginx正则表达式(匹配的文件内容)

“.” : 任意单个字符

^::匹配输入字符串的起始位置

$:匹配输入字符串的结束位置

*:匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”

+:匹配前面的字符一次或者多次。如“ol+”能匹配"ol"及“oll”、"olll",但不能匹配“o”

?:匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,“?”等效于“{0,1}”

\:  转义符,将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用,如“\n”匹配一个换行符,而“\$”则匹配“$”

[a-zA-Z0-9]:匹配所有大小写字母或者数字任意一个

[c]:匹配单个字符c

{n}:重复n次

{n,m}:重复n到m次

():表达式的开始和结束位置

|:或运算符,逻辑或

URI:是一种字符串标识符,用于标识抽象或物理资源,如文件、图片、视频等。

它由多个组件组成,包括协议、主机名、端口号、路径等,例http://www.kgc.com:8080/index.html 就是一个 URI。

在 Nginx 中,匹配的对象通常是 URI 的一部分

www.ky30.com/images/1.jpg

匹配的/images/.jpg

location匹配URI的分类

匹配类别 表示方法 优先级
精确查找 location = / {...} 优先级最高
正则匹配 location ~ / {...} 其次
一般匹配 location / {...} 优先级最低


location优先级:

1、首先精确匹配 =

2、其次前缀匹配 ^~

3、其次是按文件中顺序的正则匹配~或者~*

4、然后匹配不带任何修饰的前缀匹配

5、最后是交给/通用匹配

location = > location ^~ > location ~* > location /test/ > location /

匹配的规则:

=:进行普通字符精确匹配,也就是完全匹配

^~:表示普通字符匹配,使用前缀匹配,如果匹配成功,就不再匹配其他的location

~:区分大小写的匹配

~*:不区分大小写的匹配

~$: 结尾位置

!~:区分大小写的匹配取非

!~*:不区分大小写的匹配取非

location 匹配规则 越精准,越匹配,(优先级越高)

在实际生产中使用的匹配规则

第一个必选规则

直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,比如说官网,可以是个静态首页,可以直接转发给后端应用服务器

location = / {
   root  html;
   index index.html index. htm;
}
 

第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项

有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用

location ^~ /static/ {
    root /webroot/static/;
}

第三种规则:匹配图片视频使用的

location ~* \.(html|gif|jpg|jpeg|png|css|js|ico)$ {}

第四,通用规则

用来转发带.php、.jsp后缀的动态请求到后端应用服务器,非静态文件请求就默认是动态请求

location / {
    proxy_pass http://tomcat_server;

proxy_pass:指定代理,转发动态请求,
}

rewrite:

rewrite的作用:

使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向

nginx的内置变量:
$uri: 请求的URI,不包含主机和查询参数。

$request_uri: 请求的URI,包含主机和查询参数。

$args: 查询参数部分,即?后面的内容。

$query_string: 整个查询字符串,包含?。

$host: 请求的主机名。

$http_user_agent: 请求的User-Agent头信息,用于表示请求的客户端浏览器和操作系统。

$http_referer: 请求的Referer头信息,表示当前页面的来源URL。

$remote_addr: 客户端的IP地址。

$remote_port: 客户端的端口号。

$server_addr: 服务器的IP地址。

$server_port: 服务器的端口号。

$request_method: 请求的HTTP方法,如GET、POST、等。

$content_type: 请求的Content-Type头信息,表示请求体的MIME类型。

$content_length: 请求的Content-Length头信息,表示请求体的长度。

$scheme: 请求的协议,通常是http或https。

$request_filename: 请求的文件名,用于指定请求的实际文件路径。

$document_root: 当前请求的根目录。

$server_name: 服务器名称,用于匹配server块的server_name指令。

default_ type text/plain

表示如果没有其他地方显示,content type的头字段,默认响应为text/plain

纯文本格式:

text/html:默认的响应类型,也就是我们说的页面

text/plain : 纯文本格式,类似于txt文件

text/css : css样式表的类型

text/javascript : java脚本 ,js: 前端文件  也可以理解是java解析的程序文件

rewrite执行顺序如下

  1. 执行 server 块里面的 rewrite 指令。
  2. 执行 location 匹配。
     
  3. 执行选定的 location 中的 rewrite 指令。
     

rewrite语法

rewrite <regex> <replacement> [flag]

  1. regex :表示正则匹配规则
  2. replacement :表示跳转后的内容
  3. flag :表示 rewrite 支持的 flag 标记

 flag标记说明

标记位:

1、permanent : 永久重定向,返回码位301,

永久性变量url 搜索引擎会转移他的权重以及排名到新的URL

2、redirect :临时重定向,显示的返回码是302

用于短期变更(网站维护,或则升级更新)搜索引擎是不是转移权重和排名到新的URL

304:获取本地缓存

3,break : 作用:

是重定向但是不会改变 uri ,而且只会请求一次,跳出当前匹配即可终止

4、last  : 本条规则匹配完成后,继续向下匹配新的location URI规则只要有last就继续匹配,配置时需要注意,防止死循环

"rewrite or internal redirection cycle while processing

它表示在处理请求时发生了重写或内部重定向循环

猜你喜欢

转载自blog.csdn.net/Breeze_nebula/article/details/132172612