mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-28 10:51:44 +01:00 
			
		
		
		
	Remove WriteTimeout from HTTP
Golangs built in HTTP server does not allow different HTTP timeout for different types of handlers, so we cannot have a write timeout as we attempt to do long polling (my bad). See linked article. Also removed redundant server declaration
This commit is contained in:
		
							parent
							
								
									6ffea2225d
								
							
						
					
					
						commit
						ed728f57e0
					
				
							
								
								
									
										25
									
								
								app.go
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								app.go
									
									
									
									
									
								
							| @ -172,16 +172,18 @@ func (h *Headscale) Serve() error { | |||||||
| 	r.GET("/apple/:platform", h.ApplePlatformConfig) | 	r.GET("/apple/:platform", h.ApplePlatformConfig) | ||||||
| 	var err error | 	var err error | ||||||
| 
 | 
 | ||||||
| 	timeout := 30 * time.Second |  | ||||||
| 
 |  | ||||||
| 	go h.watchForKVUpdates(5000) | 	go h.watchForKVUpdates(5000) | ||||||
| 	go h.expireEphemeralNodes(5000) | 	go h.expireEphemeralNodes(5000) | ||||||
| 
 | 
 | ||||||
| 	s := &http.Server{ | 	s := &http.Server{ | ||||||
| 		Addr:         h.cfg.Addr, | 		Addr:        h.cfg.Addr, | ||||||
| 		Handler:      r, | 		Handler:     r, | ||||||
| 		ReadTimeout:  timeout, | 		ReadTimeout: 30 * time.Second, | ||||||
| 		WriteTimeout: timeout, | 		// Go does not handle timeouts in HTTP very well, and there is
 | ||||||
|  | 		// no good way to handle streaming timeouts, therefore we need to
 | ||||||
|  | 		// keep this at unlimited and be careful to clean up connections
 | ||||||
|  | 		// https://blog.cloudflare.com/the-complete-guide-to-golang-net-http-timeouts/#aboutstreaming
 | ||||||
|  | 		WriteTimeout: 0, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if h.cfg.TLSLetsEncryptHostname != "" { | 	if h.cfg.TLSLetsEncryptHostname != "" { | ||||||
| @ -194,13 +196,9 @@ func (h *Headscale) Serve() error { | |||||||
| 			HostPolicy: autocert.HostWhitelist(h.cfg.TLSLetsEncryptHostname), | 			HostPolicy: autocert.HostWhitelist(h.cfg.TLSLetsEncryptHostname), | ||||||
| 			Cache:      autocert.DirCache(h.cfg.TLSLetsEncryptCacheDir), | 			Cache:      autocert.DirCache(h.cfg.TLSLetsEncryptCacheDir), | ||||||
| 		} | 		} | ||||||
| 		s := &http.Server{ | 
 | ||||||
| 			Addr:         h.cfg.Addr, | 		s.TLSConfig = m.TLSConfig() | ||||||
| 			TLSConfig:    m.TLSConfig(), | 
 | ||||||
| 			Handler:      r, |  | ||||||
| 			ReadTimeout:  timeout, |  | ||||||
| 			WriteTimeout: timeout, |  | ||||||
| 		} |  | ||||||
| 		if h.cfg.TLSLetsEncryptChallengeType == "TLS-ALPN-01" { | 		if h.cfg.TLSLetsEncryptChallengeType == "TLS-ALPN-01" { | ||||||
| 			// Configuration via autocert with TLS-ALPN-01 (https://tools.ietf.org/html/rfc8737)
 | 			// Configuration via autocert with TLS-ALPN-01 (https://tools.ietf.org/html/rfc8737)
 | ||||||
| 			// The RFC requires that the validation is done on port 443; in other words, headscale
 | 			// The RFC requires that the validation is done on port 443; in other words, headscale
 | ||||||
| @ -211,7 +209,6 @@ func (h *Headscale) Serve() error { | |||||||
| 			// port 80 for the certificate validation in addition to the headscale
 | 			// port 80 for the certificate validation in addition to the headscale
 | ||||||
| 			// service, which can be configured to run on any other port.
 | 			// service, which can be configured to run on any other port.
 | ||||||
| 			go func() { | 			go func() { | ||||||
| 
 |  | ||||||
| 				log.Fatal(). | 				log.Fatal(). | ||||||
| 					Err(http.ListenAndServe(h.cfg.TLSLetsEncryptListen, m.HTTPHandler(http.HandlerFunc(h.redirect)))). | 					Err(http.ListenAndServe(h.cfg.TLSLetsEncryptListen, m.HTTPHandler(http.HandlerFunc(h.redirect)))). | ||||||
| 					Msg("failed to set up a HTTP server") | 					Msg("failed to set up a HTTP server") | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user