碎片杂文
🎭go实现简单的反向代理
00 分钟
2024-4-23
2024-4-23
type
status
date
slug
summary
tags
category
icon
password
Property
Apr 23, 2024 06:04 AM
简单记录一下我实现的过程和遇到的一些问题

加载配置文件

配置文件内容:
./config.json
将文件内容加载,放入data ,并且存放在ProxyTarget这个map[string]string
使用到了json.Unmarshal函数,函数签名如下
  • 参数列表:包含两个参数
    • 第一个参数是一个字节切片 data,表示包含 JSON 数据的字节切片。
    • 第二个参数是一个空接口类型 interface{},表示目标数据结构的指针,即指向将被填充的数据结构。
  • 返回值:一个 error 类型,表示解析过程中可能出现的错误,如果解析成功则返回 nil
  • 这个函数的作用是将 JSON 格式的数据解析为 Go 语言中的数据结构,并将解析结果存储到目标数据结构中

获取代理目标URL

http.Request中拿到请求的网址,并作为key从map中获取对应的value,使用url.Parse()将网址转换成*url.URL,返回

处理请求

由之前的部分拿到了代理目标的*url.URL后,使用httputil.NewSingleHostReverseProxy() 创建一个反向代理,再使用ServeHTTP()将传入的第二个参数 HTTP 请求转发到目标服务器。
注意需要将target的host一并传过去,否则会造成403forbidden

main

main()中要注意对错误的检查,并实现对端口的监听

参考

上一篇
Hello World!
下一篇
k8s-Controller

评论
Loading...