您的位置: 首页 » 翻越奥义 » 通过goproxy(phuslu)实现HTTP/2代理

通过goproxy(phuslu)实现HTTP/2代理

作者:liyangyijie / 时间:March 7, 2016 /分类:翻越奥义 / 标签:none /阅览次数:24,829

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的证书。

github

上一篇 : 反代谷歌 下一篇 : 编译客户端备忘

已有 19 条评论

  1. fish fish

    我按你的一键安装脚本,一行一行运行命令
    root@localhost:~# acme.sh --issue --tls -d ${My_Domain}
    acme.sh: command not found
    root@localhost:~#

    怎么解决?

  2. jzp820927 jzp820927

    博主,有没有试过目前的最新版本:
    goproxy-vps_linux_amd64-r85.tar.xz

    我这边测试一直报错,没法使用。

    1. 没有问题啊,参数还是原来的。证书是Let's Encrypt的,没有设置什么鉴权,直接switchyomega+chrome。

      1. jzp820927 jzp820927

        不知道你运行的完整命令是什么?
        证书的公钥是不是 fullchain.pem?
        私钥是不是 privkey2.pem?

        1. 参数-addr=':1234' -certfile=fullchain.pem -keyfile=key.pem
          证书脚本https://github.com/Neilpang/acme.sh
          带自动续签重启gp-vps

          1. jzp820927 jzp820927

            诡异的很,之前也是这样运行的,一直报类似下面这样的错误,刚刚又一次运行测试,突然就好了,没有报错,代理也正常,太诡异了。

            2016/12/18 07:46:07 http: TLS handshake error from xxx.xxx.xxx.xxx:35018: EOF

            1. 也可能是干扰让你握手不成,可以试试443 465 995常用端口呗

  3. DL53 DL53

    64位的linux
    所以打的命令是gox -osarch="linux/amd64" -ldflags="-s"
    提示我不能找到
    github.com/cloudflare/golibs/lrucache
    等5个package。

    1. 可以直接下载它的二进制文件的
      https://github.com/phuslu/goproxy/releases/tag/goproxy
      那个vps_linux_amd64就是了。
      如果想自己编译,没有的包
      go get github.com/cloudflare/golibs/lrucache

      1. DL53 DL53

        我go get了其中四个,剩下一个go get也是提示找不到
        github.com/phuslu/goproxy/httpproxy/helpers: cannot find package "github.com/phuslu/goproxy/httpproxy/helpers" in any of:

        1. 自主和谐了,它的默认分支不是主分支。
          自己git下来吧
          mkdir -p $GOPATH/src/github.com/phuslu
          (cd $GOPATH/src/github.com/phuslu && git clone -b master https://github.com/phuslu/goproxy.git)

  4. JJcix JJcix

    话说博主,我用了你guthub的脚本装。。。然而连不上。。。能指导一下PC的switchyomega具体怎么设置么。。。什么鉴权信息,好晕。。。

    1. 这个脚本只是个步骤参考,不是一件安装脚本。
      事先你需要把域名解析到vps的ip上。
      le改名为acme.sh了,签证书的话需要参考他的github。
      另外,govps的鉴权有点问题。

      1. JJcix JJcix

        这个应该是现在最先进的翻墙方法了吧。。。
        我发现无论用您这里提到的方法,还是说wzyboy里面的步骤来搭建。到最后的时候,我用switchyomega连,都是显示CA证书的错误,我都无语了。。。我的CA证书使用openSSL自己签的。。。
        难道说整个正规的证书,传到VPS上面吗,再把域名指向过去。这对我这个门外汉估计又要琢磨好久。。。
        还是说能在CR里面设置忽略CA证书的错误,直接连起来用呢

        1. 建议您把域名A记录指向您的vps的IP上去,然后使用https://github.com/Neilpang/acme.sh
          签发服务器证书使用。这个签发的证书是广泛被信任的,不会存在错误。

          1. JJcix JJcix

            博主,我除了参考你的这个教程,实际依据这个做的https://github.com/freedocs/docs/blob/master/%E5%AE%89%E8%A3%85nghttp2%20https%E4%BB%A3%E7%90%86.md
            上面那个摸了好久,基本折腾熟了,哈哈准备用你说的acme.sh签证书,现在就等域名指向过去了,希望能成功

  5. Kn Kn

    设了用户名和密码,但是客户端不需要Auth就可以访问,证书是自动生成的,求解Auth什么原理?

    1. phuslu 表示这个还是个半成品

添加新评论