Fix
This commit is contained in:
parent
49010457db
commit
1f472b2f49
1 changed files with 60 additions and 16 deletions
|
|
@ -15,9 +15,9 @@ import (
|
||||||
const (
|
const (
|
||||||
SWNginxBinary = "solidwall-nginx"
|
SWNginxBinary = "solidwall-nginx"
|
||||||
SWConfigDir = "/etc/solidwall-nginx"
|
SWConfigDir = "/etc/solidwall-nginx"
|
||||||
SWSiteAvailableDir = "/etc/solidwall-nginx/site-available"
|
SWSiteAvailableDir = "/etc/solidwall-nginx/sites-available"
|
||||||
SWSiteEnabledDir = "/etc/solidwall-nginx/site-enabled"
|
SWSiteEnabledDir = "/etc/solidwall-nginx/sites-enabled"
|
||||||
SWStaticDir = "/etc/solidwall-nginx/static"
|
SWStaticDir = "/usr/share/solidwall-nginx/config/static"
|
||||||
SWLogDir = "/var/log/solidwall"
|
SWLogDir = "/var/log/solidwall"
|
||||||
SWInternalHTTPPort = 8000
|
SWInternalHTTPPort = 8000
|
||||||
SWInternalHTTPSPort = 9000
|
SWInternalHTTPSPort = 9000
|
||||||
|
|
@ -73,10 +73,10 @@ func processSWClient(
|
||||||
|
|
||||||
log.Printf("✓ Получено ресурсов для SW: %d", len(resourcesData))
|
log.Printf("✓ Получено ресурсов для SW: %d", len(resourcesData))
|
||||||
|
|
||||||
// Создание static файлов если отсутствуют
|
// Создание директорий и static файлов если отсутствуют
|
||||||
if err := ensureSWStaticFiles(); err != nil {
|
if err := ensureSWStaticFiles(); err != nil {
|
||||||
log.Printf("⚠ Ошибка создания static файлов: %v", err)
|
log.Printf("⚠ Ошибка создания директорий/файлов SW: %v", err)
|
||||||
// Не критично, продолжаем
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// Генерация конфигов для каждого ресурса
|
// Генерация конфигов для каждого ресурса
|
||||||
|
|
@ -243,13 +243,13 @@ func generateSWConfig(config Config, clientTitle string, res ResourceData) (bool
|
||||||
return false, fmt.Errorf("замена конфига: %w", err)
|
return false, fmt.Errorf("замена конфига: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Создаём симлинк в site-enabled если не существует
|
// Создаём симлинк в sites-enabled если не существует
|
||||||
if _, err := os.Lstat(enabledPath); os.IsNotExist(err) {
|
if _, err := os.Lstat(enabledPath); os.IsNotExist(err) {
|
||||||
relPath := fmt.Sprintf("../site-available/%s", configFilename)
|
relPath := fmt.Sprintf("../sites-available/%s", configFilename)
|
||||||
if err := os.Symlink(relPath, enabledPath); err != nil {
|
if err := os.Symlink(relPath, enabledPath); err != nil {
|
||||||
log.Printf(" ⚠ Ошибка создания симлинка: %v", err)
|
log.Printf(" ⚠ Ошибка создания симлинка: %v", err)
|
||||||
} else {
|
} else {
|
||||||
log.Printf(" ✓ Создан симлинк в site-enabled")
|
log.Printf(" ✓ Создан симлинк в sites-enabled: %s → %s", enabledPath, relPath)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -381,8 +381,8 @@ func writeSWConfigContent(f *os.File, config Config, res ResourceData) error {
|
||||||
httpsUpstreamName = fmt.Sprintf("secure%d_%d", res.L7ResourceID, httpsOutputPorts[0])
|
httpsUpstreamName = fmt.Sprintf("secure%d_%d", res.L7ResourceID, httpsOutputPorts[0])
|
||||||
}
|
}
|
||||||
|
|
||||||
writeSWInternalHTTPServer(f, res, domainsStr, httpUpstreamName)
|
writeSWInternalHTTPServer(f, res, domainsStr, httpUpstreamName, serverDirectivesWithoutBlocks, locationDirectives, isFullLocationBlock)
|
||||||
writeSWInternalHTTPSServer(f, res, domainsStr, httpsUpstreamName)
|
writeSWInternalHTTPSServer(f, res, domainsStr, httpsUpstreamName, serverDirectivesWithoutBlocks, locationDirectives, isFullLocationBlock)
|
||||||
|
|
||||||
// ════════════════════════════════════════════════════════════
|
// ════════════════════════════════════════════════════════════
|
||||||
// КАСТОМНЫЕ SERVER_BLOCK (если есть)
|
// КАСТОМНЫЕ SERVER_BLOCK (если есть)
|
||||||
|
|
@ -553,7 +553,7 @@ func writeSWPublicHTTPSServer(f *os.File, config Config, res ResourceData, port
|
||||||
}
|
}
|
||||||
|
|
||||||
// writeSWInternalHTTPServer пишет внутренний HTTP → Origin server блок
|
// writeSWInternalHTTPServer пишет внутренний HTTP → Origin server блок
|
||||||
func writeSWInternalHTTPServer(f *os.File, res ResourceData, domainsStr string, upstreamName string) {
|
func writeSWInternalHTTPServer(f *os.File, res ResourceData, domainsStr string, upstreamName string, serverDirectives string, locationDirectives string, isFullLocationBlock bool) {
|
||||||
f.WriteString("# Proxying HTTP requests to origin\n")
|
f.WriteString("# Proxying HTTP requests to origin\n")
|
||||||
f.WriteString("server {\n")
|
f.WriteString("server {\n")
|
||||||
f.WriteString(fmt.Sprintf(" listen 127.0.0.1:%d;\n", SWInternalHTTPPort))
|
f.WriteString(fmt.Sprintf(" listen 127.0.0.1:%d;\n", SWInternalHTTPPort))
|
||||||
|
|
@ -568,14 +568,32 @@ func writeSWInternalHTTPServer(f *os.File, res ResourceData, domainsStr string,
|
||||||
f.WriteString(" proxy_set_header CDN-Loop \"WAF\";\n\n")
|
f.WriteString(" proxy_set_header CDN-Loop \"WAF\";\n\n")
|
||||||
f.WriteString(fmt.Sprintf(" error_log %s/%d_error.log error;\n\n", SWLogDir, res.L7ResourceID))
|
f.WriteString(fmt.Sprintf(" error_log %s/%d_error.log error;\n\n", SWLogDir, res.L7ResourceID))
|
||||||
|
|
||||||
|
// Кастомные location блоки (полные) перед location /
|
||||||
|
if isFullLocationBlock && locationDirectives != "" {
|
||||||
|
log.Printf(" └─ Добавление location_nginx_custom (отдельный блок) для внутреннего HTTP")
|
||||||
|
writeIndentedLines(f, locationDirectives)
|
||||||
|
f.WriteString("\n")
|
||||||
|
}
|
||||||
|
|
||||||
f.WriteString(" location / {\n")
|
f.WriteString(" location / {\n")
|
||||||
|
|
||||||
|
if serverDirectives != "" {
|
||||||
|
log.Printf(" └─ Добавление server_nginx_custom в location / (внутренний HTTP)")
|
||||||
|
writeIndentedLines(f, serverDirectives)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !isFullLocationBlock && locationDirectives != "" {
|
||||||
|
log.Printf(" └─ Добавление location_nginx_custom (директивы) в location / (внутренний HTTP)")
|
||||||
|
writeIndentedLines(f, locationDirectives)
|
||||||
|
}
|
||||||
|
|
||||||
f.WriteString(fmt.Sprintf(" proxy_pass http://%s;\n", upstreamName))
|
f.WriteString(fmt.Sprintf(" proxy_pass http://%s;\n", upstreamName))
|
||||||
f.WriteString(" }\n")
|
f.WriteString(" }\n")
|
||||||
f.WriteString("}\n\n")
|
f.WriteString("}\n\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
// writeSWInternalHTTPSServer пишет внутренний HTTPS → Origin server блок
|
// writeSWInternalHTTPSServer пишет внутренний HTTPS → Origin server блок
|
||||||
func writeSWInternalHTTPSServer(f *os.File, res ResourceData, domainsStr string, upstreamName string) {
|
func writeSWInternalHTTPSServer(f *os.File, res ResourceData, domainsStr string, upstreamName string, serverDirectives string, locationDirectives string, isFullLocationBlock bool) {
|
||||||
f.WriteString("# Proxying HTTPS requests to origin\n")
|
f.WriteString("# Proxying HTTPS requests to origin\n")
|
||||||
f.WriteString("server {\n")
|
f.WriteString("server {\n")
|
||||||
f.WriteString(fmt.Sprintf(" listen 127.0.0.1:%d;\n", SWInternalHTTPSPort))
|
f.WriteString(fmt.Sprintf(" listen 127.0.0.1:%d;\n", SWInternalHTTPSPort))
|
||||||
|
|
@ -593,7 +611,25 @@ func writeSWInternalHTTPSServer(f *os.File, res ResourceData, domainsStr string,
|
||||||
f.WriteString(" proxy_set_header CDN-Loop \"WAF\";\n\n")
|
f.WriteString(" proxy_set_header CDN-Loop \"WAF\";\n\n")
|
||||||
f.WriteString(fmt.Sprintf(" error_log %s/%d_error.log error;\n\n", SWLogDir, res.L7ResourceID))
|
f.WriteString(fmt.Sprintf(" error_log %s/%d_error.log error;\n\n", SWLogDir, res.L7ResourceID))
|
||||||
|
|
||||||
|
// Кастомные location блоки (полные) перед location /
|
||||||
|
if isFullLocationBlock && locationDirectives != "" {
|
||||||
|
log.Printf(" └─ Добавление location_nginx_custom (отдельный блок) для внутреннего HTTPS")
|
||||||
|
writeIndentedLines(f, locationDirectives)
|
||||||
|
f.WriteString("\n")
|
||||||
|
}
|
||||||
|
|
||||||
f.WriteString(" location / {\n")
|
f.WriteString(" location / {\n")
|
||||||
|
|
||||||
|
if serverDirectives != "" {
|
||||||
|
log.Printf(" └─ Добавление server_nginx_custom в location / (внутренний HTTPS)")
|
||||||
|
writeIndentedLines(f, serverDirectives)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !isFullLocationBlock && locationDirectives != "" {
|
||||||
|
log.Printf(" └─ Добавление location_nginx_custom (директивы) в location / (внутренний HTTPS)")
|
||||||
|
writeIndentedLines(f, locationDirectives)
|
||||||
|
}
|
||||||
|
|
||||||
f.WriteString(fmt.Sprintf(" proxy_pass https://%s;\n", upstreamName))
|
f.WriteString(fmt.Sprintf(" proxy_pass https://%s;\n", upstreamName))
|
||||||
f.WriteString(" }\n")
|
f.WriteString(" }\n")
|
||||||
f.WriteString("}\n\n")
|
f.WriteString("}\n\n")
|
||||||
|
|
@ -765,10 +801,18 @@ func writeSWStandardSettings(f *os.File, settings AppsSettings) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ensureSWStaticFiles создаёт static файлы если отсутствуют
|
// ensureSWStaticFiles создаёт необходимые директории и static файлы если отсутствуют
|
||||||
func ensureSWStaticFiles() error {
|
func ensureSWStaticFiles() error {
|
||||||
if err := os.MkdirAll(SWStaticDir, 0755); err != nil {
|
// Создаём директории если отсутствуют (static не создаём — это симлинк)
|
||||||
return fmt.Errorf("создание директории %s: %w", SWStaticDir, err)
|
dirs := []string{
|
||||||
|
SWSiteAvailableDir,
|
||||||
|
SWSiteEnabledDir,
|
||||||
|
SWLogDir,
|
||||||
|
}
|
||||||
|
for _, dir := range dirs {
|
||||||
|
if err := os.MkdirAll(dir, 0755); err != nil {
|
||||||
|
return fmt.Errorf("создание директории %s: %w", dir, err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// static/waf.conf
|
// static/waf.conf
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue