由于公司最近在做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了
假如你看到了这篇文章,如果有幸,你知道的话,请在评论中告诉我,不胜感激