配置

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

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

配置文件类型

hiproxy可以使用hosts来做简单的请求代理,对于复杂的配置使用跟Nginx语法类似的rewrite规则配置。

hosts

跟系统hosts语法一致,此外也支持端口号。hosts只能配置域名对应的ip和端口号,不支持详细的路由配置以及对请求响应做修改。更多详细信息请查看hosts。

hosts配置示例

## comment127.0.0.1 example.com# ip + port127.0.0.1:8800 blog.example.com life.example.com

rewrite

rewrite规则配置文件,可以使用更复杂的配置、满足复杂的使用场景。可以对路由进行详细的配置以及对请求响应做修改。rewrite配置的语法,跟Nginx语法非常类似。更多详细信息请查看rewrite。

rewrite配置示例

## 全局变量set $port 8899;set $ip   127.0.0.1;set $online 210.0.0.0;# 域名配置domain example.com {  location / {    proxy_pass http://$online/;  }  location /blog/ {    proxy_pass http://$ip:$port/blog/;    proxy_set_header from 'hiproxy';    set_header proxy 'hiproxy';  }}

配置文件位置

hiproxy推荐把配置文件存放在具体的项目根目录 (hosts文件名称为hosts,rewrite配置文件名称为rewrite),项目位于工作空间中,也就是类似如下结构:

workspace  ├── app-1 # 项目1  │   ├── hosts   # hosts文件  │   ├── rewrite # rewrite文件  │   └── src     # 项目代码  │   └── ...     # 其他文件  │  ├── app-2 # 项目2  │   ├── hosts   # hosts文件  │   ├── rewrite # rewrite文件  │   └── src     # 项目代码  │   └── ...     # 其他文件  │  └── app-3 # 项目3      ├── hosts   # hosts文件      ├── rewrite # rewrite文件      └── src     # 项目代码      └── ...     # 其他文件

这样的好处在于,这些配置文件可以提交代码仓库,团队成员共享,节约维护成本。hiproxy也能自动查找这些文件。

配置文件查找

如果是遵循上面的规则存放配置文件(包括配置文件的文件名),当hiproxy的工作空间为workspace目录时,能够自动查找到上面三个项目的配置文件,不需要手动指定配置文件。

如果没有遵循上面的规则,把配置文件存放在其他路径或者不是使用默认的文件名称(hosts文件默认文件名称为hosts,rewrite文件默认的文件名称为rewrite),需要在启动的时候,手动指定配置文件名称。

详情请查看配置文件查找。

配置文件更新

hiproxy支持两种代理方式:PAC(Proxy-Auto-Config)和普通代理。

默认情况下使用普通代理,启动时添加选项—pac-proxy会使用PAC代理。

不同的代理方式,对于配置文件更新的处理也不一样。

如果使用普通代理,配置文件更新之后,不用重启浏览器,直接更刷新浏览器即可生效。

但是如果使用PAC代理,如果新增了域名,目前.pac文件并不会立刻更新,需要手动刷新浏览器的代理文件。可以访问chrome://net-internals/#proxy然后点击Re-apply settings。

代理规则合并

所有配置文件中的规则最终都会合并到一个大的规则树中。也就是说配置了代理之后,在处理请求的时候,所有配置文件中的规则都是平等的。不同域名中的规则互不影响。相同域名中的规则合并,如果有重复的路由,后加载的配置文件中的路由覆盖之前加载的配置文件内容 。

比如,有两个配置文件workspace/blog/rewrite和workspace/docs/rewrite,文件内容如下:

## workspace/blog/rewritedomain hiproxy.org {  location /blog/ {    proxy_pass http://127.0.0.1:8000/;  }}domain blog.hiproxy.org {  location / {    proxy_pass http://127.0.0.1:8000/;  }}
``` ```
## workspace/docs/rewritedomain hiproxy.org {  location /docs/ {    proxy_pass http://127.0.0.1:9000/;  }}

合并之后的规则为:

## 合并之后的规则domain hiproxy.org {  location /blog/ {    proxy_pass http://127.0.0.1:8000/;  }}domain hiproxy.org {  location /docs/ {    proxy_pass http://127.0.0.1:9000/;  }}domain blog.hiproxy.org {  location / {    proxy_pass http://127.0.0.1:8000/;  }}