nginx location语法

语法规则

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作为方向代理服务器存在。


原文出处:/show_1EF5xPswrNJu.html