mirror of
https://github.com/caddyserver/caddy.git
synced 2026-01-17 01:30:34 +00:00
reverseproxy: refactor HTTP transport layer (#5369)
Co-authored-by: Francis Lavoie <lavofr@gmail.com> Co-authored-by: Weidi Deng <weidi_deng@icloud.com>
This commit is contained in:
committed by
GitHub
parent
be53e432fc
commit
e3909cc385
@@ -172,12 +172,19 @@ func (h *HTTPTransport) NewTransport(caddyCtx caddy.Context) (*http.Transport, e
|
||||
}
|
||||
}
|
||||
|
||||
// Set up the dialer to pull the correct information from the context
|
||||
dialContext := func(ctx context.Context, network, address string) (net.Conn, error) {
|
||||
// the proper dialing information should be embedded into the request's context
|
||||
// For unix socket upstreams, we need to recover the dial info from
|
||||
// the request's context, because the Host on the request's URL
|
||||
// will have been modified by directing the request, overwriting
|
||||
// the unix socket filename.
|
||||
// Also, we need to avoid overwriting the address at this point
|
||||
// when not necessary, because http.ProxyFromEnvironment may have
|
||||
// modified the address according to the user's env proxy config.
|
||||
if dialInfo, ok := GetDialInfo(ctx); ok {
|
||||
network = dialInfo.Network
|
||||
address = dialInfo.Address
|
||||
if strings.HasPrefix(dialInfo.Network, "unix") {
|
||||
network = dialInfo.Network
|
||||
address = dialInfo.Address
|
||||
}
|
||||
}
|
||||
|
||||
conn, err := dialer.DialContext(ctx, network, address)
|
||||
@@ -188,8 +195,8 @@ func (h *HTTPTransport) NewTransport(caddyCtx caddy.Context) (*http.Transport, e
|
||||
return nil, DialError{err}
|
||||
}
|
||||
|
||||
// if read/write timeouts are configured and this is a TCP connection, enforce the timeouts
|
||||
// by wrapping the connection with our own type
|
||||
// if read/write timeouts are configured and this is a TCP connection,
|
||||
// enforce the timeouts by wrapping the connection with our own type
|
||||
if tcpConn, ok := conn.(*net.TCPConn); ok && (h.ReadTimeout > 0 || h.WriteTimeout > 0) {
|
||||
conn = &tcpRWTimeoutConn{
|
||||
TCPConn: tcpConn,
|
||||
@@ -203,6 +210,7 @@ func (h *HTTPTransport) NewTransport(caddyCtx caddy.Context) (*http.Transport, e
|
||||
}
|
||||
|
||||
rt := &http.Transport{
|
||||
Proxy: http.ProxyFromEnvironment,
|
||||
DialContext: dialContext,
|
||||
MaxConnsPerHost: h.MaxConnsPerHost,
|
||||
ResponseHeaderTimeout: time.Duration(h.ResponseHeaderTimeout),
|
||||
|
||||
Reference in New Issue
Block a user