From 3be21757f61e0d99cfcf77241764fb98e4ab3582 Mon Sep 17 00:00:00 2001 From: Yuuuuu0 Date: Tue, 10 Feb 2026 19:58:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=89=80=E6=9C=89=E5=87=BA=E7=AB=99?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E6=94=AF=E6=8C=81=20HTTP=20=E4=BB=A3?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在无法直接访问外网的环境下(如内网服务器需要通过代理访问互联网), agent 的 websocket 上报、IP 地址获取、autodiscovery 注册等请求 无法走代理导致连接失败。 现在统一添加 http.ProxyFromEnvironment, 配置 http_proxy/https_proxy 环境变量即可生效,未配置时行为不变。 systemd 配置示例: [Service] Environment="http_proxy=http://your-proxy-ip:port" Environment="https_proxy=http://your-proxy-ip:port" Environment="HTTP_PROXY=http://your-proxy-ip:port" Environment="HTTPS_PROXY=http://your-proxy-ip:port" Environment="no_proxy=localhost,127.0.0.1,::1,172.16.0.0/12" Environment="NO_PROXY=localhost,127.0.0.1,::1,172.16.0.0/12" --- cmd/autodiscovery.go | 4 +++- monitoring/unit/ip.go | 2 ++ server/websocket.go | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/cmd/autodiscovery.go b/cmd/autodiscovery.go index da8fb95..fa90fad 100644 --- a/cmd/autodiscovery.go +++ b/cmd/autodiscovery.go @@ -10,7 +10,9 @@ import ( "net/url" "os" "path/filepath" + "time" + "github.com/komari-monitor/komari-agent/dnsresolver" "github.com/komari-monitor/komari-agent/utils" ) @@ -136,7 +138,7 @@ func registerWithAutoDiscovery() error { } // 发送请求 - client := &http.Client{} + client := dnsresolver.GetHTTPClient(30 * time.Second) resp, err := client.Do(req) if err != nil { return fmt.Errorf("failed to send register request: %v", err) diff --git a/monitoring/unit/ip.go b/monitoring/unit/ip.go index aacce63..9721a4d 100644 --- a/monitoring/unit/ip.go +++ b/monitoring/unit/ip.go @@ -16,6 +16,7 @@ var ( // 创建适用于IPv4和IPv6的HTTP客户端 ipv4HTTPClient = &http.Client{ Transport: &http.Transport{ + Proxy: http.ProxyFromEnvironment, DialContext: func(ctx context.Context, network, addr string) (net.Conn, error) { dialer := dnsresolver.GetNetDialer(15 * time.Second) return dialer.DialContext(ctx, "tcp4", addr) // 锁v4防止出现问题 @@ -29,6 +30,7 @@ var ( } ipv6HTTPClient = &http.Client{ Transport: &http.Transport{ + Proxy: http.ProxyFromEnvironment, DialContext: func(ctx context.Context, network, addr string) (net.Conn, error) { dialer := dnsresolver.GetNetDialer(15 * time.Second) return dialer.DialContext(ctx, "tcp6", addr) // 锁v6防止出现问题 diff --git a/server/websocket.go b/server/websocket.go index 8c5ed82..9d84ce3 100644 --- a/server/websocket.go +++ b/server/websocket.go @@ -192,6 +192,7 @@ func newWSDialer() *websocket.Dialer { d := &websocket.Dialer{ HandshakeTimeout: 15 * time.Second, NetDialContext: dnsresolver.GetDialContext(15 * time.Second), + Proxy: http.ProxyFromEnvironment, } if flags.IgnoreUnsafeCert { d.TLSClientConfig = &tls.Config{InsecureSkipVerify: true}