Xinu

nginx下location语法及proxy_pass详解
location语法学习location只有两类,正则location,普通location结论先普通,后正则,与...
扫描右侧二维码阅读全文
31
2020/03

nginx下location语法及proxy_pass详解

location语法学习

location只有两类,正则location,普通location

结论

  1. 先普通,后正则,与配置顺序无关
  2. 普通location之间的匹配顺序:按最大前缀匹配,首先要能匹配上,简单来说就是uri中要全包含该location,在全匹配的情况下,谁长选谁。
  3. 正则location之间的匹配顺序:按配置文件物理顺序匹配,只要匹配到一条,不再考虑后面的匹配结果。
  4. 普通location与正则location之间的匹配结果选择:
    普通location先匹配,匹配到了结果,取最大前缀的那一个,只是一个临时结果;会继续正则location的匹配,如果匹配到正则,则用匹配到的正则结果;

如果没有匹配到正则,则继续用普通匹配的那个结果。

  1. 如果在普通location中增加了 ^~ 或者 = 前缀,且匹配上了,则不再继续正则匹配。^~= 的区别是 = 是严格匹配,^~ 依然遵循普通匹配的最大前缀原则

常用正则

? : 重复0次或1次
+ : 重复1次或更多次
* : 重复0次或更多次
\d :匹配数字
^ : 匹配字符串的开始
$ : 匹配字符串的结束
{n} : 重复n次
{n,} : 重复n次或更多次
[c] : 匹配单个字符,如此处的字符 c
[a-z] : 匹配a-z小写字母的任意一个
(a|b|c):匹配a或b或c

location 反向代理 转发规则

  1. 如果 proxy_pass 转发的地址不包含URI,则地址会原封不动的追加到 转发的地址后面,如果有URI,则匹配部分不会被追加上。

    # 无URI情况
    location /api {
        proxy_pass 192.168.0.2;
    }
    # 访问地址 www.a.com/api/v1
    # 后端地址 192.168.0.2/api/v1
    
    # 有URI情况
    location /api {
        proxy_pass 192.168.0.3/s1;
    }
    # 访问地址 www.a.com/api/v2
    # 后端地址 192.168.0.2/s1/v2
  2. 保持结尾一致,location匹配表达式如果有 / 结尾,则proxy_pass 转发的地址也加上 /, 都没有就都不加。
Last modification:March 31st, 2020 at 04:11 pm

Leave a Comment