Merge pull request #2027 from ipfs-cluster/dns-resolve-ipfs-proxy
ipfsproxy: do not pre-resolve dns addrs / support api over unix sockets
This commit is contained in:
commit
0cdde9c471
|
@ -24,6 +24,7 @@ import (
|
||||||
"github.com/ipfs-cluster/ipfs-cluster/adder/adderutils"
|
"github.com/ipfs-cluster/ipfs-cluster/adder/adderutils"
|
||||||
"github.com/ipfs-cluster/ipfs-cluster/api"
|
"github.com/ipfs-cluster/ipfs-cluster/api"
|
||||||
"github.com/ipfs-cluster/ipfs-cluster/rpcutil"
|
"github.com/ipfs-cluster/ipfs-cluster/rpcutil"
|
||||||
|
"github.com/tv42/httpunix"
|
||||||
|
|
||||||
handlers "github.com/gorilla/handlers"
|
handlers "github.com/gorilla/handlers"
|
||||||
mux "github.com/gorilla/mux"
|
mux "github.com/gorilla/mux"
|
||||||
|
@ -33,7 +34,6 @@ import (
|
||||||
logging "github.com/ipfs/go-log/v2"
|
logging "github.com/ipfs/go-log/v2"
|
||||||
rpc "github.com/libp2p/go-libp2p-gorpc"
|
rpc "github.com/libp2p/go-libp2p-gorpc"
|
||||||
peer "github.com/libp2p/go-libp2p/core/peer"
|
peer "github.com/libp2p/go-libp2p/core/peer"
|
||||||
madns "github.com/multiformats/go-multiaddr-dns"
|
|
||||||
manet "github.com/multiformats/go-multiaddr/net"
|
manet "github.com/multiformats/go-multiaddr/net"
|
||||||
|
|
||||||
"go.opencensus.io/plugin/ochttp"
|
"go.opencensus.io/plugin/ochttp"
|
||||||
|
@ -58,13 +58,16 @@ type Server struct {
|
||||||
ctx context.Context
|
ctx context.Context
|
||||||
cancel func()
|
cancel func()
|
||||||
|
|
||||||
config *Config
|
config *Config
|
||||||
nodeScheme string
|
nodeScheme string
|
||||||
nodeAddr string
|
nodeAddr string
|
||||||
|
nodeNetwork string
|
||||||
|
|
||||||
rpcClient *rpc.Client
|
rpcClient *rpc.Client
|
||||||
rpcReady chan struct{}
|
rpcReady chan struct{}
|
||||||
|
|
||||||
|
transport http.RoundTripper // to the proxied kubo RPC API
|
||||||
|
|
||||||
listeners []net.Listener // proxy listener
|
listeners []net.Listener // proxy listener
|
||||||
server *http.Server // proxy server
|
server *http.Server // proxy server
|
||||||
reverseProxy *httputil.ReverseProxy // allows to talk to IPFS
|
reverseProxy *httputil.ReverseProxy // allows to talk to IPFS
|
||||||
|
@ -111,24 +114,23 @@ func New(cfg *Config) (*Server, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
nodeMAddr := cfg.NodeAddr
|
nodeNetwork, nodeAddr, err := manet.DialArgs(cfg.NodeAddr)
|
||||||
// dns multiaddresses need to be resolved first
|
|
||||||
if madns.Matches(nodeMAddr) {
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), DNSTimeout)
|
|
||||||
defer cancel()
|
|
||||||
resolvedAddrs, err := madns.Resolve(ctx, cfg.NodeAddr)
|
|
||||||
if err != nil {
|
|
||||||
logger.Error(err)
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
nodeMAddr = resolvedAddrs[0]
|
|
||||||
}
|
|
||||||
|
|
||||||
_, nodeAddr, err := manet.DialArgs(nodeMAddr)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
transport := http.DefaultTransport
|
||||||
|
|
||||||
|
if nodeNetwork == "unix" {
|
||||||
|
unixTransport := &httpunix.Transport{
|
||||||
|
DialTimeout: time.Second,
|
||||||
|
}
|
||||||
|
unixTransport.RegisterLocation("ipfs", nodeAddr)
|
||||||
|
t := &http.Transport{}
|
||||||
|
t.RegisterProtocol(httpunix.Scheme, unixTransport)
|
||||||
|
transport = t
|
||||||
|
}
|
||||||
|
|
||||||
var listeners []net.Listener
|
var listeners []net.Listener
|
||||||
for _, addr := range cfg.ListenAddr {
|
for _, addr := range cfg.ListenAddr {
|
||||||
proxyNet, proxyAddr, err := manet.DialArgs(addr)
|
proxyNet, proxyAddr, err := manet.DialArgs(addr)
|
||||||
|
@ -195,14 +197,16 @@ func New(cfg *Config) (*Server, error) {
|
||||||
s.SetKeepAlivesEnabled(true) // A reminder that this can be changed
|
s.SetKeepAlivesEnabled(true) // A reminder that this can be changed
|
||||||
|
|
||||||
reverseProxy := httputil.NewSingleHostReverseProxy(proxyURL)
|
reverseProxy := httputil.NewSingleHostReverseProxy(proxyURL)
|
||||||
reverseProxy.Transport = http.DefaultTransport
|
reverseProxy.Transport = transport
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
proxy := &Server{
|
proxy := &Server{
|
||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
config: cfg,
|
config: cfg,
|
||||||
cancel: cancel,
|
cancel: cancel,
|
||||||
nodeAddr: nodeHTTPAddr,
|
nodeAddr: nodeHTTPAddr,
|
||||||
|
nodeNetwork: nodeNetwork,
|
||||||
nodeScheme: nodeScheme,
|
nodeScheme: nodeScheme,
|
||||||
|
transport: transport,
|
||||||
rpcReady: make(chan struct{}, 1),
|
rpcReady: make(chan struct{}, 1),
|
||||||
listeners: listeners,
|
listeners: listeners,
|
||||||
server: s,
|
server: s,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user