首页 > 系统相关 >Linux(centos)接口代理策略

Linux(centos)接口代理策略

时间:2023-03-19 20:14:54浏览次数:40  
标签:http err centos 0.1 代理 接口 ssr Linux go

Linux(centos)接口代理策略

前言

目的:实现一个接口转发,代理访问qiang内不能访问的接口。

实现方式:

  1. 直接使用go的第三方ssr包;(有报错,可能是版本不对,未实现)
  2. Linux直接安装ssr,使用Privoxy启动本地代理,go项目中直接使用本地代理。

Linux代理

  1. 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
    
  2. 配置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
    }
    
  3. 测试服务是否开启成功

    # 返回代理站点的地址
    curl --socks5 127.0.0.1:8118 http://httpbin.org/ip
    
  4. Privoxy安装

    说明:shadowsocksr是一个socket5服务,需要使用Privoxy把流量转到http/https上

    # 安装privoxy
    yum -y install privoxy
    
    # 启动Privoxy
    systemctl start privoxy
    # 查看Privoxy状态
    systemctl status privoxy
    # Privoxy开机启动
    systemctl enable privoxy
    
  5. 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
    
  6. 代理测试

    # 全局代理时使用
    curl http://httpbin.org/ip
    

go实现接口代理

  1. 代码实现

    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)
    }
    
    
  2. 打包与部署

    # 打包
    # 切换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
    
  3. 测试

    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

相关文章

  • linux理论知识 理论知识1.1文件后缀
    1.作用是说明和注释一个文件的性质2与文件类型无关1.2常见的压缩文件后缀名1.gz   2.bz2  3.xz  4zip  5.far  6.tar.gz  7.tar.bz2、2.归档和......
  • linux理论知识
    b:同等压缩比例时,压缩率更高,文件最小。c:仅能只对文件操作,不支持对目录操作5.0.2其他5.0.0.1bzcat:不解压缩的前提下查看文本文件内容;5.0.0.2bzgrep:不解压缩的前提下......
  • linux理论知识性
    b:同等压缩比例时,压缩率更高,文件最小。c:仅能只对文件操作,不支持对目录操作5.0.2其他5.0.0.1bzcat:不解压缩的前提下查看文本文件内容;5.0.0.2bzgrep:不解压缩的前提下......
  • 网络系统管理Linux环境——10.AppSrv之DNS
    题目要求服务器AppSrv上的工作任务3. DNS(BIND)为chinaskills.cn域提供域名解析。为www.chinaskills.cn、download.chinaskills.cn和mail.chinaskills.cn提供解析。启用内外......
  • 网络系统管理Linux环境——11.AppSrv之APACHE2
    题目要求服务器AppSrv上的工作任务4. APACHE2安装apache服务;服务以用户webuser系统用户运行;全站点启用TLS访问,使用本机上的“CSKGlobalRootCA”颁发机构颁发,网站证书信......
  • 网络系统管理Linux环境——12.AppSrv之MAIL(POSTFIX-SMTPS & DOVECOT-IMAPS)
    题目要求服务器AppSrv上的工作任务5. MAIL(POSTFIX-SMTPS&DOVECOT-IMAPS)Postfix​​​sdskill.com​​​​​的邮件发送服务器支持smtps(465)协议连接,使用Rserver颁发......
  • Linux下的awk用法详解
    (Linux下的awk用法详解)一、awk介绍1.AWK是一种处理文本文件的语言,是一个强大的文本分析工具。之所以叫AWK是因为其取了三位创始人AlfredAho,PeterWeinberger,和Br......
  • 网络系统管理Linux环境——15.StorageSrv之NFS
    题目要求服务器AppSrv上的工作任务2. NFS共享/webdata/目录;用于存储AppSrv主机的WEB数据;仅允许AppSrv主机访问该共享。项目实施关闭selinux跟防火墙:[root@storagesrv~]#......
  • 网络系统管理Linux环境——16.StorageSrv之VSFTPD
    题目要求服务器AppSrv上的工作任务3. VSFTPD禁止使用不安全的FTP,请使用“CSKGlobalRootCA”证书颁发机构,颁发的证书,启用FTPS服务;用户webadmin,登录ftp服务器,根目录为/we......
  • 网络系统管理Linux环境——17.StorageSrv之SAMBA
    题目要求服务器AppSrv上的工作任务4. SAMBA创建zhangsan和lisi用户用于测试文件共享;创建samba共享,本地目录为/data/share1,要求:共享名为share1。仅允许zhangsan用户能上传......