git.iko.soy/typeable/oauth2-proxy
on master help sign in
oauthproxy: allow custom timeout for proxy requests
commit2bee25ba1c64ae75f739ee48a1da968ba00a2021 authorRohit Jain <rohit@sendinblue.com> dateThu 3 Oct 2019, 02:21 (7 years ago) parent49f1320
3 files changed+23
oauthproxy.go+13 options.go+2 options_test.go+8
oauthproxy.go+13
@@ -130,7 +130,20 @@ func (u *UpstreamProxy) ServeHTTP(w http.ResponseWriter, r *http.Request) {
130130// NewReverseProxy creates a new reverse proxy for proxying requests to upstream
131131// servers
132132func NewReverseProxy(target *url.URL, opts *Options) (proxy *httputil.ReverseProxy) {
133+
133134 proxy = httputil.NewSingleHostReverseProxy(target)
135+ proxy.Transport = &http.Transport{
136+ Proxy: http.ProxyFromEnvironment,
137+ DialContext: (&net.Dialer{
138+ Timeout: time.Duration(opts.ProxyTimeOut) * time.Second,
139+ KeepAlive: 30 * time.Second,
140+ DualStack: true,
141+ }).DialContext,
142+ MaxIdleConns: 100,
143+ IdleConnTimeout: 90 * time.Second,
144+ TLSHandshakeTimeout: 10 * time.Second,
145+ ExpectContinueTimeout: 1 * time.Second,
146+ }
134147 proxy.FlushInterval = opts.FlushInterval
135148 if opts.SSLUpstreamInsecureSkipVerify {
136149 proxy.Transport = &http.Transport{
options.go+2
@@ -39,6 +39,7 @@ type Options struct {
3939 ClientSecret string `flag:"client-secret" cfg:"client_secret" env:"OAUTH2_PROXY_CLIENT_SECRET"`
4040 TLSCertFile string `flag:"tls-cert-file" cfg:"tls_cert_file" env:"OAUTH2_PROXY_TLS_CERT_FILE"`
4141 TLSKeyFile string `flag:"tls-key-file" cfg:"tls_key_file" env:"OAUTH2_PROXY_TLS_KEY_FILE"`
42+ ProxyTimeOut time.Duration `flag:"proxy-time-out" cfg:"proxy_time_out" env:"OAUTH2_PROXY_PROXY_TIME_OUT"`
4243
4344 AuthenticatedEmailsFile string `flag:"authenticated-emails-file" cfg:"authenticated_emails_file" env:"OAUTH2_PROXY_AUTHENTICATED_EMAILS_FILE"`
4445 KeycloakGroup string `flag:"keycloak-group" cfg:"keycloak_group" env:"OAUTH2_PROXY_KEYCLOAK_GROUP"`
@@ -145,6 +146,7 @@ func NewOptions() *Options {
145146 ProxyWebSockets: true,
146147 HTTPAddress: "127.0.0.1:4180",
147148 HTTPSAddress: ":443",
149+ ProxyTimeOut: 30, //TIME_OUT in seconds
148150 DisplayHtpasswdForm: true,
149151 CookieOptions: options.CookieOptions{
150152 CookieName: "_oauth2_proxy",
options_test.go+8
@@ -83,6 +83,14 @@ func TestRedirectURL(t *testing.T) {
8383 assert.Equal(t, expected, o.redirectURL)
8484}
8585
86+func TestProxyTimeOut(t *testing.T) {
87+ o := testOptions()
88+ o.ProxyTimeOut = 40
89+ assert.Equal(t, nil, o.Validate())
90+ expected := 40
91+ assert.Equal(t, expected, o.ProxyTimeOut)
92+}
93+
8694func TestProxyURLs(t *testing.T) {
8795 o := testOptions()
8896 o.Upstreams = append(o.Upstreams, "http://127.0.0.1:8081")