Nginx中location的作用是根据匹配模式+URI来处理用户请求(转发请求给其他服务器处理或者查找本地文件)。
location语法是: location [ = | ^~ | ~ | ~* ] /URI { … }
其中的 “=”, “^~”, “~”, “~*” 指定匹配模式
location 的匹配先按照优先级匹配,同优先级的情况下,再按先后顺序匹配。(即不完全按照其在配置文件中出现的顺序进行匹配)
优先级顺序从高到低依次为:
- location = /uri1 # 精准匹配/uri1 (uri1必须完全一致才能匹配成功)
- location ^~ /uri2 # 带参前缀匹配 (uri2和请求url的开头相同就匹配成功)
- location ~ /uri3 # 正则匹配(区分大小写)
- location ~* /uri4 # 正则匹配(不区分大小写)
- location /uri5 # 普通前缀匹配 (uri5和用户请求url的开头相同就匹配成功,如果有多个普通匹配都匹配成功则按最长的)
- location / # 没有匹配成功的,走这条规则
1、先精准匹配 = ,精准匹配成功则会立即停止其他类型匹配;
2、没有精准匹配成功时,进行带参前缀匹配。先查找带有 ^~ 的前缀匹配,带有 ^~ 的前缀匹配成功则立即停止其他类型匹配;
3、4、= 和 ^~ 均未匹配成功前提下,查找正则匹配 ~ 和 ~* 。当同时有多个正则匹配时,按其在配置文件中出现的先后顺序优先匹配,命中则立即停止其他类型匹配;
5、1234均未匹配成功,则进入规则5,规则5多个匹配成功,则进入最长的规则(如有location /static,和location /static/img 两个普通前缀匹配, 当请求是/static/img/111.jpg时,第二个location匹配的更长,所以和/static/img匹配成功);