From e895c91ab7d531ad956a8a26f67cb73013ab2b36 Mon Sep 17 00:00:00 2001 From: ryan Date: Wed, 11 Mar 2026 10:48:32 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=20Nginx=20=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E8=A7=A3=E6=9E=90=E9=80=BB=E8=BE=91=EF=BC=8C=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=AD=A3=E5=88=99=E8=A1=A8=E8=BE=BE=E5=BC=8F=E5=8C=B9?= =?UTF-8?q?=E9=85=8D=EF=BC=8C=E6=9B=B4=E6=96=B0=E6=B5=8B=E8=AF=95=E7=94=A8?= =?UTF-8?q?=E4=BE=8B=E4=BB=A5=E9=AA=8C=E8=AF=81=E6=96=B0=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- atsf_agent/internal/nginx/manager.go | 15 ++++++--------- atsf_agent/internal/nginx/manager_test.go | 12 ++++++++++++ 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/atsf_agent/internal/nginx/manager.go b/atsf_agent/internal/nginx/manager.go index 22f0c88d..c5fabc54 100644 --- a/atsf_agent/internal/nginx/manager.go +++ b/atsf_agent/internal/nginx/manager.go @@ -10,6 +10,7 @@ import ( "os" "os/exec" "path/filepath" + "regexp" "sort" "strings" @@ -300,19 +301,15 @@ func detectVersion(ctx context.Context, options ExecutorOptions, runner CommandR } func parseNginxVersion(output string) string { - start := strings.Index(output, "nginx/") - if start < 0 { + matches := nginxVersionPattern.FindStringSubmatch(output) + if len(matches) != 2 { return "" } - version := output[start+len("nginx/"):] - for i, r := range version { - if r == ' ' || r == '\n' || r == '\r' || r == '\t' { - return version[:i] - } - } - return version + return matches[1] } +var nginxVersionPattern = regexp.MustCompile(`(?im)nginx version:\s*nginx/([^\s]+)`) + type backupState struct { RouteExisted bool RouteData []byte diff --git a/atsf_agent/internal/nginx/manager_test.go b/atsf_agent/internal/nginx/manager_test.go index 17a59dfd..ee780b8c 100644 --- a/atsf_agent/internal/nginx/manager_test.go +++ b/atsf_agent/internal/nginx/manager_test.go @@ -244,6 +244,18 @@ func TestDetectVersionFromDockerImage(t *testing.T) { } } +func TestParseNginxVersionIgnoresDockerEntrypointPaths(t *testing.T) { + output := strings.Join([]string{ + "/docker-entrypoint.sh: /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh: info: can not modify /etc/nginx/conf.d/default.conf (read-only file system?)", + "nginx version: nginx/1.27.4", + }, "\n") + + version := parseNginxVersion(output) + if version != "1.27.4" { + t.Fatalf("unexpected version: %s", version) + } +} + func TestManagerApplyWritesSupportFilesAndReplacesPlaceholder(t *testing.T) { tempDir := t.TempDir() manager := &Manager{