mirror of
https://github.com/0xJacky/nginx-ui.git
synced 2025-05-11 02:15:48 +02:00
feat: add check and fix functions for Nginx conf.d directory inclusion
This commit is contained in:
parent
5db099bc1b
commit
84bfc90077
4 changed files with 92 additions and 2 deletions
|
@ -21,6 +21,11 @@ const backendTasks: Record<string, BackendTask> = {
|
||||||
description: () => $gettext('Check if the nginx.conf includes the streams-enabled directory.'),
|
description: () => $gettext('Check if the nginx.conf includes the streams-enabled directory.'),
|
||||||
type: 'backend',
|
type: 'backend',
|
||||||
},
|
},
|
||||||
|
'NginxConf-ConfD': {
|
||||||
|
name: () => $gettext('Nginx Conf Include Conf.d'),
|
||||||
|
description: () => $gettext('Check if the nginx.conf includes the conf.d directory.'),
|
||||||
|
type: 'backend',
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
export default backendTasks
|
export default backendTasks
|
||||||
|
|
|
@ -16,4 +16,5 @@ var (
|
||||||
ErrSitesEnabledNotExist = e.New(4047, "Sites-enabled directory not exist")
|
ErrSitesEnabledNotExist = e.New(4047, "Sites-enabled directory not exist")
|
||||||
ErrStreamAvailableNotExist = e.New(4048, "Streams-available directory not exist")
|
ErrStreamAvailableNotExist = e.New(4048, "Streams-available directory not exist")
|
||||||
ErrStreamEnabledNotExist = e.New(4049, "Streams-enabled directory not exist")
|
ErrStreamEnabledNotExist = e.New(4049, "Streams-enabled directory not exist")
|
||||||
|
ErrNginxConfNotIncludeConfD = e.New(4050, "Nginx conf not include conf.d directory")
|
||||||
)
|
)
|
||||||
|
|
|
@ -3,6 +3,7 @@ package self_check
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/0xJacky/Nginx-UI/internal/nginx"
|
"github.com/0xJacky/Nginx-UI/internal/nginx"
|
||||||
|
@ -118,7 +119,7 @@ func FixNginxConfIncludeSites() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// if no http block, append http block with include sites-enabled/*
|
// if no http block, append http block with include sites-enabled/*
|
||||||
content = append(content, []byte(fmt.Sprintf("\nhttp {\n\tinclude %s;\n}\n", nginx.GetConfPath("sites-enabled/*")))...)
|
content = append(content, fmt.Appendf(nil, "\nhttp {\n\tinclude %s;\n}\n", nginx.GetConfPath("sites-enabled/*"))...)
|
||||||
return os.WriteFile(path, content, 0644)
|
return os.WriteFile(path, content, 0644)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,6 +163,84 @@ func FixNginxConfIncludeStreams() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// if no stream block, append stream block with include streams-enabled/*
|
// if no stream block, append stream block with include streams-enabled/*
|
||||||
content = append(content, []byte(fmt.Sprintf("\nstream {\n\tinclude %s;\n}\n", nginx.GetConfPath("streams-enabled/*")))...)
|
content = append(content, fmt.Appendf(nil, "\nstream {\n\tinclude %s;\n}\n", nginx.GetConfPath("streams-enabled/*"))...)
|
||||||
|
return os.WriteFile(path, content, 0644)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckNginxConfIncludeConfD checks if nginx.conf includes conf.d directory
|
||||||
|
func CheckNginxConfIncludeConfD() error {
|
||||||
|
path := nginx.GetConfEntryPath()
|
||||||
|
|
||||||
|
content, err := os.ReadFile(path)
|
||||||
|
if err != nil {
|
||||||
|
return ErrFailedToReadNginxConf
|
||||||
|
}
|
||||||
|
|
||||||
|
// parse nginx.conf
|
||||||
|
p := parser.NewStringParser(string(content), parser.WithSkipValidDirectivesErr())
|
||||||
|
c, err := p.Parse()
|
||||||
|
if err != nil {
|
||||||
|
return ErrParseNginxConf
|
||||||
|
}
|
||||||
|
|
||||||
|
// find http block
|
||||||
|
for _, v := range c.Block.Directives {
|
||||||
|
if v.GetName() == "http" {
|
||||||
|
// find include conf.d
|
||||||
|
for _, directive := range v.GetBlock().GetDirectives() {
|
||||||
|
if directive.GetName() == "include" && len(directive.GetParameters()) > 0 &&
|
||||||
|
strings.HasPrefix(directive.GetParameters()[0].Value, nginx.GetConfPath("conf.d")) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ErrNginxConfNotIncludeConfD
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ErrNginxConfNoHttpBlock
|
||||||
|
}
|
||||||
|
|
||||||
|
// FixNginxConfIncludeConfD attempts to fix nginx.conf to include conf.d directory
|
||||||
|
func FixNginxConfIncludeConfD() error {
|
||||||
|
path := nginx.GetConfEntryPath()
|
||||||
|
|
||||||
|
content, err := os.ReadFile(path)
|
||||||
|
if err != nil {
|
||||||
|
return ErrFailedToReadNginxConf
|
||||||
|
}
|
||||||
|
|
||||||
|
// create a backup file (+.bak.timestamp)
|
||||||
|
backupPath := fmt.Sprintf("%s.bak.%d", path, time.Now().Unix())
|
||||||
|
err = os.WriteFile(backupPath, content, 0644)
|
||||||
|
if err != nil {
|
||||||
|
return ErrFailedToCreateBackup
|
||||||
|
}
|
||||||
|
|
||||||
|
// parse nginx.conf
|
||||||
|
p := parser.NewStringParser(string(content), parser.WithSkipValidDirectivesErr())
|
||||||
|
c, err := p.Parse()
|
||||||
|
if err != nil {
|
||||||
|
return ErrParseNginxConf
|
||||||
|
}
|
||||||
|
|
||||||
|
// find http block
|
||||||
|
for _, v := range c.Block.Directives {
|
||||||
|
if v.GetName() == "http" {
|
||||||
|
// add include conf.d/*.conf to http block
|
||||||
|
includeDirective := &config.Directive{
|
||||||
|
Name: "include",
|
||||||
|
Parameters: []config.Parameter{{Value: nginx.GetConfPath("conf.d/*.conf")}},
|
||||||
|
}
|
||||||
|
|
||||||
|
realBlock := v.GetBlock().(*config.HTTP)
|
||||||
|
realBlock.Directives = append(realBlock.Directives, includeDirective)
|
||||||
|
|
||||||
|
// write to file
|
||||||
|
return os.WriteFile(path, []byte(dumper.DumpBlock(c.Block, dumper.IndentedStyle)), 0644)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// if no http block, append http block with include conf.d/*.conf
|
||||||
|
content = append(content, fmt.Appendf(nil, "\nhttp {\n\tinclude %s;\n}\n", nginx.GetConfPath("conf.d/*.conf"))...)
|
||||||
return os.WriteFile(path, content, 0644)
|
return os.WriteFile(path, content, 0644)
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,11 @@ var selfCheckTasks = []*Task{
|
||||||
CheckFunc: CheckNginxConfIncludeStreams,
|
CheckFunc: CheckNginxConfIncludeStreams,
|
||||||
FixFunc: FixNginxConfIncludeStreams,
|
FixFunc: FixNginxConfIncludeStreams,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Name: "NginxConf-ConfD",
|
||||||
|
CheckFunc: CheckNginxConfIncludeConfD,
|
||||||
|
FixFunc: FixNginxConfIncludeConfD,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
var selfCheckTaskMap = make(map[string]*Task)
|
var selfCheckTaskMap = make(map[string]*Task)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue