logo
0
0
WeChat Login
7hc<dev@9kr.cc>
feat: 添加README并隐藏代理错误详情

Go-Reverse-Proxy

使用Golang开发的简单反向代理工具, 支持HTTP, HTTPS, WebSocket协议.

应用场景为本地开发调试, 安全性和可靠性未测试, 尽量避免在生产环境中使用.

功能特性

  • 支持HTTP/HTTPS/WS/WSS协议
  • 支持多站点配置, 每个站点可以独立配置协议开关, 证书路径, 日志路径等.
  • 支持自定义请求头设置, 隐藏或添加请求头.
  • 支持证书检查, 校验证书 CN/SAN 是否包含目标域名.

配置说明

配置文件使用 YAML 格式, 默认路径为 ./config.yml, 可通过 -config 参数指定.

命令行参数

参数说明
-config <path>指定配置文件路径, 默认 ./config.yml
-version显示版本号

全局配置 global

字段类型默认值说明
http.enabledbooltrue是否开启 HTTP 监听
http.portint80HTTP 监听端口
http.bindstring0.0.0.0HTTP 绑定地址
https.enabledboolfalse是否开启 HTTPS 监听
https.portint443HTTPS 监听端口
https.bindstring0.0.0.0HTTPS 绑定地址
log.levelstringinfo日志级别: debug / info / warn / error
log.filestring""日志文件路径, 空值输出到控制台

站点配置 sites[]

每个站点是一个独立的代理规则, 通过请求的 Host 头进行匹配.

字段类型必填默认值说明
namestring-站点唯一标识名称
domainstring-匹配的域名 (不含端口) , 如 www.example.com
enabledbooltrue是否启用该站点, 设为 false 时跳过加载和校验
protocols.httpbooltrue是否允许 HTTP 代理
protocols.httpsboolfalse是否允许 HTTPS 代理
protocols.wsboolfalse是否允许 WebSocket 代理
protocols.wssboolfalse是否允许加密 WebSocket 代理
tls.cert_filestring条件-TLS 证书 PEM 文件路径 (开启 HTTPS/WSS 时必填)
tls.key_filestring条件-TLS 密钥文件路径 (开启 HTTPS/WSS 时必填)
tls.verify_certbooltrue启动时校验证书 CN/SAN 是否包含目标域名, 支持通配符
backend.targetstring-后端服务地址, 如 http://127.0.0.1:3000
backend.timeoutint30后端请求超时时间 (秒)

请求头配置 headers

字段类型必填说明
headers.setmap向请求注入的自定义头, 支持变量 $remote_addr, $host
headers.hidelist需要从响应中移除的头名称列表

完整配置示例

global:
  http:
    enabled: true
    port: 80
    bind: "0.0.0.0"
  https:
    enabled: true
    port: 443
    bind: "0.0.0.0"
  log:
    level: "info"
    file: ""

sites:
  # 示例站点
  - name: "my-site"
    domain: "www.example.com"
    enabled: true
    protocols:
      http: true
      https: true
      ws: false
      wss: false
    tls:
      cert_file: "./certs/example.com.pem"
      key_file: "./certs/example.com.key"
      verify_cert: true
    backend:
      target: "http://127.0.0.1:3000"
      timeout: 30
    headers:
      set:
        X-Proxy-By: "Go-Reverse-Proxy"
        X-Forwarded-For: "$remote_addr"
      hide:
        - "X-Powered-By"

启动与使用

# 编译
go build -o go-reverse-proxy .

# 使用默认配置启动
./go-reverse-proxy

# 指定配置文件启动
./go-reverse-proxy -config /etc/proxy/config.yml

注意事项

  • 全局 HTTPS 监听的端口是所有站点共用的, 通过 SNI 自动区分不同域名的证书
  • 证书支持通配符. 如 *.example.com 可匹配 www.example.com, api.example.com
  • 禁用的站点 (enabled: false) 不会被校验, 可保留不完整的配置供后续启用
  • 后端错误的详细信息仅出现在服务端日志中, 不会暴露给客户端