Nginx Location配置详解

目录

  • 一、语法
  • 二、匹配顺序
  • 三、root 与 alias 的区别
  • 四、server 和 location 中的 root


一、语法

Location 是 Nginx 中一个非常核心的配置,关于Location,举个简单的配置例子:

server {listen 80;server_name 10.0.7.115;location / {root /data/app/;index index.html;}
}

当访问 http://10.0.7.115:80 的时候,返回的是 /data/app/index.html 文件。

Location具体语法:

location [ = | ~ | ~* | ^~ ] uri { ... }

重点看方括号中的 [ = | ~ | ~* | ^~ ],其中 | 分隔的内容表示你可能会用到的语法,其中:

  • = 表示精确匹配:
location = /test {return 200 "hello";
}

例如:

/test              ok
/test/             not ok
/test2             not ok
/test/2            not ok

  • ~ 表示区分大小写的正则匹配:
location ~ ^/test$ {[configuration] 
}

例如:

/test              ok
/Test              not ok
/test/             not ok
/test2             not ok

  • ~* 表示不区分大小写的正则匹配:
location ~* ^/test$ {     [configuration] 
}

例如:

/test               ok
/Test               ok
/test/              not ok
/test2              not ok

  • ^~ 表示 uri 以某个字符串开头:
location ^~ /images/ {    [configuration] 
}

例如:

/images/1.gif        ok

  • / 表示通用匹配:
location / {     [configuration] 
}

例如:

/index.html           ok
location /test {[configuration] 
}

例如:

/test                 ok
/test2                ok
/test/                ok

二、匹配顺序

Location的定义分为两种:

  • 前缀字符串(prefix string)

  • 正则表达式(regular expression),具体为前面带 ~* 和 ~ 修饰符

当存在多个 Location 的时候,匹配的顺序为:

  • 检查使用前缀字符串的 locations,在使用前缀字符串的 locations 中选择最长匹配的,并将结果进行储存;

  • 如果符合带有 = 修饰符的URI,则立刻停止匹配

  • 如果符合带有 ^~ 修饰符的URI,则也立刻停止匹配

  • 然后按照定义文件的顺序,检查正则表达式,匹配到就停止

  • 当正则表达式匹配不到的时候,使用之前储存的前缀字符串;

总结:

  • 顺序上

    • 前缀字符串顺序不重要,按照匹配长度来确定

    • 正则表达式按照定义顺序

  • 优先级上

    • = 修饰符最高,^~ 次之,再者是正则,最后是前缀字符串匹配。

我们举几个简单的例子进行说明

请求URI如下:

/document

示例一:

配置:

server {location /doc {[ configuration A ] }location /docu {[ configuration B ] }
}

匹配结果:

configuration B

注:虽然 /doc 也能匹配到,但 在顺序上,前缀字符串顺序不重要,按照匹配长度来确定


示例二:

server {location ~ ^/doc {[ configuration A ] }location ~ ^/docu {[ configuration B ] }
}

匹配结果:

configuration A

注:虽然 ~ ^/docu 也能匹配到,但 正则表达式则按照定义顺序


示例三:

server {location ^~ /doc {[ configuration A ] }location ~ ^/docu {[ configuration B ] }
}

匹配结果:

configuration A

注:虽然 ~ ^/docu 也能匹配到,但 ^~优先级更高


示例四:

server {location /document {[ configuration A ] }location ~ ^/docu {[ configuration B ] }
}

匹配结果:

configuration B

注:虽然 /document 也能匹配到,但 正则的优先级更高


三、root 与 alias 的区别

当我们这样设置 root 的时候:

location /i/ {root /data/w3;
}

当请求 /i/top.gif/data/w3/i/top.gif 会被返回。

当我们这样设置 alias 的时候:

location /i/ {alias /data/w3/images/;
}

当请求 /i/top.gif/data/w3/images/top.gif 会被返回。


两者的区别:

  • root 是直接拼接 root + location

  • alias 是用 alias 替换 location


四、server 和 location 中的 root

server 和 location 中都可以使用 root,举个例子:

server {listen 80;server_name 10.0.7.115;root /data/app/;location / {root /data/web/;index index.html;}
}

如果两者都出现,是怎样的优先级呢?

简单的来说,就是 就近原则,如果 location 中能匹配到,就是用 location 中的 root 配置,忽略 server 中的 root,当 location 中匹配不到的时候,则使用 server 中的 root 配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

英语口语-文章朗读Week9 Wednesday

英语文章 Birds of the same species flock together, People tend to look for someone like themselves to be friends. But having the same interests is not the only standard when we are seeking friends. In most cases, especially for adults, people l…

C++primer 第 4 章 表达式 4.7条件运算符 4.8位运算符 4.9 sizeof运算符 4.10逗号运算符 4.11类型转换 4 . 1 2 运算符优先级表

4.7条件运算符 条件运算符(?:)允许我们把简单的if else逻辑嵌入到单个表达式当中,条件运算符按照如下形式使用:cond ? expr1 : expr2;其中cond是判断条件的表达式,而expr1和expr2是两个类型相同或可能转换为某个公共类型的表达…

Git 之 git tag标签使用

目录一、简介二、本地tag操作1、创建tag标签(1)创建轻量标签(2)创建附注标签2、查看tag标签(1)查看标签列表(2)查看标签提交信息(3)在提交历史中查看标签3、删…

codeforces 110A-C语言解题报告

110A题目网址 题目解析 1.输入一个数字,如果数字中包含的4,7的数量是4或7的倍数,则输出YES,否则输出NO 举例: 输入: 40047 输出: NO 2.注意点: 1)由于数字很长,所以使用long long int类型,使用scanf("%lld",&n)接收输入 2)整型转字符串,使用sprintf(字符串,“…

C++primer 第 5 章语句 5.2语句作用域 5.3条件语句 5 . 4 迭代语句 5.5跳转语句 5.6 try语句块和异常处理

5 . 1 简单语句 C语言中的大多数语句都以分号结束,一个表达式,比如ival 5 , 末尾加上分号就变成了表达式语句(expression statement)。表达式语句的作用是执行表达式并丢弃掉求值结果:ival 5; // 一条没什么实际用处的表达式语…

英语口语-文章朗读Week9Thursday

英语文章 Everyone has his or her own dreams. Some people wants to be millionaires so they can give many generous donations later; some people want to be scientists so they can bring many conveniences to the world; some people only want to be bus-drivers s…

操作系统 内存管理相关知识

cpu执行程序的基本过程 译码器 输入为n管脚,输出为2^n根管脚,编号为从0到2^(n-1),用少的输入端控制更多的输出端最常用的是三八译码器AD(Address bus)地址总线: 选中一行数据每一行 8bit 组成8吧B cpu输入端32根线,输出端就可以控…

2000年考研英语阅读理解文章四

文章详细解析网址 注意点 1.注意But,however等表示观点看法转折的词语 2.全篇都在提及moral decline 道德下降,最后一段写that may have more to do with life-style所以造成现象的原因应该是life-style.(主要) 前面都是在分析,最后一段点名原因 知识点 ----单词 envy n/v…

Chrome浏览器必装插件!尤其程序猿!

Chrome 浏览器有一个好处,就是插件极其丰富,只有你想不到的,没有你找不到的,这恐怕是 Chrome 浏览器被众多爱好者钟爱的原因吧。 言归正传,今天来给大家推荐 10 款我自己珍藏的 Chrome 浏览器插件。 1、crxMouse Ch…

codeforces 160A-C语言解题报告

160A题目网址 题目解析 1.输入硬币的个数,分配硬币,使拿最小的硬币数比剩下的硬币金额大 举例: 输入: 2 3 3 输出 2 2.注意点: 1)接收整型数组时要使用&,因为只有字符数组是使用指针传递首地址的 scanf("%d",&a[i]); 2)使用冒泡排序,将数组从大到小排序…

英语口语-文章朗读Week10 Monday

英语文章 Here are some valuable suggestions which may assist you in landing good job First, make your resume clear and associate it with the position you are applying for. Try to add details like your temporary jobs at college or your former jobs Second, …

论文遇到的格式问题和修正方式

word空格出现小圆点怎么办论文参考文献批量改为上角标,简单好用!!!字数统计网站word封面下划线怎么对齐(非常简单彻底解决)

codeforces 41A-C语言解题报告

41A题目网址 题目解析 1.输入一个字符串,如果第二行是倒序输入这个字符串的,就输出YES,否则输出NO 举例: 输入: abb aba 输出: NO 2.倒序输出时,使用int jstrlen(t)-1;,因为strlen()是计算字符个数,而字符串是从0开始,最后一位是字符串长度减一 3.在接收第二个字符串输入时…

Linux查看文件的首个字母 文件属性字段

-rw-r–r– 1 root root 762 07-29 18:19 exit文件属性字段总共有10个字母组成;第一个字符代表文件的类型。 文件属性字段 字母“-”表示该文件是一个普通文件字母“d”表示该文件是一个目录,字母”d”,是dirtectory(目录)的缩写&#xff1b…

英语口语-文章朗读Week10 Wednesday

英语文章 Everyone needs sleep for survival, but how much? It is said that eight hours of sleep is fundamental to a healthy person. But today, many people are sacrificing their sleep time。 Modern people have so many alternatives: cell phones, PCs, TVs, g…

嵌入式Linux多任务编程 进程 管道 命名管道

进程 进程是一个可并发执行的具有独立功能的程序关于某个数据集合的一次执行过程,也是操作系统执行资源分配和保护的基本单位。程序的一次执行就是一个进程一个程序可以派生多个进程多个不同程序运行的时候,也会有多个相对应的进程与其相互对应进程是动…

2000年考研英语阅读理解文章五

文章详细解析网址 知识点 ----单词 vitality n生命力 hypocritical adj伪善的 pushing adj有进取心的 acquisitive adj渴望获得的,贪得无厌的 confess v供认,坦白 vulgar adj粗俗的 spectacle n场面,奇观 participatory adj供分享的 democracy n民主,民主制,民主国家 stir v搅…

英语口语-文章朗读Week10 Thursday

英语文章 There are many customs and traditions in Chinese civilization. Here, we will talk about the development of the way people greet each other: In ancient times, people had to kneel to those who were superior to them. This custom remained until the …