fatedier/frp · error
proxy %s: %v
Error message
proxy %s: %v
What it means
Aggregate wrapper: ValidateAllClientConfig iterates proxy configs and prefixes each per-proxy validation failure with the proxy's name. The real cause is in the %v inner error produced by ValidateProxyConfigurerForClient (e.g. invalid localPort, unknown plugin, bad remotePort range).
Source
Thrown at pkg/config/v1/validation/client.go:210
func ValidateAllClientConfig(
c *v1.ClientCommonConfig,
proxyCfgs []v1.ProxyConfigurer,
visitorCfgs []v1.VisitorConfigurer,
unsafeFeatures *security.UnsafeFeatures,
) (Warning, error) {
validator := NewConfigValidator(unsafeFeatures)
var warnings Warning
if c != nil {
warning, err := validator.ValidateClientCommonConfig(c)
warnings = AppendError(warnings, warning)
if err != nil {
return warnings, err
}
}
for _, c := range proxyCfgs {
if err := ValidateProxyConfigurerForClient(c); err != nil {
return warnings, fmt.Errorf("proxy %s: %v", c.GetBaseConfig().Name, err)
}
}
for _, c := range visitorCfgs {
if err := ValidateVisitorConfigurer(c); err != nil {
return warnings, fmt.Errorf("visitor %s: %v", c.GetBaseConfig().Name, err)
}
}
return warnings, nil
}
View on GitHub (pinned to 6c8a8d0a97)
Solutions
- Read the inner error after the proxy name — it names the exact field and rule
- Fix that proxy entry (port range, plugin fields, name syntax) and re-run `frpc verify -c <file>`
- Temporarily comment out other proxies to bisect if the inner message is ambiguous
Example fix
# before [[proxies]] name = "ssh" type = "tcp" localPort = 70000 # after [[proxies]] name = "ssh" type = "tcp" localPort = 22
Defensive patterns
Strategy: try-catch
Validate before calling
for _, p := range proxyCfgs {
if err := validation.ValidateProxyConfigurerForClient(p); err != nil {
// surface p.GetBaseConfig().Name + err before startup
}
} Try / catch
if err := validation.ValidateAllClientConfig(cc, proxies, visitors, uf); err != nil {
if after, ok := strings.CutPrefix(err.Error(), "proxy "); ok {
name, inner, _ := strings.Cut(after, ": ")
// handle per-proxy failure keyed by name
}
} Prevention
- Run `frpc verify -c` in CI for every config change
- Validate each proxy as it is generated instead of in one big batch
When it happens
Trigger: Any [[proxies]] entry whose per-type validation fails — e.g. type "tcp" with localPort 0 or > 65535, missing name, invalid plugin options, transport fields violating proxy-level rules. First failing proxy aborts the loop.
Common situations: One typo'd proxy block in a large included config; new proxy type fields not supported by the running frp version; port conflicts with range constraints on the server.
Related errors
- exec configuration is required when type is 'exec'
- file path cannot be empty
- exec command cannot be empty
- exec env name cannot be empty
- exec env name cannot contain '='
AI-assisted analysis of fatedier/frp@6c8a8d0a97 (2026-08-15).
Data as JSON: /api/errors/a1182b883cc55040.
Report an issue: GitHub.