匹配命令
~ 正则匹配,区分大小写 ~* 正则匹配,不区分大小写 = 普通字符精确匹配,如果找到,停止搜索 ^~ 普通字符匹配(如果该选项匹配,只匹配该选项,一般用来匹配目录) / 通用匹配,如果没有其它匹配,任何请求都会匹配到 @ 定义命名的 location,使用在内部定向时,例如:error_page、try_files
|
匹配优先级(与在配置文件中的顺序无关)
1. 精确匹配 ”=“ 会第一个被处理。如果发现精确匹配,停止搜索。 2. 匹配最长的规则,如果这个规则带有 ^~ 修饰符,停止搜索。 3. 存储 #2 的最长匹配规则,然后按在配置文件中的定义顺序匹配正则表达,若匹配到正则表达式,停止搜索。 4. 若没有匹配到正则表达式,使用存储的 #2 的最长匹配。
|
官方文档
- Directives with the = prefix that match the query exactly. If found, searching stops.
- All remaining directives with conventional strings, longest match first. If this match used the ^~ prefix, searching stops.
- Regular expressions, in order of definition in the configuration file.
- If #3 yielded a match, that result is used. Else the match from #2 is used.
- = 前缀的指令严格匹配这个查询。如果找到,停止搜索。
- 所有剩下的常规字符串,最长的匹配。如果这个匹配使用 ^〜 前缀,搜索停止。
- 正则表达式,在配置文件中定义的顺序。
- 如果第三条规则产生匹配的话,结果被使用。否则,使用第二条规则的结果。
例子
error_page 404 = @fetch;
location @fetch { [ configuration X ] }
location = / { [ configuration A ] }
location / { [ configuration B ] }
location /documents/ { [ configuration C ] }
location ~ /documents/Abc { [ configuration CC ] }
location ^~ /images/ { [ configuration D ] }
location ~* \.(gif|jpg|jpeg)$ { [ configuration E ] }
location /images/ { [ configuration F ] }
location /images/abc { [ configuration G ] }
location ~ /images/abc/ { [ configuration H ] }
location ~* /js/.*/\.js
|
常用例子
静态文件
处理静态文件请求,这是 nginx 作为 http 服务器的强项,有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ { root /webroot/static/; }
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ { alias /webroot/res/; }
|
参考资料