nginx配置文件解析算法

当一个请求到达时,nginx通过如下算法确定最终用哪一个block来serve这次请求。

  1. listen匹配,nginx会先把所有server的ip:port用默认值补全,然后和目标请求的ip:port匹配,匹配优先级如下
    1. 唯一完全匹配——直接选中server
    2. 最高匹配度的一批server——比较server_name
  2. server_name匹配
    1. 完全匹配——直接选中server
    2. 尝试把请求host的第前一级域名变成*号到配置中去匹配——选中server
    3. 尝试把请求host的最后一级域名变成*号到配置中去匹配——选中server
    4. 尝试把请求host与配置中正则表达式的server_name去匹配——选中server
    5. 选中default server
  3. location匹配
    1. 带有 = 修饰符,能完全匹配的location——直接选中
    2. 寻找最长的前缀匹配结果,如存在,且带有 ^~ 修饰符,直接选中,若不带修饰符,暂存,然后看正则表达式location匹配结果
    3. 如果前缀匹配location的暂存结果中,有能匹配到的正则表达式location,则那个location优先级置顶,最终优先级最高的location被选中
    4. 如果没有正则表达式location被选中,之前暂存的前缀location被选中