nginx学习笔记(2):location块

12

1.基本语法

location [修饰符] <匹配模式> {
    # 处理指令
}

2.修饰符匹配顺序

按照优先级从高到低排序:

  • = 表示精确匹配

  • ^~ 表示uri以某个常规字符串开头,理解为匹配url路径即可(非正则)

  • ~  表示区分大小写的正则匹配

  • ~* 表示不区分大小写的正则匹配

  • !~!~*分别为区分大小写不匹配及不区分大小写不匹配的正则

  • / 通用匹配,任何请求都会匹配到

优先级:

  • 等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他location的匹配项

  • ^~和通用匹配。使用前缀匹配,不支持正则表达式,如果有多个location匹配成功的话,不会终止匹配过程,会匹配表达式最长的那个(下方有例子)

  • 如果上一步得到的最长的location为^~类型,则表示阻断正则表达式,不再匹配正则表达式

  • 如果上一步得到的最长的location不是^~类型,继续匹配正则表达式,只要有一个正则成功,则使用这个正则的location,立即返回结果,并结束解析过程

3. root 和 alias 指定路径的区别。

#root(根目录)
location /abc {
        root /var/www;

    }
#处理方式: root路径+location路径  
# http://192.168.80.20/abc/xy101/scj.html  -->  /var/www/abc/xy101/scj.html
#alias(别名目录、虚拟目录)
location /abc {
        alias /var/www;               
    }
# 处理方式: alias路径替换location路径  
# http://192.168.80.20/abc/xy101/scj.html  -->   /var/www/xy101/scj.html

4."/"

proxy_pass 中结尾有“/”,表示绝对路径,此时代理后的url:proxy_pass+原始url(去除匹配上的)

proxy_pass 中结尾没有“/”,表示相对路径,代理后的url:proxy_pass+原始url

1.举例:访问http://192.168.1.1/proxy/test.html

#第一种:
location /proxy/ {
proxy_pass http://127.0.0.1/;
}
#代理到URL:http://127.0.0.1/test.html

#第二种(相对于第一种,最后少一个 / )
location /proxy/ {
proxy_pass http://127.0.0.1;
}
#代理到URL:http://127.0.0.1/proxy/test.html

#第三种:
location /proxy/ {
proxy_pass http://127.0.0.1/aaa/;
}
#代理到URL:http://127.0.0.1/aaa/test.html

#第四种(相对于第三种,最后少一个 / )
location /proxy/ {
proxy_pass http://127.0.0.1/aaa;
}
#代理到URL:http://127.0.0.1/aaatest.html

作者:金星show
链接:https://www.jianshu.com/p/b010c9302cd0
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

5.proxy_pass可在server块和location块中使用

1.在server中:

server段使用只需要提供域名或ip地址和端口。可以理解为端口转发,可以是tcp端口,也可以是udp端口。

2.在location中:

location中的if段,limit_except段中使用,处理需要提供域名或ip地址和端口外,还需要提供协议,如"http"或"https",还有一个可选的uri可以配置