From 93630ffa4ba16c6b6d9898fda50b8496dc4a5c77 Mon Sep 17 00:00:00 2001 From: iluobei Date: Wed, 8 Apr 2026 00:47:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=87=AA=E5=8A=A8=E8=AE=BE?= =?UTF-8?q?=E7=BD=AEssl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/mmw-agent/main.go | 1 + internal/handler/manage.go | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/cmd/mmw-agent/main.go b/cmd/mmw-agent/main.go index 77d978f..6362d65 100644 --- a/cmd/mmw-agent/main.go +++ b/cmd/mmw-agent/main.go @@ -88,6 +88,7 @@ func main() { mux.HandleFunc("/api/child/routing", manageHandler.HandleRouting) mux.HandleFunc("/api/child/scan", manageHandler.HandleScan) mux.HandleFunc("/api/child/cert/deploy", manageHandler.HandleCertDeploy) + mux.HandleFunc("/api/child/nginx/setup-ssl", manageHandler.HandleNginxSetupSSL) mux.HandleFunc("/api/child/domains/latency", manageHandler.HandleDomainLatencyProbe) // SSE streaming install/remove diff --git a/internal/handler/manage.go b/internal/handler/manage.go index 54093a0..133d0b3 100644 --- a/internal/handler/manage.go +++ b/internal/handler/manage.go @@ -2574,6 +2574,40 @@ func deployNginxSSLConfig(domain string) { log.Printf("[Manage] Nginx SSL config deployed for domain %s at %s", domain, sslConfPath) } +// HandleNginxSetupSSL handles POST /api/child/nginx/setup-ssl +// Deploys SSL 443 server block for a domain without reinstalling nginx. +func (h *ManageHandler) HandleNginxSetupSSL(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + writeError(w, http.StatusMethodNotAllowed, "Method not allowed") + return + } + if !h.authenticate(r) { + writeError(w, http.StatusUnauthorized, "Unauthorized") + return + } + + var req struct { + Domain string `json:"domain"` + } + if err := json.NewDecoder(r.Body).Decode(&req); err != nil || req.Domain == "" { + writeError(w, http.StatusBadRequest, "domain is required") + return + } + + domain := strings.ToLower(strings.TrimSpace(req.Domain)) + deployNginxSSLConfig(domain) + + // Reload nginx to apply + if err := reloadNginx(); err != nil { + log.Printf("[Manage] Nginx reload after setup-ssl failed: %v", err) + } + + writeJSON(w, http.StatusOK, map[string]interface{}{ + "success": true, + "message": fmt.Sprintf("SSL config deployed for %s", domain), + }) +} + func reloadNginx() error { for _, bin := range []string{"/usr/local/nginx/sbin/nginx", "nginx"} { if path, err := exec.LookPath(bin); err == nil {