mirror of
https://github.com/tobychui/zoraxy.git
synced 2025-10-15 15:19:46 +02:00
Merge pull request #828 from jimmyGALLAND/fix-restart-after-acme-DNS-challenge
Fix restart after acme dns challenge
This commit is contained in:
@@ -81,11 +81,14 @@ func (router *Router) StartProxyService() error {
|
|||||||
if router.Option.ForceTLSLatest {
|
if router.Option.ForceTLSLatest {
|
||||||
minVersion = tls.VersionTLS12
|
minVersion = tls.VersionTLS12
|
||||||
}
|
}
|
||||||
|
|
||||||
config := &tls.Config{
|
config := &tls.Config{
|
||||||
GetCertificate: router.Option.TlsManager.GetCert,
|
GetCertificate: router.Option.TlsManager.GetCert,
|
||||||
MinVersion: uint16(minVersion),
|
MinVersion: uint16(minVersion),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//config := router.Option.TlsManager.ServerTLSConfig
|
||||||
|
|
||||||
//Start rate limitor
|
//Start rate limitor
|
||||||
err := router.startRateLimterCounterResetTicker()
|
err := router.startRateLimterCounterResetTicker()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -265,63 +268,77 @@ func (router *Router) StartProxyService() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StopProxyService stops the proxy server and waits for all listeners to close
|
||||||
func (router *Router) StopProxyService() error {
|
func (router *Router) StopProxyService() error {
|
||||||
if router.server == nil {
|
if router.server == nil && router.tlsListener == nil && router.tlsRedirectStop == nil {
|
||||||
return errors.New("reverse proxy server already stopped")
|
return errors.New("reverse proxy server already stopped")
|
||||||
}
|
}
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
|
||||||
defer cancel()
|
var wg sync.WaitGroup
|
||||||
err := router.server.Shutdown(ctx)
|
|
||||||
if err != nil {
|
// Stop main TLS/HTTP server
|
||||||
return err
|
if router.server != nil {
|
||||||
|
wg.Add(1)
|
||||||
|
go func(srv *http.Server) {
|
||||||
|
defer wg.Done()
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||||
|
defer cancel()
|
||||||
|
err := srv.Shutdown(ctx)
|
||||||
|
if err != nil {
|
||||||
|
router.Option.Logger.PrintAndLog("dprouter", "Error shutting down main server", err)
|
||||||
|
}
|
||||||
|
}(router.server)
|
||||||
}
|
}
|
||||||
|
|
||||||
//Stop TLS listener
|
// Stop TLS redirect server
|
||||||
if router.tlsListener != nil {
|
|
||||||
router.tlsListener.Close()
|
|
||||||
}
|
|
||||||
|
|
||||||
//Stop rate limiter
|
|
||||||
if router.rateLimterStop != nil {
|
|
||||||
go func() {
|
|
||||||
// As the rate timer loop has a 1 sec ticker
|
|
||||||
// stop the rate limiter in go routine can prevent
|
|
||||||
// front end from freezing for 1 sec
|
|
||||||
router.rateLimterStop <- true
|
|
||||||
}()
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//Stop TLS redirection (from port 80)
|
|
||||||
if router.tlsRedirectStop != nil {
|
if router.tlsRedirectStop != nil {
|
||||||
router.tlsRedirectStop <- true
|
wg.Add(1)
|
||||||
|
go func(ch chan bool) {
|
||||||
|
defer wg.Done()
|
||||||
|
ch <- true
|
||||||
|
}(router.tlsRedirectStop)
|
||||||
}
|
}
|
||||||
|
|
||||||
//Discard the server object
|
// Stop rate limiter ticker if exists
|
||||||
router.tlsListener = nil
|
if router.rateLimterStop != nil {
|
||||||
|
wg.Add(1)
|
||||||
|
go func(ch chan bool) {
|
||||||
|
defer wg.Done()
|
||||||
|
ch <- true
|
||||||
|
}(router.rateLimterStop)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wait for all shutdown goroutines to finish
|
||||||
|
wg.Wait()
|
||||||
|
|
||||||
|
// Clear server references
|
||||||
router.server = nil
|
router.server = nil
|
||||||
router.Running = false
|
router.tlsListener = nil
|
||||||
router.tlsRedirectStop = nil
|
router.tlsRedirectStop = nil
|
||||||
|
router.rateLimterStop = nil
|
||||||
|
router.Running = false
|
||||||
|
|
||||||
|
router.Option.Logger.PrintAndLog("dprouter", "Proxy service stopped successfully", nil)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Restart the current router if it is running.
|
// Restart safely restarts the proxy server
|
||||||
func (router *Router) Restart() error {
|
func (router *Router) Restart() error {
|
||||||
//Stop the router if it is already running
|
|
||||||
if router.Running {
|
if router.Running {
|
||||||
err := router.StopProxyService()
|
router.Option.Logger.PrintAndLog("dprouter", "Restarting proxy server...", nil)
|
||||||
if err != nil {
|
if err := router.StopProxyService(); err != nil {
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
time.Sleep(100 * time.Millisecond)
|
|
||||||
// Start the server
|
|
||||||
err = router.StartProxyService()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
// Ensure ports are released
|
||||||
|
time.Sleep(200 * time.Millisecond)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := router.StartProxyService(); err != nil {
|
||||||
|
router.Option.Logger.PrintAndLog("dprouter", "Failed to restart proxy server", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
router.Option.Logger.PrintAndLog("dprouter", "Proxy server restarted successfully", nil)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user