指令作用:

    匹配指定的请求URI

语法:

  location [=|~|~*|^~|@] /uri/ {configuration}

匹配命令:

  ~  表示执行一个正则匹配,区分大小写

  ~*  表示执行一个正则匹配,不区分大小写

  ^~     表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配其他。一般用来匹配目录

  =      进行普通字符精确匹配

      无前缀   用于普通字符串

   @     定义一个命名的location,使用在内部定向时,例如error_page,try_files

    
# 匹配字符串分为两种:普通字符串、正则表达式。
# ~和~* 用于正则表达式,其他前缀和无任何前缀都用于普通字符串。
# 正则表达式会根据匹配顺序,匹配到第一个正则表达式后停止搜索。
# 普通字符串匹配则无视顺序,只会选择最精确的匹配。

优先级:
  1、先匹配精确普通字符串,将最精确的匹配暂时存储;如果没有匹配上,进行普通字符串匹配,若匹配多个,按最长匹配,之后是^~匹配;
  2、然后按照配置文件中的声明顺序进行正则表达式匹配,只要匹配到一个正则表达式,则停止匹配,取正则表达式为匹配结果;
  3、如果所有正则表达式都匹配不上,则取1中的结果;
  4、最后匹配“/”,如果普通字符串和正则表达式都匹配不上,则报404 NOT FOUND。

  "="  > "完整路径" > "^~" > "~/~*" > "/"

 

示例:
location = /{        #只匹配“/”
}

location / {        #匹配任何请求,所有URI都是以“/”开始;更长字符匹配或正则表达式匹配会优先
}

location ^~ /Directory/ {     #匹配任何以/Directory/ 开始的请求,并停止匹配其他location
}

location ~* .(gif|jpg|jpeg)$ {    #匹配以gif、jpg、jpeg结尾的请求;但是遇到^~由它处理
}

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

常用配置指令:alias、root、proxy_pass

1、alias
    别名配置,用于访问文件系统,在匹配到URI后,指向alias配置的路径,如:
        location /test/ {
            alias /usr/local/;
        }
    #请求/test/file,返回文件/usr/local/file
        
    正则表达式的location中的alias,会使用正则表达式的值
        location ~* /test/(.+\.(gif|png|jpeg){
            alias /usr/local/test1/$1;
        }
    eg:/test/love.gif转化为/usr/local/test1/love.gif
   

2、root
    根路径配置,用于访问文件系统,在匹配到URI后,指向root配置的路径,并把请求路径附加到其后,如:
        location /test/ {
            root /usr/local/;
        }
    #请求/test/file,将会返回文件/usr/local/test/file。
   

3、proxy_pass
    代理配置,用于代理请求,匹配到URI后,转发请求到proxy_pass配置的URL。
        location /test/ {
            proxy_pass http://192.168.1.111:8089/;
        }

    eg:/test/hello转化到http://192.168.1.111:8089/hello
    #如果proxy_pass配置了“/”则不附加location的URI,
     没有配置“/”,则会附加。