Nginx学习 之 location

入门

  • 语法: location [=|^~|~|~*] /url/ { ... }
    • =: 绝对匹配
    • ^~: 前缀匹配
    • ~: 正则匹配
    • ~*: 正则匹配(不区分大小写)
    • !~: 正则匹配(取反)
    • !~*: 正则匹配(不区分大小写, 取反)
    • @: 用于处理内部重定向
  • 优先级: 绝对匹配(=) --> 前缀匹配(^~) --> 正则匹配(~|~*|!~|!~*) --> 不带任何修饰的匹配

关键字介绍

alias 和 root 的区别

  • alias
    // ***** 将匹配条件全部替换为 alias 的内容 *****
    // 当你请求 http://www.a.com/x/1.jpg 时
    // 实际会访问 /a/b/c/1.jpg
    
    location ^~ /x/ {
        alias /a/b/c/;
    }
    
  • root
    // 当你请求 http://www.a.com/x/2.jpg 时
    // 实际会访问 /a/b/c/x/2.jpg
    
    location ^~ /x/ {
        root /a/b/c/;
    }
    

last 和 break 的区别

  • 出现在 location 之外时
    • 两者的作用是一致的没有任何差异
  • 出现在location 内部时
    • last: 使用了last 指令, rewrite 后会跳出location 作用域, 重新开始再走一次刚才的行为, 常用
    • break: 使用了break 指令, rewrite后不会跳出location 作用域, 它的生命也在这个location中终结

permanent 和 redirect 的区别

  • 状态码不同
    • permanent: 永久重定向, 状态码为301
    • redirect: 临时重定向, 状态码为302

匹配方式(按优先级介绍)

绝对匹配

  • 不会出现同一 url 同时满足 两个绝对匹配的情况
  • root 和 alias 没有区别
  • 示例
    # 此时访问 /xxx, 实际是访问 /mnt/xxx/
    	
    location = /xxx {
        root /mnt;
        # alias /mnt;
    }
    

前缀匹配

  • 同时匹配会优先更精确的(如示例中的 /api1/static)
  • rootalias 会有不同, 详见上方介绍
  • 示例
    # 访问 /api1 会跳转 百度
    # 访问 /api1/static/ 实际上访问 /mnt/t.html
    # 访问 /api2/static/ 实际上访问 /mnt/api2/static/t.html
    
    location ^~ /api1 {
        rewrite (.*) https://www.baidu.com;
    }
    
    location ^~ /api1/static {
        alias /mnt;
        index t.html;
    }
    
    location ^~ /api2/static {
        root /mnt;
        index t.html;
    }
    

正则匹配(多用于文件名匹配或者后缀匹配)

  • 同时匹配会按配置顺序生效
  • 不建议使用 alias
  • 示例
    # 访问 xxx.png 会优先去 /mnt/xxx 目录里找
    
    location ~ \.(gif|jpg|png|js|css)$ {
        root /mnt/xxx;
    }
    
    # 无视大小写
    location ~* \.png$ {
        root /mnt/;
    }
    

模糊匹配

  • 优先更精确
  • 示例
    # 
    location /img {
        echo "规则Y";
    }
    
    location / {
        echo "规则F";
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值