feat: allow customization of proxy transport configuration
All checks were successful
Cadoles/bouncer/pipeline/head This commit looks good
All checks were successful
Cadoles/bouncer/pipeline/head This commit looks good
This commit is contained in:
@ -1,13 +1,71 @@
|
||||
package config
|
||||
|
||||
import "time"
|
||||
|
||||
type ProxyServerConfig struct {
|
||||
HTTP HTTPConfig `yaml:"http"`
|
||||
Metrics MetricsConfig `yaml:"metrics"`
|
||||
HTTP HTTPConfig `yaml:"http"`
|
||||
Metrics MetricsConfig `yaml:"metrics"`
|
||||
Transport TransportConfig `yaml:"transport"`
|
||||
Dial DialConfig `yaml:"dial"`
|
||||
}
|
||||
|
||||
// See https://pkg.go.dev/net/http#Transport
|
||||
type TransportConfig struct {
|
||||
ForceAttemptHTTP2 InterpolatedBool `yaml:"forceAttemptHTTP2"`
|
||||
MaxIdleConns InterpolatedInt `yaml:"maxIdleConns"`
|
||||
MaxIdleConnsPerHost InterpolatedInt `yaml:"maxIdleConnsPerHost"`
|
||||
MaxConnsPerHost InterpolatedInt `yaml:"maxConnsPerHost"`
|
||||
IdleConnTimeout *InterpolatedDuration `yaml:"idleConnTimeout"`
|
||||
TLSHandshakeTimeout *InterpolatedDuration `yaml:"tlsHandshakeTimeout"`
|
||||
ExpectContinueTimeout *InterpolatedDuration `yaml:"expectContinueTimeout"`
|
||||
DisableKeepAlives InterpolatedBool `yaml:"disableKeepAlives"`
|
||||
DisableCompression InterpolatedBool `yaml:"disableCompression"`
|
||||
ResponseHeaderTimeout *InterpolatedDuration `yaml:"responseHeaderTimeout"`
|
||||
WriteBufferSize InterpolatedInt `yaml:"writeBufferSize"`
|
||||
ReadBufferSize InterpolatedInt `yaml:"readBufferSize"`
|
||||
MaxResponseHeaderBytes InterpolatedInt `yaml:"maxResponseHeaderBytes"`
|
||||
}
|
||||
|
||||
func NewDefaultProxyServerConfig() ProxyServerConfig {
|
||||
return ProxyServerConfig{
|
||||
HTTP: NewHTTPConfig("0.0.0.0", 8080),
|
||||
Metrics: NewDefaultMetricsConfig(),
|
||||
HTTP: NewHTTPConfig("0.0.0.0", 8080),
|
||||
Metrics: NewDefaultMetricsConfig(),
|
||||
Transport: NewDefaultTransportConfig(),
|
||||
Dial: NewDefaultDialConfig(),
|
||||
}
|
||||
}
|
||||
|
||||
// See https://pkg.go.dev/net#Dialer
|
||||
type DialConfig struct {
|
||||
Timeout *InterpolatedDuration `yaml:"timeout"`
|
||||
KeepAlive *InterpolatedDuration `yaml:"keepAlive"`
|
||||
FallbackDelay *InterpolatedDuration `yaml:"fallbackDelay"`
|
||||
DualStack InterpolatedBool `yaml:"dualStack"`
|
||||
}
|
||||
|
||||
func NewDefaultDialConfig() DialConfig {
|
||||
return DialConfig{
|
||||
Timeout: NewInterpolatedDuration(30 * time.Second),
|
||||
KeepAlive: NewInterpolatedDuration(30 * time.Second),
|
||||
FallbackDelay: NewInterpolatedDuration(300 * time.Millisecond),
|
||||
DualStack: true,
|
||||
}
|
||||
}
|
||||
|
||||
func NewDefaultTransportConfig() TransportConfig {
|
||||
return TransportConfig{
|
||||
ForceAttemptHTTP2: true,
|
||||
MaxIdleConns: 100,
|
||||
MaxIdleConnsPerHost: 100,
|
||||
MaxConnsPerHost: 100,
|
||||
IdleConnTimeout: NewInterpolatedDuration(90 * time.Second),
|
||||
TLSHandshakeTimeout: NewInterpolatedDuration(10 * time.Second),
|
||||
ExpectContinueTimeout: NewInterpolatedDuration(1 * time.Second),
|
||||
ResponseHeaderTimeout: NewInterpolatedDuration(10 * time.Second),
|
||||
DisableCompression: false,
|
||||
DisableKeepAlives: false,
|
||||
ReadBufferSize: 4096,
|
||||
WriteBufferSize: 4096,
|
||||
MaxResponseHeaderBytes: 0,
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user