From 34e8d88a53b340993a17e94a13e3a25bdf7d8933 Mon Sep 17 00:00:00 2001 From: zhengkunwang <31820853+zhengkunwang223@users.noreply.github.com> Date: Sat, 22 Jul 2023 22:04:17 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E7=BD=91=E7=AB=99=20?= =?UTF-8?q?IPV6=20=E8=AE=BE=E7=BD=AE=20(#1732)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refs https://github.com/1Panel-dev/1Panel/issues/1404 --- backend/app/service/website.go | 5 ++++ backend/app/service/website_utils.go | 38 ++++++++++++++++++++++++ backend/utils/nginx/components/server.go | 2 +- 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/backend/app/service/website.go b/backend/app/service/website.go index ce3608723..b5117f588 100644 --- a/backend/app/service/website.go +++ b/backend/app/service/website.go @@ -342,6 +342,11 @@ func (w WebsiteService) UpdateWebsite(req request.WebsiteUpdate) error { if err != nil { return err } + if website.IPV6 != req.IPV6 { + if err := changeIPV6(website, req.IPV6); err != nil { + return err + } + } website.PrimaryDomain = req.PrimaryDomain website.WebsiteGroupID = req.WebsiteGroupID website.Remark = req.Remark diff --git a/backend/app/service/website_utils.go b/backend/app/service/website_utils.go index 220d6ccee..f68001492 100644 --- a/backend/app/service/website_utils.go +++ b/backend/app/service/website_utils.go @@ -576,6 +576,44 @@ func opWebsite(website *model.Website, operate string) error { return nginxCheckAndReload(nginxInstall.SiteConfig.OldContent, config.FilePath, nginxInstall.Install.ContainerName) } +func changeIPV6(website model.Website, enable bool) error { + nginxFull, err := getNginxFull(&website) + if err != nil { + return nil + } + config := nginxFull.SiteConfig.Config + server := config.FindServers()[0] + listens := server.Listens + if enable { + for _, listen := range listens { + if strings.HasPrefix(listen.Bind, "[::]:") { + continue + } + exist := false + ipv6Bind := fmt.Sprintf("[::]:%s", listen.Bind) + for _, li := range listens { + if li.Bind == ipv6Bind { + exist = true + break + } + } + if !exist { + server.UpdateListen(ipv6Bind, false, listen.GetParameters()[1:]...) + } + } + } else { + for _, listen := range listens { + if strings.HasPrefix(listen.Bind, "[::]:") { + server.RemoveListenByBind(listen.Bind) + } + } + } + if err := nginx.WriteConfig(config, nginx.IndentedStyle); err != nil { + return err + } + return nginxCheckAndReload(nginxFull.SiteConfig.OldContent, config.FilePath, nginxFull.Install.ContainerName) +} + func checkIsLinkApp(website model.Website) bool { if website.Type == constant.Deployment { return true diff --git a/backend/utils/nginx/components/server.go b/backend/utils/nginx/components/server.go index b88350300..2e3890e2c 100644 --- a/backend/utils/nginx/components/server.go +++ b/backend/utils/nginx/components/server.go @@ -315,7 +315,7 @@ func (s *Server) UpdateDirectiveBySecondKey(name string, key string, directive D func (s *Server) RemoveListenByBind(bind string) { var listens []*ServerListen for _, listen := range s.Listens { - if listen.Bind != bind || len(listen.Parameters) > 0 { + if listen.Bind != bind { listens = append(listens, listen) } }