{"record":{"id":"4229cd6be8f42a5f","repo":"ipfs/kubo","slug":"servehttpgateway-invalid-gateway-address-q-err","errorCode":null,"errorMessage":"serveHTTPGateway: invalid gateway address: %q (err: %s)","messagePattern":"serveHTTPGateway: invalid gateway address: %q \\(err: (.+?)\\)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/ipfs/kubo/daemon.go","lineNumber":1083,"sourceCode":"\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"serveHTTPGateway: GetConfig() failed: %s\", err)\n\t}\n\n\tlisteners, err := sockets.TakeListeners(\"io.ipfs.gateway\")\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"serveHTTPGateway: socket activation failed: %s\", err)\n\t}\n\n\tlistenerAddrs := make(map[string]bool, len(listeners))\n\tfor _, listener := range listeners {\n\t\tlistenerAddrs[string(listener.Multiaddr().Bytes())] = true\n\t}\n\n\tgatewayAddrs := cfg.Addresses.Gateway\n\tfor _, addr := range gatewayAddrs {\n\t\tgatewayMaddr, err := ma.NewMultiaddr(addr)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"serveHTTPGateway: invalid gateway address: %q (err: %s)\", addr, err)\n\t\t}\n\n\t\tif listenerAddrs[string(gatewayMaddr.Bytes())] {\n\t\t\tcontinue\n\t\t}\n\n\t\tgwLis, err := manet.Listen(gatewayMaddr)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"serveHTTPGateway: manet.Listen(%s) failed: %s\", gatewayMaddr, err)\n\t\t}\n\t\tlistenerAddrs[string(gatewayMaddr.Bytes())] = true\n\t\tlisteners = append(listeners, gwLis)\n\t}\n\n\t// we might have listened to /tcp/0 - let's see what we are listing on\n\tfor _, listener := range listeners {\n\t\tfmt.Printf(\"Gateway server listening on %s\\n\", listener.Multiaddr())\n\t}","sourceCodeStart":1065,"sourceCodeEnd":1101,"githubUrl":"https://github.com/ipfs/kubo/blob/329838acdfafae224582930457efe80aa217afc0/cmd/ipfs/kubo/daemon.go#L1065-L1101","documentation":"Each value of cfg.Addresses.Gateway must parse as a valid libp2p multiaddr. serveHTTPGateway calls ma.NewMultiaddr on every configured gateway address and throws this error when parsing fails, naming the offending value and the parse error.","triggerScenarios":"`ipfs config Addresses.Gateway` set to a non-multiaddr string such as \"0.0.0.0:8080\", \":8080\", or a URL like \"http://localhost:8080\" instead of \"/ip4/0.0.0.0/tcp/8080\".","commonSituations":"Users copying an ip:port or URL into the config instead of a multiaddr; shell quoting mangling slashes in `ipfs config`; trailing whitespace or stray characters from manual edits.","solutions":["Set a valid multiaddr: `ipfs config Addresses.Gateway /ip4/0.0.0.0/tcp/8080`.","Print the current value with `ipfs config Addresses.Gateway` and correct the format (must start with /ip4/ or /ip6/ plus /tcp/ or /udp/).","Quote the value in the shell so slashes survive: `ipfs config Addresses.Gateway '/ip6/::/tcp/8080'`.","If an array is set via --json, validate each element parses as a multiaddr."],"exampleFix":"// before\n$ ipfs config Addresses.Gateway 0.0.0.0:8080\n// after\n$ ipfs config Addresses.Gateway /ip4/0.0.0.0/tcp/8080","handlingStrategy":"validation","validationCode":"addr, _ := ipfsConfig.Get(\"Addresses.Gateway\")\nif _, err := multiaddr.NewMultiaddr(addr.(string)); err != nil {\n    return fmt.Errorf(\"Addresses.Gateway must be a multiaddr like /ip4/0.0.0.0/tcp/8080: %w\", err)\n}","typeGuard":null,"tryCatchPattern":"if err != nil && strings.Contains(err.Error(), \"invalid gateway address\") {\n    log.Fatalf(\"bad Addresses.Gateway value; use e.g. /ip4/0.0.0.0/tcp/8080: %v\", err)\n}","preventionTips":["Always set gateway addresses with `ipfs config` (it validates multiaddr strings).","Quote values in the shell to protect slashes.","Never put ip:port or URLs into Addresses.Gateway.","Script config changes with --json and parse the array to validate each entry."],"tags":["multiaddr","config","gateway","validation"],"backgroundTag":"invalid-multiaddr","analyzedSha":"329838acdfafae224582930457efe80aa217afc0","analyzedAt":"2026-09-03T18:30:52.135Z","contentChangedAt":"2026-09-03T18:30:52.135Z","schemaVersion":2},"datasetVersion":"2026-09-11T00:17:11.886Z"}