@@ -712,16 +712,55 @@ func (m *Manager) EnsureBaseNginxConfig() error {
712712 if err != nil {
713713 return err
714714 }
715- if string (nginxConf ) == string (existing ) {
716- return nil
715+ changed , err := writeFileIfChanged (confPath , nginxConf , 0644 )
716+ if err != nil {
717+ return err
717718 }
718719
719- if err := os .WriteFile (confPath , nginxConf , 0644 ); err != nil {
720- return err
720+ if luaEnabled {
721+ luaDir := filepath .Join (nginxDir , "lua" )
722+ if err := os .MkdirAll (luaDir , 0755 ); err != nil {
723+ return err
724+ }
725+ agentIP := m .GetDockerHostIP ()
726+ agentPort := m .GetAgentPort ()
727+ securityLua , err := templates .GetNginxSecurityLuaWithConfig (agentIP , agentPort , m .config .Security .InternalAPIToken , m .config .Security .TrustedProxies , m .config .Security .TrustCFHeader )
728+ if err != nil {
729+ return err
730+ }
731+ securityChanged , err := writeFileIfChanged (filepath .Join (luaDir , "security.lua" ), securityLua , 0644 )
732+ if err != nil {
733+ return err
734+ }
735+ changed = changed || securityChanged
736+
737+ trafficLua , err := templates .GetNginxTrafficLuaWithConfig (agentIP , agentPort )
738+ if err != nil {
739+ return err
740+ }
741+ trafficChanged , err := writeFileIfChanged (filepath .Join (luaDir , "traffic.lua" ), trafficLua , 0644 )
742+ if err != nil {
743+ return err
744+ }
745+ changed = changed || trafficChanged
746+
747+ errorPage , err := templates .GetErrorPage ()
748+ if err != nil {
749+ return err
750+ }
751+ errorPagePath := filepath .Join (nginxDir , "html" , ".flatrun" , "error.html" )
752+ if err := os .MkdirAll (filepath .Dir (errorPagePath ), 0755 ); err != nil {
753+ return err
754+ }
755+ errorPageChanged , err := writeFileIfChanged (errorPagePath , errorPage , 0644 )
756+ if err != nil {
757+ return err
758+ }
759+ changed = changed || errorPageChanged
760+ }
761+ if changed {
762+ _ = m .reloadNginx ()
721763 }
722- // Best-effort reload: the rewritten config also takes effect on the next nginx
723- // restart, so a reload failure here (e.g. container not yet ready) is not fatal.
724- _ = m .reloadNginx ()
725764 return nil
726765}
727766
@@ -1456,5 +1495,20 @@ func writeNginxErrorPage(nginxDir string) error {
14561495 if err := os .MkdirAll (filepath .Dir (path ), 0755 ); err != nil {
14571496 return err
14581497 }
1459- return os .WriteFile (path , content , 0644 )
1498+ _ , err = writeFileIfChanged (path , content , 0644 )
1499+ return err
1500+ }
1501+
1502+ func writeFileIfChanged (path string , content []byte , mode os.FileMode ) (bool , error ) {
1503+ existing , err := os .ReadFile (path )
1504+ if err == nil && bytes .Equal (existing , content ) {
1505+ return false , nil
1506+ }
1507+ if err != nil && ! os .IsNotExist (err ) {
1508+ return false , err
1509+ }
1510+ if err := os .WriteFile (path , content , mode ); err != nil {
1511+ return false , err
1512+ }
1513+ return true , nil
14601514}
0 commit comments