diff --git a/api/pages/maintenance.go b/api/pages/maintenance.go index 0e97bcdeb..ea7f56357 100644 --- a/api/pages/maintenance.go +++ b/api/pages/maintenance.go @@ -4,6 +4,8 @@ import ( "embed" "html/template" "net/http" + "os" + "path/filepath" "strings" "github.com/0xJacky/Nginx-UI/settings" @@ -13,6 +15,8 @@ import ( //go:embed *.tmpl var tmplFS embed.FS +const maintenanceMountDir = "/etc/nginx/maintenance" + // MaintenancePageData maintenance page data structure type MaintenancePageData struct { Title string `json:"title"` @@ -53,7 +57,18 @@ func MaintenancePage(c *gin.Context) { return } - // Parse template + // Try custom mounted HTML first (NGINX_UI_NGINX_MAINTENANCE_TEMPLATE) + if name := strings.TrimSpace(settings.NginxSettings.MaintenanceTemplate); name != "" { + name = filepath.Base(name) + full := filepath.Join(maintenanceMountDir, name) + + if b, err := os.ReadFile(full); err == nil && len(b) > 0 { + c.Data(http.StatusServiceUnavailable, "text/html; charset=utf-8", b) + return + } + } + + // Fallback: embedded template tmpl, err := template.ParseFS(tmplFS, "maintenance.tmpl") if err != nil { c.String(http.StatusInternalServerError, "503 Service Unavailable") diff --git a/app/src/api/settings.ts b/app/src/api/settings.ts index 20fe3686a..d7b45fe13 100644 --- a/app/src/api/settings.ts +++ b/app/src/api/settings.ts @@ -68,6 +68,7 @@ export interface NginxSettings { restart_cmd: string stub_status_port: number container_name: string + maintenance_template?: string } export interface NginxLogSettings { diff --git a/app/src/views/preference/tabs/NginxSettings.vue b/app/src/views/preference/tabs/NginxSettings.vue index ef186860e..1cb522c2a 100644 --- a/app/src/views/preference/tabs/NginxSettings.vue +++ b/app/src/views/preference/tabs/NginxSettings.vue @@ -10,6 +10,14 @@ const { data } = storeToRefs(systemSettingsStore) + + + + {{$gettext('Mounted directory')}}: /etc/nginx/maintenance + + {{ data.nginx.access_log_path }} diff --git a/settings/nginx.go b/settings/nginx.go index 3636141be..c9e39e603 100644 --- a/settings/nginx.go +++ b/settings/nginx.go @@ -13,6 +13,7 @@ type Nginx struct { RestartCmd string `json:"restart_cmd" protected:"true"` StubStatusPort uint `json:"stub_status_port" binding:"omitempty,min=1,max=65535"` ContainerName string `json:"container_name" protected:"true"` + MaintenanceTemplate string `json:"maintenance_template"` } var NginxSettings = &Nginx{}