入侵Golang Httputil反向代理设置以处理更多请求
#网络开发人员 #go #networking

最近,我遇到了一个问题,在测试我的开源反向代理服务器Zoraxy时,Golang Offical Httputil反向代理会卡住。

GitHub logo tobychui / zoraxy

低功率设备的通用请求(反向)代理和转发工具。现在写了!

Zoraxy

通用请求(反向)代理和转发工具,用于低功率设备。现在用GO!

功能

  • 易于使用详细信息内系统说明的接口

  • 反向代理

    • 子域反向代理

    • 虚拟目录反向代理

  • 重定向规则

  • tls / ssl设置和部署< / p>

  • 按国家或IP地址(初学者的单个IP,CIDR或通配符)

  • 全局区域网络控制器Web UI(不包括Zerotier)

  • 集成的正常时间监视器

  • web-ssh终端

  • 实用程序

    • CIDR IP转换器
    • MDNS扫描仪
    • IP扫描仪
  • 其他

    • 基本的单公共管理模式
    • 容易系统集成的外部权限管理系统
    • 密码重置的SMTP配置

从源

构建

需要1.20或以上

用法

Zoraxy为独立模式提供了基本的身份验证系统。要在独立模式下使用它,请按照以下说明进行所需的部署平台。

独立模式

独立模式是def

您是否曾经尝试开设一个处于沉重负担的网站?连接只是在那里冻结,直到加载网站中的其他对象并释放一些连接,然后您的内容继续加载。这不应该发生,因为众所周知,GO可以使用其神奇的Go-Routine同时处理许多请求。这就是为什么我开始质疑Httputil.reverseproxy库的实现。

如果您不知道Golang源代码中有官方的HTTP反向代理,这是我在说的。

https://go.dev/src/net/http/httputil/reverseproxy.go

和源代码中,您会注意到反向代理结构对象中有一条线,该行使用称为http.transport的东西

// The transport used to perform proxy requests.

// If nil, http.DefaultTransport is used.

Transport http.RoundTripper

在调试几天并追踪GO源后,我注意到问题是HTTP.DefaultTransport预先设置的最大连接计数相对较低的限制。此设置是合理的,因为他们大多数时间都使用此反向代理用于服务单用户,而不是将其用作NGINX或APACHE反向代理的替代。

这就是为什么要修复它的原因,我将反向代理的修改版本包括在Zoraxy项目中,并进行了以下修改:

//Hack the default transporter to handle more connections
thisTransporter := http.DefaultTransport
thisTransporter.(*http.Transport).MaxIdleConns = 3000
thisTransporter.(*http.Transport).MaxIdleConnsPerHost = 3000
thisTransporter.(*http.Transport).IdleConnTimeout = 10 * time.Second
thisTransporter.(*http.Transport).MaxConnsPerHost = 0

现在,我的反向代理可以在给定时间与HTTP.DefaultTransport设置相比,可以提供更多的请求。