如果你愿意帮助hiproxy编写文档,请联系zdying@live.com, 谢谢!

If you are willing to help hiproxy to write documentation, please contact zdying@live.com, thank you!

代码块

hiproxy的代码块,分为三类:

  • 全局块:所有的配置文件中不在其他块的代码,都在全局块中;
  • domain块:位于全局块中;
  • location块:位于domain块中;

作用域

hiproxy 配置文件中涉及到的作用域有5种:

  • 全局作用域全局块对应的作用域。这里的变量可以在任何地方访问到;
  • domain作用域domain块对应的作用域。
  • location作用域location块对应的作用域。
  • request作用域:隐式作用域,不对应具体的代码块,这些作用域中的指令,可以分布在任何代码块中。
  • response作用域:隐式作用域,不对应具体的代码块,这些作用域中的指令,可以分布在任何代码块中。

代码块层级关系

  1. global
    |- domain
    |- location
    |- location
    |- ...
    |- domain
    |- location
    |- location
    |- ...

变量查找

当前作用域中查找变量的规则为:

  • 如果当前作用域有这个变量,返回 这个变量的值。
  • 查找上一级作用域,如果上一级作用域中有这个变量,返回 这个变量的值。
  • 否则,如果上一级作用域是全局作用域,返回 变量名称(包括$符号)。
  • 重复步骤[2-3]

指令执行

代码块中的指令在对应的时机(request/response)会自动执行,此外,还会执行上一级代码块中的指令,比如:

  1. www1.test.com => {
    # 1
    proxy_set_header Host www.test.com;

    location / {
    # 2
    proxy_pass http://52.88.88.88/;
    }

    location /index.html {
    # 3
    proxy_pass http://127.0.0.1:8800/girl/view/index.html;
    }

    location ~ /\/(native|gallery|picture|font)\/(.*)/ {
    # 4
    proxy_pass http://88.88.88.88/$1/$2;
    }
    }

上面的配置中,在执行#2、#3和#4处的指令同时,都会执行配置在#1处的指令,也就是说:

//index.html/\/(native|gallery|picture|font)\/(.*)/对应的请求,都会加上请求头部Host,值为www.test.com