语法规则
location [=|~|~*|^~] /uri/ { … }
匹配模式及顺序:
location = /uri:精确匹配,只有完全匹配上才能生效。location ^~ /uri:对URL路径进行前缀匹配,并且在正则之前。location ~ pattern:开头表示区分大小写的正则匹配。location ~* pattern:开头表示不区分大小写的正则匹配。location /uri:不带任何修饰符,也表示前缀匹配,但是在正则匹配之后。location /:通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default。
例子
有如下匹配规则:
location = / {
#规则A
}
访问根目录/, 访问 http://localhost/ 将匹配规则A
location = /login {
#规则B
}
访问 http://localhost/login 将匹配规则B。
原因:匹配规则location = /login,表示完全匹配/login,url中的/login正好符合该规则
location ^~ /static/ {
#规则C
}
访问 http://localhost/static/a.html 将匹配规则C。
原因:匹配规则location ^~ /static/,表示开头必须是/static/,url中的/static/a.html正好符合该规则
location ~ \.(gif|jpg|png|js|css)$ {
#规则D,注意:是根据括号内的大小写进行匹配。括号内全是小写,只匹配小写
}
访问 http://localhost/a.gif , http://localhost/b.jpg 将匹配规则D
访问 http://localhost/static/c.png 则优先匹配到 规则C
location ~* \.png$ {
#规则E
}
访问 http://localhost/a.PNG 则匹配规则E, 而不会匹配规则D,因为规则E不区分大小写。
访问 http://localhost/b.png 将匹配规则D和规则E,但是规则D顺序优先,规则E不起作用
location !~ \.xhtml$ {
#规则F
}
location !~* \.xhtml$ {
#规则G
}
访问 http://localhost/a.xhtml 不会匹配规则F和规则G,
访问 http://localhost/a.XHTML 不会匹配规则G,(因为!)。规则F,规则G属于排除法,符合匹配规则也不会匹配到,所以想想看实际应用中哪里会用到。
location / {
#规则H
}
通用匹配规则,可以匹配任意一种url
访问 http://localhost/register 则匹配规则H
访问 http://localhost/category/id/1111 则最终匹配到规则H,因为以上规则都不匹配,这个时候nginx转发请求给后端应用服务器,比如FastCGI(php),tomcat(jsp),nginx作为方向代理服务器存在。