location匹配顺序

  1. "="前缀指令匹配,如果匹配成功,则停止其他匹配
  2. 普通字符串指令匹配,顺序是从长到短,匹配成功的location如果使用^~,则停止其他匹配(正则匹配)
  3. 正则表达式指令匹配,按照配置文件里的顺序,成功就停止其他匹配
  4. 如果第三步中有匹配成功,则使用该结果,否则使用第二步结果

注意点

  1. 匹配的顺序是先匹配普通字符串,然后再匹配正则表达式。另外普通字符串匹配顺序是根据配置中字符长度从长到短,也就是说使用普通字符串配置的location顺序是无关紧要的,反正最后nginx会根据配置的长短来进行匹配,但是需要注意的是正则表达式按照配置文件里的顺序测试。找到第一个比配的正则表达式将停止搜索。

  2. 一般情况下,匹配成功了普通字符串location后还会进行正则表达式location匹配。有两种方法改变这种行为,其一就是使用“=”前缀,这时执行的是严格匹配,并且匹配成功后立即停止其他匹配,同时处理这个请求;另外一种就是使用“^~”前缀,如果把这个前缀用于一个常规字符串那么告诉nginx 如果路径匹配那么不测试正则表达式。

匹配模式及顺序  

  location = /uri    =开头表示精确匹配,只有完全匹配上才能生效。

  location ^~ /uri   ^~ 开头对URL路径进行前缀匹配,并且在正则之前。

  location ~ pattern  ~开头表示区分大小写的正则匹配。

  location ~* pattern  ~*开头表示不区分大小写的正则匹配。

  location /uri     不带任何修饰符,也表示前缀匹配,但是在正则匹配之后。

  location /      通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default。

实验案例

  测试"^~"和"~",nginx配置如下。浏览器输入http://localhost/helloworld/test,返回601。如将#1注释,#2打开,浏览器输入http://localhost/helloworld/test,返回603。注:#1和#2不能同时打开,如同时打开,启动nginx会报nginx: [emerg] duplicate location "/helloworld"...,因为这两个都是普通字符串。

  

location ^~ /helloworld {      #1return 601;
}#location /helloworld {        #2
#    return 602;
#}location ~ /helloworld {return 603;
}  

  测试普通字符串的长短(普通字符串的匹配与顺序无关,与长短有关)。浏览器输入http://localhost/helloworld/test/a.html,返回601。浏览器输入http://localhost/helloworld/a.html,返回602。

  

location /helloworld/test/ {        #1return 601;
}location /helloworld/ {                #2return 602;
}

  测试正则表达式的顺序(正则匹配与顺序相关)。浏览器输入http://localhost/helloworld/test/a.html,返回602;将#2和#3调换顺序,浏览器输入http://localhost/helloworld/test/a.html,返回603

  

location /helloworld/test/ {        #1return 601;
}location ~ /helloworld {            #2return 602;
}location ~ /helloworld/test {        #3return 603;
}

  

转载于:https://www.cnblogs.com/senlinyang/p/9357067.html

nginx location 配置相关推荐

  1. php localtion,详解Nginx Location配置

    今天有一位同学问到 Nginx 的站点多路径匹配的问题? 1.www.domain.com/a 需要返回 /var/www/domain.com/a/index.html 2.www.domain.c ...

  2. nginx location配置 - ttlsa教程系列之nginx

    为什么80%的码农都做不了架构师?>>>    今天讲下location的用法,部分内容是直接从网络上摘取的,这边做了一个整理,为了便于理解和学习,我这边做了一些例子. 语法规则: ...

  3. nginx location 配置详细解释

    语法规则: location [=|~|~*|^~] /uri/ { - } = 开头表示精确匹配 ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可.nginx不对url做编码,因 ...

  4. Nginx Location配置总结

    转载至http://blog.sina.com.cn/s/blog_97688f8e0100zws5.html 语法规则: location [=|~|~*|^~] /uri/ { - }   转载至 ...

  5. nginx location配置详细解释

    nginx的安装配置三部曲:点击即可查看 1.安装和配置文件的基础配置,ctrl+f搜索nginx 2.nginx文档如何查看 + 常用的配置方式(伪静态,反向代理,动静分离,防盗链,图片缓存,gzi ...

  6. nginx location 配置path,如不带斜杆访问,出现异常

    问题举例: location 配置了 ^~/mobile 访问: http://yourdomain/mobile/  正常: 访问: http://yourdomain/mobile  异常,ngi ...

  7. Nginx——location配置

    1.基本语法 location [=|~|~*|^~|@] pattern {--} 其中,[=|~|~*|^~|@]被称作location modifier,这会定义Nginx如何去匹配其后的pat ...

  8. nginx location 配置中 try_files, alias, root, index 的

    需求场景 朋友让我帮忙挂一个网页,有点类似"钓鱼"的性质(开玩笑,没这么严重),就是找一个类似的域名,把原网站其中一个网页完全复制过来,修改其中的内容,然后给甲方看.但是,这个新域 ...

  9. nginx location配置详解

    2019独角兽企业重金招聘Python工程师标准>>> location匹配命令 ~      #波浪线表示执行一个正则匹配,区分大小写 ~*    #表示执行一个正则匹配,不区分大 ...

最新文章

  1. vue商城项目开发:底部导航样式、顶部导航矩阵和轮播图
  2. Bengio、周志华、山世光、包云岗等200+位AI学术领袖邀你观看智源大会精彩论坛...
  3. 7-8 InputMismatchException异常 (20 分)
  4. jHipster入门,第1部分
  5. 装饰器python的通俗理解_Python装饰器的通俗理解
  6. 报错:/BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.29.5/UITableView.m:7943解决方法
  7. 【可视化编程一】关于Unity可视化编程(Visual Scripting)
  8. Maven下载及安装教程
  9. Python基础练习-每日一题-大家来找茬!
  10. [poj3580]SuperMemo(splay终结题)
  11. 哪一种编程语言适合人工智能
  12. C语言编辑bmi计算器,使用事件处理程序的BMI计算器计算
  13. 给父母的礼物!一键让Android变身老人机
  14. 易语言打开摄像头_api摄像头拍照源代码 调用API函数创建视频设备
  15. 关于Verilog 写法
  16. 倍福plc的型号_EL9186——plc倍福模块+EL9100型号EL9010
  17. 上线项目 Docker部署项目到服务器总结
  18. html5/css实现字体上划线
  19. 【unity学习笔记-如何给动态的人物添加碰撞体】
  20. matlab使用出现矩阵为奇异值、接近奇异值或缩放错误。结果可能不准确。RCOND = NaN。

热门文章

  1. linux开发 stc_Linux环境下搭建STC单片机平台的指南
  2. git原理详解与实操指南_基于dockercompose的Gitlab CI/CD实践amp;排坑指南
  3. 实际返回的行数超出请求的行数_代码行数越少越好?
  4. python如何请求curl_Python爬虫偷懒神器 —— 一键构造请求头!
  5. ctfd的mysql导入_centos7 CTFd平台搭建过程
  6. c语言坐标打印佛祖,C语言输入平面上两个点的坐标(double类型),计算两个点之间的距离。看”详细“里哪里写错了谢谢...
  7. NEAT(NeuroEvolution of Augmenting Topologies)算法详解与实践(基于NEAT-Python)
  8. 如何使用Python numpy.where()方法
  9. jqueryui时间插件_jQueryUI AutoComplete插件
  10. java堆 数据结构 堆_快速堆数据结构