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

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值