nginx必备知识之location

语法: location [=|~|~*|^~] uri{…}
    location@name {…}
默认值:-
上线文:server,location
为某个请求URI(路径)建立配置
路径匹配在URI规范化以后进行,所谓规范化,就是先将URI中形如”%xx”的编码字符串进行解码,再解析URI中的相对路径”.”“和”..”部分,另外还可能会压缩相邻的两个或多个斜线成为一个斜线。
可以使用前缀字符串字符串或者正则表达式定义路径,使用正则表达式需要在路径开始添加”~*”前缀(不区分大小写),或者”~”前缀,(区分大小写)。为了根据请求URI查找路径,nginx先检查前缀字符串定义的路径(前缀路径),在这些路径中找到最精确匹配请求URI的路径,然后nginx按在配置文件中的出现顺序检查正则表达式路径,匹配上某个路径后即停止匹配并使用该路径的配置,否则使用最大浅醉匹配的路径和配置。
路径可以嵌套,但有例外,后面将提到。
正则表达式可以包含匹配组,结果可以被后面的其他指令使用。
如果最大前缀匹配的路径以”^~”开始,那么nginx不在检查正则表达式。
而且,使用”=”前缀可以定义URI和路径的精确匹配,如果发现匹配则终止路径查找,比如请求”/”出现频繁,定义”location = /”可以提高这些请求的处理速度,因为查找过程在第一次比较以后即结束,这样的路径明显不可能包含嵌套路径。
让我们用一个例子解释上面的说法
请求“/”匹配配置A, 请求“/index.html”匹配配置B, 请求“/documents/document.html”匹配配置C, 请求“/images/1.gif”匹配配置D, 请求“/documents/1.jpg”匹配配置E。

  1. location = / {
  2. [ configuration A ]
  3. }
  4. location / {
  5. [ configuration B ]
  6. }
  7. location /documents/ {
  8. [ configuration C ]
  9. }
  10. location ^~ /images/ {
  11. [ configuration D ]
  12. }
  13. location ~* \.(gif|jpg|jpeg)$ {
  14. [ configuration E ]
  15. }

开启或者关闭将请求URI中相邻两个或更多斜线合并成一个的功能。注意压缩URI对于前缀匹配和正则匹配的正确性是很重要的。没有开启这个功能时,请求“//scripts/one.php”将不能匹配

  1. location /scripts/ {
  2. ...
  3. }

而被按静态文件的流程处理,所以将它变换成“/scripts/one.php”。
如果URI中包含base64编码的内容,必须将斜线压缩调整成off,因为base64编码本身会使用“/”字符。 然而。出于安全方面的考虑,最好还是不要关闭压缩。

1
未经许可,不得转载,否则将受到作者追究,博主联系方式见首页右上角

该文章由 发布

这货来去如风,什么鬼都没留下!!!
发表我的评论
取消评论
代码 贴图 加粗 链接 删除线 签到