Nginx关于location转发请求的配置

彻底弄懂 Nginx location 匹配

一文弄懂Nginx的location匹配

项目中需要使用内部接口,要在 nginx 层面上禁止外部的访问

location 修饰符类型

>>【 = 】:修饰符:要求路径完全匹配

server {
    server_name website.com;
    location = /abcd {
    […]
    }
}
  • http://website.com/abcd匹配

  • http://website.com/ABCD可能会匹配 ,也可以不匹配,取决于操作系统的文件系统是否大小写敏感(case-sensitive)。ps: Mac 默认是大小写不敏感的,git 使用会有大坑。

  • http://website.com/abcd?param1&param2匹配,忽略 querystring

  • http://website.com/abcd/不匹配,带有结尾的`

  • http://website.com/abcde不匹配

>>【 ~ 】修饰符:区分大小写的正则匹配

server {
    server_name website.com;
    location ~ ^/abcd$ {
    […]
    }
}

^/abcd ‘ 这 个 正 则 表 达 式 表 示 字 符 串 必 须 以 ‘ / ‘ 开 始 , 以 ‘ `这个正则表达式表示字符串必须以`/`开始,以` /结束,中间必须是abcd

  • http://website.com/abcd匹配(完全匹配)
  • http://website.com/ABCD不匹配,大小写敏感
  • http://website.com/abcd?param1&param2匹配
  • http://website.com/abcd/不匹配,不能匹配正则表达式
  • http://website.com/abcde不匹配,不能匹配正则表达式

>> 【 ~* 】不区分大小写的正则匹配

server {
    server_name website.com;
    location ~* ^/abcd$ {
    […]
    }
}
  • http://website.com/abcd匹配 (完全匹配)

  • http://website.com/ABCD匹配 (大小写不敏感)

  • http://website.com/abcd?param1&param2匹配

  • http://website.com/abcd/ 不匹配,不能匹配正则表达式

  • http://website.com/abcde 不匹配,不能匹配正则表达式

总结

  • =开头表示精确匹配
  • ^~ 开头表示uri以某个常规字符串开头,这个不是正则表达式
  • ~ 开头表示区分大小写的正则匹配;
  • ~* 开头表示不区分大小写的正则匹配
  • / 通用匹配, 如果没有其它匹配,任何请求都会匹配到
优先级

(location =) > (location 完整路径) > (location ^~ 路径) > (location ,* 正则顺序) > (location 部分起始路径) > (/)

结果

#内部接口,禁止访问
location ~* /api/\S+/inner {
    deny all;
}
  • \S : 匹配任何非空白字符。
  • + : 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +。

290

注:数字可以被识别为字符

2020-08-14 新增

Nginx配置proxy_pass转发的/路径问题

由于 项目的文件系统变更,minio作为新的分布式文件系统,所以nginx原来的转发策略需要修改。

Nginx 配置 proxy_pass 转发的 / 路径问题

在 nginx 中配置 proxy_pass 时,如果是按照 ^~ 匹配路径时,要注意 proxy_pass 后的url 最后的 / ,当加上 / 就相当于绝对路径,则 nginx 不会把 location 中匹配的路径也转发;

如果没有 / ,则会把匹配的路径部分也给代理走。

举个栗子就能就能理解了:

location ^~ /request/ 
{  
    proxy_pass http://server.com/; 
}

如果是上面的配置,假如请求的 url 是:http://xxx/request/test.html

则会被代理成: http://server.com/test.html (也就是 request 会被过滤)

反之,proxy_pass 的url 最后没有加 /

则会被代理成: http://server.com/request/test.html (也就是 request 没有被过滤)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值