git.iko.soy/typeable/oauth2-proxy
on master help sign in
oauthproxy: allow custom timeout for proxy requests
2bee25bRohit Jain
oauthproxy.go+13
@@ -130,7 +130,20 @@ func (u *UpstreamProxy) ServeHTTP(w http.ResponseWriter, r *http.Request) {
130// NewReverseProxy creates a new reverse proxy for proxying requests to upstream
130// NewReverseProxy creates a new reverse proxy for proxying requests to upstream
131// servers
131// servers
132func NewReverseProxy(target *url.URL, opts *Options) (proxy *httputil.ReverseProxy) {
132func NewReverseProxy(target *url.URL, opts *Options) (proxy *httputil.ReverseProxy) {
133+
133 proxy = httputil.NewSingleHostReverseProxy(target)
134 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+ }
134 proxy.FlushInterval = opts.FlushInterval
147 proxy.FlushInterval = opts.FlushInterval
135 if opts.SSLUpstreamInsecureSkipVerify {
148 if opts.SSLUpstreamInsecureSkipVerify {
136 proxy.Transport = &http.Transport{
149 proxy.Transport = &http.Transport{
options.go+2
@@ -39,6 +39,7 @@ type Options struct {
39 ClientSecret string `flag:"client-secret" cfg:"client_secret" env:"OAUTH2_PROXY_CLIENT_SECRET"`
39 ClientSecret string `flag:"client-secret" cfg:"client_secret" env:"OAUTH2_PROXY_CLIENT_SECRET"`
40 TLSCertFile string `flag:"tls-cert-file" cfg:"tls_cert_file" env:"OAUTH2_PROXY_TLS_CERT_FILE"`
40 TLSCertFile string `flag:"tls-cert-file" cfg:"tls_cert_file" env:"OAUTH2_PROXY_TLS_CERT_FILE"`
41 TLSKeyFile string `flag:"tls-key-file" cfg:"tls_key_file" env:"OAUTH2_PROXY_TLS_KEY_FILE"`
41 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"`
42
43
43 AuthenticatedEmailsFile string `flag:"authenticated-emails-file" cfg:"authenticated_emails_file" env:"OAUTH2_PROXY_AUTHENTICATED_EMAILS_FILE"`
44 AuthenticatedEmailsFile string `flag:"authenticated-emails-file" cfg:"authenticated_emails_file" env:"OAUTH2_PROXY_AUTHENTICATED_EMAILS_FILE"`
44 KeycloakGroup string `flag:"keycloak-group" cfg:"keycloak_group" env:"OAUTH2_PROXY_KEYCLOAK_GROUP"`
45 KeycloakGroup string `flag:"keycloak-group" cfg:"keycloak_group" env:"OAUTH2_PROXY_KEYCLOAK_GROUP"`
@@ -145,6 +146,7 @@ func NewOptions() *Options {
145 ProxyWebSockets: true,
146 ProxyWebSockets: true,
146 HTTPAddress: "127.0.0.1:4180",
147 HTTPAddress: "127.0.0.1:4180",
147 HTTPSAddress: ":443",
148 HTTPSAddress: ":443",
149+ ProxyTimeOut: 30, //TIME_OUT in seconds
148 DisplayHtpasswdForm: true,
150 DisplayHtpasswdForm: true,
149 CookieOptions: options.CookieOptions{
151 CookieOptions: options.CookieOptions{
150 CookieName: "_oauth2_proxy",
152 CookieName: "_oauth2_proxy",
options_test.go+8
@@ -83,6 +83,14 @@ func TestRedirectURL(t *testing.T) {
83 assert.Equal(t, expected, o.redirectURL)
83 assert.Equal(t, expected, o.redirectURL)
84}
84}
85
85
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+
86func TestProxyURLs(t *testing.T) {
94func TestProxyURLs(t *testing.T) {
87 o := testOptions()
95 o := testOptions()
88 o.Upstreams = append(o.Upstreams, "http://127.0.0.1:8081")
96 o.Upstreams = append(o.Upstreams, "http://127.0.0.1:8081")