{"record":{"id":"824025358e64d37c","repo":"fatedier/frp","slug":"group-params-invalid","errorCode":null,"errorMessage":"group params invalid","messagePattern":"group params invalid","errorType":"exception","errorClass":"ErrGroupParamsInvalid","httpStatus":null,"severity":"error","filePath":"server/group/group.go","lineNumber":23,"sourceCode":"// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage group\n\nimport (\n\t\"errors\"\n)\n\nvar (\n\tErrGroupAuthFailed    = errors.New(\"group auth failed\")\n\tErrGroupParamsInvalid = errors.New(\"group params invalid\")\n\tErrListenerClosed     = errors.New(\"group listener closed\")\n\tErrGroupDifferentPort = errors.New(\"group should have same remote port\")\n\tErrProxyRepeated      = errors.New(\"group proxy repeated\")\n\n\terrGroupStale = errors.New(\"stale group reference\")\n)\n","sourceCodeStart":5,"sourceCodeEnd":30,"githubUrl":"https://github.com/fatedier/frp/blob/6c8a8d0a97d03b44e9528d30b30c70cb9d61b405/server/group/group.go#L5-L30","documentation":"ErrGroupParamsInvalid is returned when a proxy tries to attach to an existing group whose group name or bind address differs (tcp.go:108, http.go:101, tcpmux.go:121, https.go:94). Within one group every member must use the same group name and the same server bind address; otherwise the parameters are considered invalid and the new proxy is refused.","triggerScenarios":"Same group name but different bindAddr across members; mixing proxy types under one group name (e.g. one member binds 0.0.0.0, another 127.0.0.1 on frps); group name collision between unrelated deployments on the same frps.","commonSituations":"Copy-pasting a group config between environments and changing the address on only some members; two teams accidentally choosing the same group name on a shared frps.","solutions":["Make group name and bind address identical on every member of the group","If deployments are unrelated, use distinct group names per environment/team","Re-verify each member config with frpc verify after edits"],"exampleFix":"# member A: group = \"app\", bindAddr = \"0.0.0.0\", remotePort = 9000\n# member B — before: bindAddr = \"127.0.0.1\"  -> ErrGroupParamsInvalid\n# after\n[[proxies]]\nname = \"b\"\ntype = \"tcp\"\ngroup = \"app\"\ngroupKey = \"correct-horse\"\nbindAddr = \"0.0.0.0\"\nremotePort = 9000","handlingStrategy":"validation","validationCode":"// Config lint: same group implies same bindAddr and type\nfor _, p := range proxies {\n    if p.Group != \"\" {\n        ref := groupRef[p.Group]\n        if ref != \"\" && ref != p.BindAddr {\n            return fmt.Errorf(\"group %s: bindAddr %q != %q\", p.Group, p.BindAddr, ref)\n        }\n    }\n}","typeGuard":"func isGroupParamsInvalid(err error) bool {\n    return errors.Is(err, group.ErrGroupParamsInvalid)\n}","tryCatchPattern":"if errors.Is(err, group.ErrGroupParamsInvalid) {\n    // group name or bind address differs from the established group — align member configs\n}","preventionTips":["Namespace group names per environment (e.g. prod-app, staging-app) to avoid collisions on shared frps","Generate group member configs from one template so address/name can never drift"],"tags":["frp","go","group","load-balance","config","server"],"backgroundTag":null,"analyzedSha":"6c8a8d0a97d03b44e9528d30b30c70cb9d61b405","analyzedAt":"2026-08-15T06:53:27.215Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}