Linux(centos)接口代理策略
前言
目的:实现一个接口转发,代理访问qiang内不能访问的接口。
实现方式:
- 直接使用go的第三方
ssr
包;(有报错,可能是版本不对,未实现) - Linux直接安装
ssr
,使用Privoxy
启动本地代理,go项目中直接使用本地代理。
Linux代理
-
SSR客户端安装
# 下载ssr安装和启动脚本 wget https://raw.githubusercontent.com/the0demiurge/CharlesScripts/master/charles/bin/ssr # 赋予操作权限 chmod +x ssr # 拷贝脚本文件 cp ssr /usr/local/bin/ssr # 测试时JSON文件处理工具 yum install jq # 查看ssr帮助 ssr # 安装ssr客户端 ssr install # 配置并启动 # 配置文件在安装目录下:/.local/share/shadowsocksr/config.json ssr config # 卸载 ssr uninstall
-
配置SSR客户端参数
{ "server": "xxxxxxx", // 服务器地址 "server_ipv6": "::", "server_port": 7061, // 服务器端口号 "password": "xxxx", // 服务器端密码 "method": "chacha20-ietf", // 加密 "protocol": "auth_aes128_md5", // 协议 "protocol_param": "132927:9pusJaRBeoKrOjhD", // 协议参数 "obfs": "http_simple", // 混淆方式 "obfs_param": "2574a132927.microsoft.com", // 混淆参数 "speed_limit_per_con": 0, "speed_limit_per_user": 0, "local_address": "127.0.0.1", // 本地服务地址 "local_port": 1080, // 本地服务地址 "additional_ports" : {}, //开多个端口号时使用 "additional_ports_only" : false, // "timeout": 60, //超时时间 "udp_timeout": 120, "dns_ipv6": false, "connect_verbose_info": 0, "redirect": "", "fast_open": false }
-
测试服务是否开启成功
# 返回代理站点的地址 curl --socks5 127.0.0.1:8118 http://httpbin.org/ip
-
Privoxy安装
说明:
shadowsocksr
是一个socket5服务,需要使用Privoxy
把流量转到http/https上# 安装privoxy yum -y install privoxy # 启动Privoxy systemctl start privoxy # 查看Privoxy状态 systemctl status privoxy # Privoxy开机启动 systemctl enable privoxy
-
Privoxy配置
# /etc/privoxy/config # 配置privoxy配置文件 vi /etc/privoxy/config listen-address 127.0.0.1:8118 # 8118 是默认端口,不用改 forward-socks5t / 127.0.0.1:1080 . #转发到本地端口
全局代理(可选)
# /etc/profile vi /etc/profile export http_proxy=http://127.0.0.1:8118 export https_proxy=http://127.0.0.1:8118 source /etc/profile
-
代理测试
# 全局代理时使用 curl http://httpbin.org/ip
go实现接口代理
-
代码实现
package main import ( "fmt" "io/ioutil" "log" "net/http" "os" ) func main() { http.HandleFunc("/", handler) log.Fatal(http.ListenAndServe(":8080", nil)) } func handler(w http.ResponseWriter, r *http.Request) { // 设置代理服务器地址 os.Setenv("HTTP_PROXY", "http://127.0.0.1:8118") os.Setenv("HTTPS_PROXY", "http://127.0.0.1:8118") // 设置代理服务器地址 // proxyUrl, err := url.Parse("http://127.0.0.1:1080") // if err != nil { // fmt.Println("Failed to parse proxy URL:", err) // return // } // // 创建带有代理的 Transport 对象 // transport := &http.Transport{ // Proxy: http.ProxyURL(proxyUrl), // } // 创建带有代理的 HTTP 客户端 client := &http.Client{ // Transport: &http.Transport{ // Proxy: proxy, // }, } // http://example.com为自己要代理的地址 targetReq, err := http.NewRequest(r.Method, "http://example.com", r.Body) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } targetReq.Header = r.Header targetResp, err := client.Do(targetReq) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } defer targetResp.Body.Close() body, err := ioutil.ReadAll(targetResp.Body) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } for header, values := range targetResp.Header { for _, value := range values { w.Header().Add(header, value) } } w.WriteHeader(targetResp.StatusCode) w.Write(body) fmt.Printf("Forwarded request from %s to %s\n", r.RemoteAddr, targetURL) }
-
打包与部署
# 打包 # 切换linux环境 go env -w GOOS=linux # 编译打包 go build -o hello ./hello.go # 部署 # 将hello文件复制到linux文件里,建议路径为:/projects/go/hello # 启用进程守护 # 在/etc/systemd/system 目录下创建一个 go.service 文件,用来描述你的服务 [Unit] Description=My Go Service [Service] ExecStart=/projects/go/hello Restart=always StandardOutput=syslog StandardError=syslog [Install] WantedBy=multi-user.target # 重新加载 systemd 守护进程 systemctl daemon-reload # 启动服务 systemctl start go # 查看服务 systemctl status go # 启动服务 systemctl stop go # 开机启动 systemctl enable my-go-service
-
测试
postman访问:
服务器地址:8080
,查看返回结果。
内容参考地址:
https://www.ishells.cn/archives/linux-ssr-server-client-install
https://zhuanlan.zhihu.com/p/514126016
标签:http,err,centos,0.1,代理,接口,ssr,Linux,go From: https://www.cnblogs.com/penxxy/p/17234070.html