nginx 解决跨域问题第一篇:关于location的知识点(匹配规则,反斜杠用法)

2023-12-14 17:45:40

nginx的location指令用于匹配请求的URL,并指定相关的配置项。它的匹配规则如下

location匹配的的nginx变量是: $request_uri ;
location匹配种类:  格式:location [ 空格 | = | ~ | ~* | !~ | !~* | @ ] /uri/ {} ;
详解如下:
1.精准匹配(如果找到,立即停止搜索并立即处理此请求): 用"="指定一个精确的URL,只有当请求的URL与指定的URL完全匹配时,才会应用相关的配置项。
例如:location = /test 会匹配到请求URI为"/test"的请求。

2.前缀匹配:用"^~"指定一个前缀字符串,当请求的URI以指定的字符串开头时,会应用相关的配置项。
例如:location ^~ /images/ 会匹配到请求URI以"/images/"开头的请求。

3. 正则匹配:用"~""~*"指定一个正则表达式,当请求的URI与正则表达式匹配时,会应用相关的配置项。其中,"~"表示区分大小写,"~*"表示不区分大小写。反推"!~"代表区分大小写不匹配 , "!~*"代表不区分大小写不匹配。
例如:location ~* \.(jpg|jpeg|gif)$ 会匹配到请求URI以".jpg"".jpeg"".gif"结尾的请求。

4.最长前缀匹配"/"(表示通用匹配,任何请求都会匹配到):如果没有匹配到精确匹配、前缀匹配或正则匹配的location块,则会使用最长前缀匹配。
例如:location / 会匹配到任何请求。

5. "@"  指定一个命名的location,一般只用于内部重定向请求。例如 error_page, try_files

备注:^~优先级高于其他正则匹配

nginx代理中/反斜杠用法

这里通过示例展示不同斜杠的用法情况

测试用例

    nginx 服务器及端口 127.0.0.1:80
    后端服务:127.0.0.1:8080
    测试url: http://127.0.0.1:80/test/api/abc

示例1

location /test/ {
   proxy_pass http://127.0.0.1:8080/;
}

实际访问的端口服务:http://127.0.0.1:8080/api/abc

示例2

location /test {
   proxy_pass http://127.0.0.1:8080/;
}

实际访问的端口服务:http://127.0.0.1:8080//api/abc

示例3

location /test/ {

   proxy_pass http://127.0.0.1:8080;

}

实际访问的端口服务:http://127.0.0.1:8080/test/api/abc

示例4

location /test {

   proxy_pass http://127.0.0.1:8080;

}

实际访问的端口服务:http://127.0.0.1:8080/test/api/abc

示例5

location /test/ {

   proxy_pass http://127.0.0.1:8080/server/;

}

实际访问的端口服务:http://127.0.0.1:8080/server/api/abc

示例6

location /test {

   proxy_pass http://127.0.0.1:8080/server/;

}

实际访问的端口服务:http://127.0.0.1:8080/server//api/abc

示例7

location /test/ {

   proxy_pass http://127.0.0.1:8080/server;

}

实际访问的端口服务:http://127.0.0.1:8080/serverapi/abc

示例8

location /test {

   proxy_pass http://127.0.0.1:8080/server;

}

实际访问的端口服务:http://127.0.0.1:8080/server/api/abc

规则总纳
上边location的"/"仅用来匹配测试url,不具备特殊意义。

下边proxy不接目录时,若没有"/",最终地址要拼接 location

下边不接目录时,若有"/",location不拼入最后结果

下边接目录,也视为proxy_pass端口后有"/“的情况,所接目录后的”/"不具备特殊意义,原样接入最终地址(有接有,无接无)。

简单总结如下

上边有"/",下边端口有”/“,不接location。下边目录原封不动拼入最后结果(下边没目录,但有”/",可视为目录为空)
下边端口后没"/"(不管上边没有没有),要拼接location

文章来源:https://blog.csdn.net/liting1996/article/details/134994709
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。