1、基本语法

location [=|~|~*|^~|@] pattern {……}

其中,[=|~|~*|^~|@]被称作location modifier,这会定义Nginx如何去匹配其后的pattern,以及该pattern的最基本的属性(简单字符串或者正则表达式)

2、location modifier介绍

2.1 =

server {server_name 123.com;location = /abcd {[……]}
}

案例分析

http://123.com/abcd 正好完全匹配

http://123.com/ABCD

如果运行Nginx的系统本身对大小写不敏感的话,可以匹配
http://123.com/abcd?param 12 忽略查询串参数,这里就是/abcd后面的?param 12
http://123.com/abcd/ 不匹配,因为末尾存在反斜杠,Nginx不认为这种情况是完全匹配
http://123.com/abcde 不匹配

2.2 (None)

可以不写location modifier,Nginx仍然能去匹配pattern。这种情况下,匹配哪些以指定的pattern开头的URI,这里的URI只能是普通字符串,不能使用正则表达式。

server {server_name 123.com;location /abcd {[……]}
}

案例分析

http://123.com/abcd 正好完全匹配

http://123.com/ABCD

如果运行Nginx的系统本身对大小写不敏感的话,可以匹配
http://123.com/abcd?param 12 忽略查询串参数,这里就是/abcd后面的?param 12
http://123.com/abcd/ 末尾存在反斜杠,也属于匹配范围内
http://123.com/abcde 仍然匹配,因为URI是以pattern开头的

2.3 ~

location modifier对大小写敏感,且pattern必须是正则表达式。

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

案例分析

http://123.com/abcd 完全匹配

http://123.com/ABCD

不匹配,~对大小写是敏感的
http://123.com/abcd?param 12 忽略查询串参数,这里就是/abcd后面的?param 12
http://123.com/abcd/ 不匹配,因为末尾存在反斜杠,并不匹配正则表达式^/abcd$
http://123.com/abcde 不匹配正则表达式^/abcd$

2.4 ~*

与~类似,但这个location modifier不区分大小写,且pattern必须是正则表达式。

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

案例分析

http://123.com/abcd 完全匹配

http://123.com/ABCD

匹配,因为不区分大小写
http://123.com/abcd?param 12 忽略查询串参数,这里就是/abcd后面的?param 12
http://123.com/abcd/ 不匹配,因为末尾存在反斜杠,并不匹配正则表达式^/abcd$
http://123.com/abcde 不匹配正则表达式^/abcd$

2.5 ^~

匹配情况类似  (None) 的情况,以指定匹配模式开头的 URI 被匹配,不同的是,一旦匹配成功,那么 Nginx 就停止去寻找其他的 Location 块进行匹配了(与 Location 匹配顺序有关)。

2.6 ^~

匹配情况类似  (None) 的情况,以指定匹配模式开头的 URI 被匹配,不同的是,一旦匹配成功,那么 Nginx 就停止去寻找其他的 Location 块进行匹配了(与 Location 匹配顺序有关)。

3、location匹配顺序

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


注意事项

  • 匹配的顺序是先匹配普通字符串,然后再匹配正则表达式。
  • 普通字符串匹配顺序是根据配置中字符长度从长到短,也就是说使用普通字符串配置的location顺序是无关紧要的,反正最后nginx会根据配置的长短来进行匹配,但是需要注意的是正则表达式按照配置文件里的顺序测试。找到第一个比配的正则表达式将停止搜索。
  • 一般情况下,匹配成功了普通字符串location后还会进行正则表达式location匹配。有两种方法改变这种行为,其一就是使用“=”前缀,这时执行的是严格匹配,并且匹配成功后立即停止其他匹配,同时处理这个请求;另外一种就是使用“^~”前缀,如果把这个前缀用于一个常规字符串那么告诉nginx 如果路径匹配那么不测试正则表达式。

4、匹配模式及顺序

location = /uri =开头表示精确匹配,只有完全匹配上才能生效。
location ^~ /uri ^~ 开头对URL路径进行前缀匹配,并且在正则之前。
location ~ pattern ~开头表示区分大小写的正则匹配。
location ~* pattern ~*开头表示不区分大小写的正则匹配。
location /uri 不带任何修饰符,也表示前缀匹配,但是在正则匹配之后。
location /  通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default。

5、实验分析

实验1

测试“^~”和“~”。在Nginx的配置文件中增加如下配置:

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

浏览器输入http://localhost/helloworld/test,返回601。

如将#1注释,#2打开,浏览器输入http://localhost/helloworld/test,返回603。

注:#1和#2不能同时打开,如同时打开,启动nginx会报nginx: [emerg] duplicate location "/helloworld"...,因为这两个都是普通字符串

实验 2

测试普通字符串的长短(普通字符串的匹配与顺序无关,与长短有关)

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

浏览器输入http://localhost/helloworld/test/a.html,返回601。浏览器输入http://localhost/helloworld/a.html,返回602。

实验3

测试正则表达式的顺序(正则匹配与顺序相关)

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

浏览器输入http://localhost/helloworld/test/a.html,返回602;

将#2和#3调换顺序,浏览器输入http://localhost/helloworld/test/a.html,返回603

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 配置

    location匹配顺序 "="前缀指令匹配,如果匹配成功,则停止其他匹配 普通字符串指令匹配,顺序是从长到短,匹配成功的location如果使用^~,则停止其他匹配(正则匹配) ...

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

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

  9. nginx location配置详解

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

最新文章

  1. 找不到物理服务器,日常物理服务器需要在什么地方升级?
  2. Request对象 --web浏览器向web服务端的请求
  3. S3C2440启动代码分析
  4. ubuntu12.04配置双显示器
  5. 构造器是什么?(Java篇)
  6. java人民币读法转换
  7. SQL Server 2008处理隐式数据类型转换在执行计划中的增强
  8. Android ListView选中项居中放大(使用上下键控制,非触屏)
  9. Linux下多进程服务端客户端模型二(粘包问题与一种解决方法)
  10. android item复用,RecyclerView item正确的复用方式
  11. SimpleDateFormat 线程不安全及解决方案
  12. 看好你的数据库连接字符串!
  13. 点击按钮后网页不向上滚动
  14. 生物流体力学及血流动力学建模仿真技术实战
  15. 计算机视觉常用滤波,【计算机视觉】 滤波器
  16. 数据结构和算法知识点整理
  17. npm ERR! code EINTEGRITY npm! ERR! shal-
  18. 本篇和开发无关,查询MFI认证的办法
  19. 如何在素材中心中下载字体并安装?
  20. 认知升级|系列1|富人思维

热门文章

  1. Php的if自动转换类型,php之数据类型自动转换,php之数据类型转换_PHP教程
  2. php自动到某个时间提醒,2周后,php脚本cron作业将提醒消息发送到特定的电子邮件地址...
  3. retrofit2 发送json数据_SQLmap JSON 格式的数据注入
  4. 经典压缩软件7-Zip首次登陆Linux免费开源!
  5. 常用的Linux服务器各项性能指标查看方法!
  6. 最近在学C语言,非常痛苦,怎么办?
  7. poj2553(强连通分量)
  8. Codeforces Round #658 (Div. 2)部分题解
  9. 二分图 ---- 树的二分图性质 2020icpc 济南 J Tree Constructer(构造)
  10. Splay ---- 区间翻转 区间最大值 区间加 P4146 序列终结者