有关nginx location规则

由于公司最近在做nginx相关项目,研究了一下location的规则,主要参考的博文为http://www.jb51.net/article/47761.htm 的文章,但是自己实际操作一下后,发现了一些问题。

location的优先级是这样的

假设访问的路径为 127.0.0.1/a/1.jpg

则优先级为 location = /a/1.jpg > location /a/1.jpg > location ^~ /a/ > location ~*\.jpg$ > location /a/ > location /

然后我就根据步骤开始做下去了

#1    
location / {
   return 500;
}
#2
location /a/ {
    return 404;
}
#3
location ~* \.jpg$ {
    return 403;
}
#4
location ^~ /a/ {
    return 402;
}
#5
location  /a/1.jpg {
    return 401;
}
#6
location = /a/1.jpg {
    return 400;
}

1.先把#2的所有内容注销了,不注销的话肯定是报重复的错误,nginx重新加载一下

访问一下127.0.0.1/a/1.jpg得到的返回值为 400

2.然后把#6内的所有内容注销一下,nginx重新加载, 重新访问127.0.0.1/a/1.jpg,得到的返回值为

403 ! 不是文章中的 401

3.继续做下去吧,把#3内的所有内容注销,nginx重新加载,重新访问127.0.0.1/a/1.jpg,得到的返回值为 401

4.然后把#5内的注销掉,nginx重新加载,重新访问127.0.0.1/a/1.jpg,得到的返回值为 402

5.接着把#4内的内容注销,但是需要把#2的内容恢复一下,nginx重新加载,重新访问127.0.0.1/a/1.jpg,得到的返回值为 404

在这里面顺序居然变为

location = /a/1.jpg > location ~*\.jpg$ > location /a/1.jpg > location ^~ /a/ > location /a/ > location /

既然这样只能单独摘出来

1. 有#3和#4的时候

#3
location ~* \.jpg$ {
    return 403;
}
#4
location ^~ /a/ {
    return 402;
}

访问127.0.0.1/a/1.jpg 得到的返回值居然是 402 ,按照上面的结果应该是403啊

2.有#4和#5的时候

#4
location ^~ /a/ {
    return 402;
}
#5
location  /a/1.jpg {
    return 401;
}

访问127.0.0.1/a/1.jpg 得到的返回值是 401,符合上面的顺序

3.在#3和#5的时候

#3
location ~* \.jpg$ {
    return 403;
}
#5
location  /a/1.jpg {
    return 401;
}

访问127.0.0.1/a/1.jpg 得到的返回值是 403

4.在有#3和#4和#5同时在的时候

#3
location ~* \.jpg$ {
    return 403;
}
#4
location ^~ /a/ {
    return 402;
}
#5
location  /a/1.jpg {
    return 401;
}

访问一下127.0.0.1 又得到403了

假如你看到了这篇文章,如果有幸,你知道的话,请在评论中告诉我,不胜感激

时间: 2024-08-25 00:09:26

有关nginx location规则的相关文章

nginx location 规则优先级

一 nginx  location 匹配命令 ~   #表示执行一个正则匹配,区分大小写 ~*  #表示执行一个正则匹配,不区分大小写 ^~  #表示普通字符匹配,如果该选项匹配,只匹配该选项, 不匹配别的选项,一般用来匹配目录 =   #进行普通字符精确匹配 二 nginx location 匹配优先级(与location在配置文件中的顺序无关) 1=  精确匹配.如果发现精确匹配,nginx停止搜索其他匹配模式. 2    普通字符匹配,正则表达式规则和长的块规则将被优先和和查询匹配,也就是

nginx location规则优先级

nginx服务器在server块的多个location块中搜索是否有标准uri和请求字符串匹配,如果有多个可以匹配,就记录下来匹配度最高的一个.然后,服务器再用location块中的正则uri和请求字符串匹配,当第一个正则uri匹配成功,结束搜索,并使用这个location块处理此请求:如果正则匹配全部失败,就使用刚才记录的匹配度最高的location块处理此请求. location 优先级        nginx 的配置如下 server {         listen       80;

Nginx Location和Rewrite深入剖析

Nginx Location和Rewrite深入剖析 Nginx Location Nginx由内核和模块组成,其中内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端的请求映射到一个location block,而location是Nginx配置中的一个指令,用于访问的URL匹配,而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作. location功能是由ngx_http_index_module模块提供的. location常放在serve

2019.9.20 Nginx Location 及静动分离案例

一.Nginx正则及location匹配1.Nginx location规则匹配^~:标识符匹配后面跟一个字符=:精准匹配~:区分大小写的匹配~*:不区分大小写的匹配!~:对区分大小写的匹配取非!~*:对不区分大小写的匹配取非/:通用匹配2.正则表达式*:重复前面的字符0次或多次?:重复前面的字符0次或1次+:重复前面的字符1次或多次.:匹配除换行符以外的任意一个字符(a|b):匹配a或b^:以...开头$:以...结尾{n}:重复前面的字符n次{n,}:重复前面的字符n次或更多次{n,m}:重

详细解析 nginx uri 如何匹配 location 规则

location 是 nginx 配置中出现最频繁的配置项,一个 uri 是如何与多个 location 进行匹配的? 在有多个 location 都匹配的情况下,如何决定使用哪一个 location 作为匹配结果? 清晰内部机制之后,疑问自然迎刃而解. location 规则类型 根据官方文档,location 配置语法如下 Syntax: location [ = | ~ | ~* | ^~ ] uri { ... } location @name { ... } Default: - Co

Nginx Location配置总结

http://blog.sina.com.cn/s/blog_97688f8e0100zws5.html 语法规则: location [=|~|~*|^~] /uri/ { … }= 开头表示精确匹配^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可.nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格).~ 开头表示区分大小写的正则匹配~*  开头表示不区分大小写的正则匹配!~和!~*分别为区分大小写

nginx location配置

nginx location配置 location在nginx中起着重要作用,对nginx接收到的请求字符串进行处理,如地址定向.数据缓存.应答控制.代理转发等 location语法 location [=|~|~*|^~] uri {...} []部分是匹配类型,可以没有,其中各项含义: (1)= 精准匹配,请求字符串必须和uri完全相同时匹配成功 (2)~ 区分大小写的正则匹配 (3)~* 不区分大小写的正则匹配 (4)^~ 注意这个不是正则匹配,表示uri以普通字符串开头, (5)空 表示

codeigniter nginx rewrite规则配置【转】

转自:http://www.nginx.cn/1134.html nginx如何配置才能支持codeigniter ? 1. codeigniter的url美化去掉index.php 1 2 3 4 5 location / { root   html/gxtp; index  index.php; try_files $uri $uri/ /index.php?$uri&$args; } 2.与thinkphp一样codeigniter的url rewrite也是使用pathinfo来实现的,

Nginx Location配置总结及基础最佳实践

参考来源: http://blog.zol.com.cn/1067/article_1066186.html,http://flandycheng.blog.51cto.com/855176/280121 语法规则: location [=|~|~*|^~] /uri/ { … } = 开头表示精确匹配 ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可.nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空