使用Caddy快速搭建http2 proxy

Caddy介绍

Caddy是一个使用Golang开发的http服务器,其主打的特点就是快速支持https和HTTP2。本站的博客也是使用它搭建的,详细搭建过程可以参考这里。最近在其更新的0.10.7中,支持了Froward Proxy,Chrome浏览器也内建了对HTTP2 proxy的支持。

Caddy的Proxy支持一下功能:

  • HTTP2 Proxy
  • Probe resistance,当验证错误时,不会返回HTTP 407 错误。当有Probe进行探测时,其不会就直接暴露出自己是一个Proxy(实验阶段,比较有意思)
  • Basic Auth
  • IP hiding
  • Servers PAC file

步骤

  • 准备

为了支持HTTTPS和HTTP2,首先需要准备一个域名以及服务器。

  • 下载Caddy

Caddy的下载页在这里,他是按照你选择的操作系统和插件类型来下载二进制binary(有点好奇它是怎么做到的,穷举么)。在下载选择的插件时,一定要选上http.forwardproxy,这样在下载的二进制包中才会包含这个功能。对于Linux下的下载地址见可以直接点击此处

  • 解压安装

下载后的文件是个tar包,解压并把他放到任何你想放的地方。里面就一个Caddy的可执行文件。

  • 编写CaddyFile配置文件

Caddy的配置是靠一个CaddyFile的配置文件来进行配置的,其配置语法非常简单,和Nginx的配置文件很类似。如下就是一个最简单的配置文件:

http://example.com:443 {
gzip
log access.log
forwardproxy
}

可以看到直接将域名和端口写到配置文件中,在对于的配置块中,我们打开了gzip选项,启用了log日志以及forwardproxy功能。 详细的forwardproxy功能详见forwardproxy,上面提到的功能配置项都有了。

NOTICE:由于启动时需要从LCE获取HTTPS证书,所以首次启动需要将本地443端口的程序关闭,获取到证书之后就可以开启了。

  • 运行Proxy程序
$ ./caddy --conf Caddyfile

运行起来之后,就可以在浏览器中设置HTTP2的访问了。对于SwitchyOmega而言,代理协议写HTTPS,然后就能正常使用Proxy了。

  • 设置驻守

可以采用supervisord把这个程序监控起来,失败了就重启。具体可以看supervisor的相关资料。

FIN

依托LCE和Caddy内建的HTTP2功能,在加上Caddy简单易用的插件开发功能,使得我们可以抛弃nghttpx和Squid这一套,直接就能够使用的HTTP2 Proxy。

还记得一开始折腾HTTP2 Proxy的痛苦,现在不用了,直接一次性搞定。让我畅游HTTP2。感谢Caddy和Sergey Frolov