location会尝试根据用户请求中的URI来匹配上面的uri表达式,如果可以匹配,就会选择location{}块中的配置来处理用户请求。匹配方式是多样的。
location[=|~|~*] /uri/ {
...
}
~ 波浪写表示执行一个正则匹配,区分大小写
~* 表示执行一个正则匹配,不区分大小写
= 进行普通字符精确匹配
URI匹配模式
location的指令分为两种匹配模式
-
普通字符串匹配:以=开头或者没有带正则引导符号(~)规则
location /uri 普通匹配
前缀匹配
匹配采用最长匹配规则,即都匹配的情况下,会走匹配到长度最大的location
location =/uri 精准匹配
精准配置的优先级高于普通配置
-
正则匹配:以(~)开头或者(~*)开头的表示正则匹配
location ~* \\.(jpg|png|css|js|gif)$ { root html/images; }
匹配的优先级
-
首先看有没有精准匹配,如果有,则停止匹配过程
-
判断普通命中,如果有多个命中,记录下最长的命中结果,记录但不结束
-
继续判断正则表达式,按配置里的正则表达顺序为准,由上到下开始匹配,一旦匹配成功一个,立即返回结果并结束
a) 普通命中,顺序无关,因为按照命中长短来决定
b) 正则命中,顺序有关,因为是从前往后命中
实际使用建议
第一个必选规则
location =/ {
\#代理
proxy_pass http://tomcat:8080/index
}
第二个必选规则是处理静态文件请求,这是nginx最为http服务器的强项
有两种匹配模式,目录匹配或后缀匹配,任选其一或者搭配使用
location ^~/static/{
root /webroot/static/;
}
location ~*\.(gif|jpg|jpeg|png|css|js|ico)$ {
root /webroot/res/;
}
第三个规则就是通用规则,用来转发动态请求到后端服务器
非静态文件请求就默认是动态请求,根据实际请求处理
location / {
proxy_pass http://tomcat:8080
}