location 常用说明

https://zhuanlan.zhihu.com/p/137042956

#默认
location / {
    不加任何规则时,默认是大小写敏感,前缀匹配,相当于加了~与^~
}
location /abc/ {
}
location /qrwx {
}

匹配规则

操作符优先级:= ^~ ~ ~*

=  精准匹配 内容要同表达式完全一致才匹配成功
    匹配优先级最高。一旦匹配成功,则不再查找其他匹配项
^~  带参前缀匹配
    类型表达式。一旦匹配成功,则不再查找其他匹配项。

~  正则匹配(区分大小写)
~* 正则匹配(不区分大小写)
/xxx 普通前缀匹配,优先级低于带参数前缀匹配。
/     任何没有匹配成功的,都会匹配这里处理
!  取反

    #优先级1,精确匹配,根路径
    location =/ { 
    location = /abc/ { 
    #优先级2,以某个字符串开头,以av开头的,优先匹配这里,区分大小写
    location ^~ /av { 

    #优先级3,区分大小写的正则匹配,匹配/media*****路径
    location ~ /media {
          alias /data/static/;
    }

    #优先级4 ,不区分大小写的正则匹配,所有的****.jpg|gif|png 都走这里
    location ~* .*\.(jpg|gif|png|js|css)$ { 

location ~  \.(gif|jpg|png|js|css)$ { 区分大小写的正则匹配,若匹配成功,停止往下搜索正则,采用这一条

    #优先7,通用匹配 最后收尾
    location / { 

location !~ \.xhtml$ {区分大小写,匹配不已.xhtml结尾的
location !~* \.xhtml$ {不区分大小写,匹配不已.xhtml结尾的

URI结尾带不带/ 区别

  • URL尾部的 / 表示目录,没有 / 表示文件
  • 所以访问 /xxx/ 时,服务器会自动去该目录下找对应的默认文件
  • 如果访问 /xxx 的话,服务器会先去找 xxx 文件,找不到的话会将 xxx 当成目录,重定向到 /xxx/ ,去该目录下找默认文件
location  /doc {
  #访问 /doc 时,服务器首先去找doc文件,找不到则将doc当做目录,重定向到 /doc/,在该目录下找默认文件
  proxy_pass http://www.doc123.com
}
location  /doc/ {
  proxy_pass http://www.doc456.com
}

@内部跳转规则

location /index/ {
  error_page 404 @index_error;
}
location @index_error {
  .....
}
#以 /index/ 开头的请求,如果链接的状态为 404。则会匹配到 @index_error 这条规则上