nginx配置:location配置方法及实例详解

来源:互联网 发布:松本行弘 知乎 编辑:程序博客网 时间:2024/06/05 07:19

转载一篇感觉解释的挺清楚的location配置文章,稍微做点备注的修改,感觉这样自己读起来更容易理解;红色部分。

今天深入研究了下nginx的location的用法,已经一些需要注意的细节,现在做一个归纳总结,以备后面查询。

location匹配的是nginx的哪个变量?

$request_uri   //即首先要搞清楚location配置的到底是什么玩意儿,location匹配的是uri(统一资源标识符),具体uri是什么意思,可以百度~

location的匹配种类有哪些?

格式  location [ 空格 | = | ~ | ~* | !~ | !~* ] /uri/ {}1、# 精确匹配: 相等(=)2、# 字符串匹配: 字符串匹配(空格) 或者 匹配开头(^~)3、 正则匹配: 区分大小写匹配(~) 不区分大小写匹配(~*) 区分大小写不匹配(!~) 不区分大小写不匹配(!~*)

location搜索优先级优先级如何?

精确匹配 > 字符串匹配( 长 > 短 [ 注: ^~ 匹配则停止匹配 ]) > 正则匹配( 上 > 下 )1、# 精确匹配只能命中一个2、# 字符串匹配使用匹配最长的最为匹配结果3、# 正则匹配按照location定义的顺序进行匹配,先定义具有高优先级

特别注意: 字符串匹配优先搜索,但是只是记录下最长的匹配 ( 如果 ^~ 是最长的匹配,则会直接命中,停止搜索正则 ),然后继续搜索正则匹配,如果有正则匹配,则命中正则匹配,如果没有正则匹配,则命中最长的字符串匹配.

举例说明

( 这里使用了 echo-nginx-module 模块,方便做输出测试 )

精确匹配location = /images/test {    default_type 'text/plain';    echo 'config1';}location  /images/test {    default_type 'text/plain';    echo 'config2';}location \/images\/test$ {    default_type 'text/plain';    echo 'config3';}如果此时请求 http://127.0.0.1/images/test 会输出什么呢?输出 config1, 毋容置疑,精确匹配优先级最高!
精确匹配的特殊情况location = / {    index index.html;}location / {    echo 'config2';}此时是输入http://127.0.0.1 会输出什么呢?是输出 config2, 怎么精确匹配的优先级不灵了呢?是这样的,精确匹配还是起作用了,请求目录(非具体文件),nginx会自动将请求定向到index文件,所以此时真正的请求是http://127.0.0.1/index.html,所以匹配到的是第二个,而非第一个精确匹配,是 config2则被命中!所以精确匹配不要用来匹配 /
字符串搜索与正则搜索location /images/test {    default_type 'text/plain';    echo 'config1';}location ^~ /images/ {    default_type 'text/plain';    echo 'config2';}location ~ \/images\/test$ {    default_type 'text/plain';    echo 'config3';}location ~ \/images\/ {    default_type 'text/plain';    echo 'config4';}如果此时请求 http://127.0.0.1/images/test 会输出什么呢?当然是 config3,正则命中(虽然 config1 为最长匹配的字符串,此时只做记录,后面还要搜索正则匹配,则config3正则匹配命中),仔细观察可以发现config4也被匹配成功了,但是正则的匹配顺序是按照location的定义顺序匹配的,所以config3命中.
字符串匹配优先级的提升( ^~ )location /images/ {    default_type 'text/plain';    echo 'config1';}location ^~ /images/test {    default_type 'text/plain';    echo 'config2';}location ~ /images/test$ {    default_type 'text/plain';    echo 'config3';}location ~ \/images\/ {    default_type 'text/plain';    echo 'config4';}如果此时请求 http://127.0.0.1/images/test 会输出什么呢?当然是config2, 首部匹配命中(因为字符串匹配是优先搜索的,此时发现config2 为最长的字符串匹配且为^~匹配方式,所以停止搜索正则,直接命中!)
# 所以这里的 ^~ 符号比较特殊,就是为了提高字符串匹配的优先级,优先于正则匹配.

转自:http://www.cnblogs.com/sunkeydev/p/5225051.html



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 绿豆面黄豆面白面蒸馒头怎么办 画油画时把颜料染在衣服上怎么办 买的布衣柜少了一个管子怎么办 小2球刚好进2球怎么办 大2球刚好进2球怎么办 大球2进了2球怎么办 身上剩的几百块钱有掉了怎么办 刚买一天的手机电板有问题怎么办 宝宝长湿疹穿少了就感冒怎么办 照片跟视频被孩子删了怎么办 老公总是说一些不开心的话题怎么办 孩子沉迷手机篮球课不爱去怎么办 坐久了屁鼓会长疮怎么办 套胶的胶皮与海绵分离怎么办 换肾15天了沒尿怎么办? 妻子的绒癌怎么办?——急人! 孕妇结石掉在输尿管有血尿怎么办 吃葯时药片沾在食管臂上怎么办 八十多了膀胱癌手术复发了怎么办 尿蛋白和尿隐血2个加怎么办 小肝癌手术后两个月又复发了怎么办 膀胱癌血尿堵塞尿道和尿管怎么办 肾炎腰疼一条腿疼尿血怎么办 孕晚期尿常规检查尿蛋白高怎么办? 腰开车疼的不会动了怎么办 小孩跑完满头大汗就咳嗽怎么办 小孩剧烈咳嗽喘吃了药不管用怎么办 做什么事都有点轻微的手抖怎么办 见到喜欢的人做事情就手抖怎么办 做了尿结石手术还尿血怎么办 宝宝十一个大运动发展缓慢怎么办 一岁八个月宝宝肚里有蛔虫怎么办 孕妇5个月了缺碘怎么办 4个月婴儿折了下腰怎么办 签了居间合同网签合同有异议怎么办 魅族3s手机返回键失灵怎么办 英语冠词和名词的关系用不好怎么办 炸好了的肉梭子不脆了怎么办 跑步的时候胸抖的疼怎么办 小区内安装了乒乓球桌扰民了怎么办 裁判出示红牌如果球员不走怎么办