Nginx Location Uri匹配详解

写在前面的话:
老规矩,先啰嗦几句,输出一下情绪,很久没有深夜写博文了,做了技术就是这样,深
度和广度,都需要你兼具,相信很多从业者学东西之前都先问自己一个问题,学这个有
没有用?浪费时间吗?说实话,我也是这个问题问过自己很多次。研究Nginx之前,也定
位过自己,Java研发,会配置简单的Nginx,会用。ctrl+c ctrl+v能解决很多问题
,但是出了问题还是自己解决不了。很多小伙伴会说了,不是有运维吗。。有的时候大
家的思维都是相同,说的简单一些,老子会特么的写CRUD,也不用研究什么数据结构,
算法,spring,跟我有卵关系啊。我也用不到。学以致用,确实很奇妙。现在学了还是
不一定用的到,但是用的到了,你学了你就抢先领跑了。Long life learning,恢
复博客更新啦,不啰嗦了,开始正文
Nginx Location grammer
location [=|~|~*|^~] /uri/ { … }

语法如上,说到location,先看一下这个key在配置中出现的案例

http {
    include       mime.types;
    default_type  application/octet-stream;
    server {
        listen       80;
        server_name  localhost;
        location ^~ /api/ {
            root /usr/local/nero/;
            #proxy_pass ip:port/dir
            error_page 404 @api_err;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
在一个配置中,location作为key提供了http或https协议匹配uri的功能,支持正则,
支持[=|~|~*|^~]几种匹配方式,当匹配到以后,选择用proxy_pass或者root做跳转
或静态资源索引。这就是location的根本作用了。
root key
root 用来匹配静态资源路径,支持绝对和安装路径索引
root html 匹配路径为 /usr/local/nginx/html (默认安装路径情况)
root /usr/local/static  绝对路径索引,匹配为/usr/local/static下的文
件。也就是说 ip:port = /usr/local/static
proxy_pass key
proxy_pass 用来转发请求,用作虚拟主机,80或者443端口复用
精确匹配 = uri
= /uri/

有且只有完整匹配的时候才会匹配成功
比如 = /api/html, 那么请求就必须是 ip:port/api/html
少一个匹配都不可以,用于特殊情况的uri
区分大小写和非区分正则匹配 ~ and ~*
~ uri 区分大小写匹配
~* uri 不区分大小写匹配
location ~* \.(html|jpg|png)$

正则匹配相关后缀案例
一般用作静态资源服务器映射匹配
一个疑问 ~ and ~*
如上文:大小写匹配到底说的哪里?

区分大小写和非区分正则匹配
~ /uri 区分
~* /uri 不区分

假设有 /html/API/QUFENUPD/1111.jpg

配置1
        location ~ \.(html)$ {
            root html;
            index index.html;
        }

配置2:
        location ~* \.(html)$ {
            root html;
            index index.html;
        }

那么访问:http://ip:port/API/QUFENUPD/1111.JPG
应该匹配到配置2的情况,而本人亲测确报错了404.
log也确实记录找的JPG路径,
难道大小写区分不是说的正则里面相应的匹配吗?
匹配开头^~
^~ uri
demo:
        location ^~ /api/ {
            proxy_pass ip:port/dir
        }

^~ /api 那么所有 ip:port/api/* 全部匹配
一般用来做多虚拟主机映射。
总结
location 关键点还是在于正则表达式的使用,非常灵活。
持续学习吧 - -
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值