通过goproxy(phuslu)实现HTTP/2代理
goproxy的vps版本,实质是上HTTP/2代理。
如果看过wzyboy关于搭建HTTP/2代理的文章,这里的govps=nghttpx+Squid。
Golang版本不需要复杂依赖,编译好的二进制文件,可以在适合的系统中直接使用。
如果不想重复编译的话,1、2步可以省掉,直接使用编译好的适合自己系统的二进制文件。
1,搭建简易Golang环境
参见http://www.fanyueciyuan.info/fq/google-nginx-ezgoo.html中的搭建Golang环境。
Golang选择1.6以及以上版本。
2,编译二进制文件
获取需要的额外库
go get github.com/golang/glog go get github.com/phuslu/http2
获取goproxy服务器版本源码
git clone -b server.vps https://github.com/phuslu/goproxy.git
使用gox编译文件,这里以编译用于32位linux的文件为例。
cd goproxy
gox -osarch='linux/386' -ldflags='-s'
稍等片刻,可见编译好的文件。
3,服务端配置
可以把生成的文件放到/opt文件夹下,便于管理。
习惯性选择使用supervisor来解决进程守护的问题,你也可选择其他方法。
下面是supervisor基本配置文件,debian下直接放到/etc/supervisor/conf.d文件夹下
[program:govps] command=/opt/govps -addr=':25' -auth='user:pass' -certFile='/my.crt' -keyFile='/my.key' autostart=true autorestart=true user=root
用到了25端口,需要root权限。
govps可以自动生成服务端所需要的自签证书,上面的certFile、keyFile项目可以不填写,不过这里强烈建议使用购买的证书或者免费证书。如果使用Let's Encrypt,几乎就是秒签。
4,客户端配置
无论是python版的GoA,还是Golang版的GoP都是兼容服务端的。甚至只要支持HTTPS代理的客户都可以,例如MEOW。
GoA版本需要把proxy.user.ini文件中的vps段落参考如下进行修改
[vps] enable = 1 listen = 127.0.0.1:8088 fetchserver = https://user:pass@9.9.9.9:25/
不过最建议使用的还是switchyomega+chrome,不需要什么客户端,原生态HTTP/2支持。
switchyomega中协议选择https,填上服务器的域名,最后完成鉴权信息。
在直接使用switchyomega+chrome+starSSL证书情况下,开网页看视频的体验较之原版ss有极大提升,但是服务器端内存占用较大,10~25兆左右。
5,搭建参考脚本
这里可参考我的脚本进行服务器的安装,这里直接使用的是Let's Encrypt的证书。
已有 19 条评论
我按你的一键安装脚本,一行一行运行命令
root@localhost:~# acme.sh --issue --tls -d ${My_Domain}
acme.sh: command not found
root@localhost:~#
怎么解决?
这个教程已经过时了,你需要参考
https://www.fanyueciyuan.info/fq/goproxy-vps-443.html
https://github.com/phuslu/gop/issues/1470
博主,有没有试过目前的最新版本:
goproxy-vps_linux_amd64-r85.tar.xz
我这边测试一直报错,没法使用。
没有问题啊,参数还是原来的。证书是Let's Encrypt的,没有设置什么鉴权,直接switchyomega+chrome。
不知道你运行的完整命令是什么?
证书的公钥是不是 fullchain.pem?
私钥是不是 privkey2.pem?
参数-addr=':1234' -certfile=fullchain.pem -keyfile=key.pem
证书脚本https://github.com/Neilpang/acme.sh
带自动续签重启gp-vps
诡异的很,之前也是这样运行的,一直报类似下面这样的错误,刚刚又一次运行测试,突然就好了,没有报错,代理也正常,太诡异了。
2016/12/18 07:46:07 http: TLS handshake error from xxx.xxx.xxx.xxx:35018: EOF
也可能是干扰让你握手不成,可以试试443 465 995常用端口呗
64位的linux
所以打的命令是gox -osarch="linux/amd64" -ldflags="-s"
提示我不能找到
github.com/cloudflare/golibs/lrucache
等5个package。
可以直接下载它的二进制文件的
https://github.com/phuslu/goproxy/releases/tag/goproxy
那个vps_linux_amd64就是了。
如果想自己编译,没有的包
go get github.com/cloudflare/golibs/lrucache
呗
我go get了其中四个,剩下一个go get也是提示找不到
github.com/phuslu/goproxy/httpproxy/helpers: cannot find package "github.com/phuslu/goproxy/httpproxy/helpers" in any of:
自主和谐了,它的默认分支不是主分支。
自己git下来吧
mkdir -p $GOPATH/src/github.com/phuslu
(cd $GOPATH/src/github.com/phuslu && git clone -b master https://github.com/phuslu/goproxy.git)
话说博主,我用了你guthub的脚本装。。。然而连不上。。。能指导一下PC的switchyomega具体怎么设置么。。。什么鉴权信息,好晕。。。
这个脚本只是个步骤参考,不是一件安装脚本。
事先你需要把域名解析到vps的ip上。
le改名为acme.sh了,签证书的话需要参考他的github。
另外,govps的鉴权有点问题。
这个应该是现在最先进的翻墙方法了吧。。。
我发现无论用您这里提到的方法,还是说wzyboy里面的步骤来搭建。到最后的时候,我用switchyomega连,都是显示CA证书的错误,我都无语了。。。我的CA证书使用openSSL自己签的。。。
难道说整个正规的证书,传到VPS上面吗,再把域名指向过去。这对我这个门外汉估计又要琢磨好久。。。
还是说能在CR里面设置忽略CA证书的错误,直接连起来用呢
建议您把域名A记录指向您的vps的IP上去,然后使用https://github.com/Neilpang/acme.sh
签发服务器证书使用。这个签发的证书是广泛被信任的,不会存在错误。
博主,我除了参考你的这个教程,实际依据这个做的https://github.com/freedocs/docs/blob/master/%E5%AE%89%E8%A3%85nghttp2%20https%E4%BB%A3%E7%90%86.md
上面那个摸了好久,基本折腾熟了,哈哈准备用你说的acme.sh签证书,现在就等域名指向过去了,希望能成功
设了用户名和密码,但是客户端不需要Auth就可以访问,证书是自动生成的,求解Auth什么原理?
phuslu 表示这个还是个半成品