chore(release): 发布 v1.9.2
CI / verify (push) Canceled after 0s
Docker Release / build-and-push (amd64, linux/amd64) (push) Canceled after 0s
Docker Release / build-and-push (arm64, linux/arm64) (push) Canceled after 0s
GitHub Release / release (push) Canceled after 0s
Docker Release / create-manifest (push) Canceled after 0s
CI / verify (push) Canceled after 0s
Docker Release / build-and-push (amd64, linux/amd64) (push) Canceled after 0s
Docker Release / build-and-push (arm64, linux/arm64) (push) Canceled after 0s
GitHub Release / release (push) Canceled after 0s
Docker Release / create-manifest (push) Canceled after 0s
- 「公网服务端」新增 Nginx 启停控制(Agent 0.15.2,停止带二次确认) - frps 启动失败不再误报成功,并增强启动诊断 - frps vhost 端口禁止 80/443,避免与 VPS 上 Nginx 冲突 - 旧服务端配置的 tcp_mux / login_fail_exit 默认值补齐 - 新增安全审查、页面布局方案与场景操作文档
This commit is contained in:
+40
-6
@@ -7,9 +7,15 @@ import (
|
||||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
legacyProxyQueryTimeout = 8 * time.Second
|
||||
legacyProxyConcurrency = 4
|
||||
)
|
||||
|
||||
// frps 管理接口(webServer)返回的代理状态结构,仅取本模块用到的字段。
|
||||
type frpsProxyStatus struct {
|
||||
Name string `json:"name"`
|
||||
@@ -118,15 +124,43 @@ func (c *frpsTrafficClient) fetchLegacyProxyByName(ctx context.Context, server S
|
||||
// fetchLegacyRouteProxies 按候选规则逐条查询旧版 frps,并保留域名到真实代理名的映射。
|
||||
func (c *frpsTrafficClient) fetchLegacyRouteProxies(ctx context.Context, server Server, password string, names []string) ServerTraffic {
|
||||
empty := map[string]ProxyTraffic{}
|
||||
if len(names) == 0 {
|
||||
return ServerTraffic{ServerID: server.ID, OK: true, Proxies: empty}
|
||||
}
|
||||
queryCtx, cancel := context.WithTimeout(ctx, legacyProxyQueryTimeout)
|
||||
defer cancel()
|
||||
|
||||
type queryResult struct {
|
||||
info legacyProxyInfo
|
||||
err error
|
||||
}
|
||||
results := make(chan queryResult, len(names))
|
||||
semaphore := make(chan struct{}, legacyProxyConcurrency)
|
||||
var wait sync.WaitGroup
|
||||
for _, name := range names {
|
||||
wait.Add(1)
|
||||
go func(name string) {
|
||||
defer wait.Done()
|
||||
semaphore <- struct{}{}
|
||||
defer func() { <-semaphore }()
|
||||
proxyName := name
|
||||
if user := strings.TrimSpace(server.Options.User); user != "" && !strings.HasPrefix(proxyName, user+".") {
|
||||
proxyName = user + "." + proxyName
|
||||
}
|
||||
info, _, err := c.fetchLegacyProxyByName(queryCtx, server, password, proxyName)
|
||||
results <- queryResult{info: info, err: err}
|
||||
}(name)
|
||||
}
|
||||
go func() {
|
||||
wait.Wait()
|
||||
close(results)
|
||||
}()
|
||||
|
||||
proxies := make(map[string]ProxyTraffic)
|
||||
proxyNamesByDomain := make(map[string]string)
|
||||
var lastErr error
|
||||
for _, name := range names {
|
||||
proxyName := name
|
||||
if user := strings.TrimSpace(server.Options.User); user != "" && !strings.HasPrefix(proxyName, user+".") {
|
||||
proxyName = user + "." + proxyName
|
||||
}
|
||||
info, _, err := c.fetchLegacyProxyByName(ctx, server, password, proxyName)
|
||||
for result := range results {
|
||||
info, err := result.info, result.err
|
||||
if err != nil {
|
||||
lastErr = err
|
||||
continue
|
||||
|
||||
Reference in New Issue
Block a user