首页源码go代理(golang配置代理)

go代理(golang配置代理)

编程之家2024-01-23188次浏览

一、[golang] fasthttp 使用http代理

golang net/http标准库的client是可以配置各种代理的,http/https/sock5等,不过fasthttp仅支持配置sock5代理,通过定义fasthttp dialfunc实现:

go代理(golang配置代理)

项目中碰到的问题是,ops只提供了用squid搭建的http代理,所以是想重新定义一个http代理的dialfunc,找了fasthttp github仓库的issue,作者提供了一个dialFunc

经测试,访问https的站点是OK的,访问http的站点不行,代理连接不上。先说一下http/https代理的区别,再说原因。

go代理(golang配置代理)

使用代理访问https网站时,会先发CONNECT请求,让代理与目标站点建立一个http tunnel,之后在这个tunnel基础上进行传输,对应到上面的dialFunc过程就是:

可以看到http站点是不需要发CONNECT请求的,而是直接将目标站点的url作为path填写在http请求头中。

为何上面的dialfunc访问http站点不行呢,查了squid代理的文档,发现squid默认会禁止非https站点通过CONNECT方法建立通道,自己搭了个squid代理去掉配置项,发现上面的dialfunc是可以访问http、https站点的,就是说http,https都先建立通过,再请求。

go代理(golang配置代理)

看了fasthttp的源码,没办法在请求前修改request header中的path为目标站点url,所以如果需要通过fasthttp使用http代理,那么可以使用上面的dialfunc,同时代理需要允许非443端口的站点可以建立通道。如果做不到这一点,那么还是建议使用标准库net/http的client,会更方便一点。

二、golang私有仓库依赖配置

golang私有仓库依赖配置

  版本要求:go 1.14+

   go mod配置:

     go env-w GOPRIVATE="gitlab.xxx.com"  //配置私有仓库域名:重要

     go env-w GONOPROXY="gitlab.xxx.com"  //此配置下的域名默认不走代理

     go env-w GONOSUMDB="gitlab.xxx.com"  //此配置下的域名默认不进行gosumdb校验

     go env-w GOINSECURE="gitlab.xxx.com"  //此配置下的域名默认采用http协议。有些公司的私有仓库采用http协议,而go mod默认采用                                                                                  https,请根据实际情况进行配置:重要

  账户及密码:

    因私有仓库一般都需要进行登录,所以可以通过隐藏文件进行用户名及密码配置。

    文件路径:~/.netrc  //默认Linux系统,

    文件内容:

       machine域名  //gitlab.xxx.com

       login账号

       password密码

三、APNS推送Golang SDK使用Proxy代理

苹果的消息推送是通过请求域名:实现的,该域名解析结果为美国,这引发了两个问题:

1、接口请求时间长,性能低,而且容易请求超时报错

2、高峰期推送请求错误率升高

总体思路:增加一个美国代理服务器,通过代理服务器请求苹果消息推送服务

1、原来流程

2、现在流程

3、具体方案实施选择

选择一:proxy服务器,部署一个正向代理服务,提供push消息的正向代理,消息通过代理服务器送达苹果服务端

选择二:proxy服务器,独立实现、部署一个标准的apns服务,负责 ios消息推送。将需要走美国节点的请求转发到该proxy节点

具体情况、具体分析,应思考的点:

问题一、苹果官方提供的SDK中,不支持设置代理服务器。官方SDK不适合更改,对以后系统更新不利

问题二、只有苹果的push服务需要代理,其他例如华为、小米、vivo不应走海外代理

问题三、代理安全性

问题四、代理方案下,有重试逻辑。如何准确定义和判断失败,可能会引起消息重复推送

问题五、实现简单、有效,正向代理方式:只需实现一个实例化对象方法,其他利用原始sdk即可。独立apns服务方式:需要实现一个apns服务,国内、国外均需服务部署,需要增加独立的开发和运营成本,另外还得改造调用服务,实现请求调度,优点服务独立、单一,具备一个单独微服务条件

github.com/sideshow/apns2

方法一:修改SDK文件

第一步:设置环境变量

第二步:修改apns2.NewClient方法

方法二:从新定义一个NewClient方法

exchange账户(什么是Microsoft Exchange帐户)浙大邮箱(苹果添加浙大邮箱)