You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Gorilla Mux集成到使用Autocert的Go HTTPS服务中?

如何将Gorilla Mux与autocert集成

很简单,只需要把Gorilla Mux的路由器作为HTTP handler替换掉默认的ServeMux就行啦,我给你整理了完整的可运行代码示例,还有关键修改点的说明:

完整集成代码

package main

import (
    "log"
    "net/http"
    "crypto/tls"
    "golang.org/x/crypto/acme/autocert"
    "github.com/gorilla/mux"
)

func LoginHtml(w http.ResponseWriter, r *http.Request) {
    // 这里替换成你实际的LoginHtml处理逻辑
    w.Write([]byte("Welcome to the Login page!"))
}

func main() {
    certManager := autocert.Manager{
        Prompt: autocert.AcceptTOS,
        // 务必替换成你自己的域名,多个域名可以用逗号分隔
        HostPolicy: autocert.HostWhitelist("example.com", "www.example.com"),
        Cache:      autocert.DirCache("./certs"), // 用于存储Let's Encrypt证书的目录
    }

    // 初始化Gorilla Mux路由器
    r := mux.NewRouter()

    // 定义你的路由规则
    r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", http.FileServer(http.Dir("./static"))))
    r.HandleFunc("/login.html", LoginHtml)
    // 保留原有的根路径响应
    r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("Hello World from Gorilla Mux!"))
    })

    // 配置HTTPS服务器:核心是将Handler设置为Mux路由器
    server := &http.Server{
        Addr:    ":https",
        Handler: r, // 这里用Mux替代默认的ServeMux,所有HTTPS请求都会走Mux路由
        TLSConfig: &tls.Config{
            GetCertificate: certManager.GetCertificate,
        },
    }

    // 启动HTTP服务:处理Let's Encrypt的ACME验证请求,并将其他HTTP请求重定向到HTTPS
    go func() {
        log.Fatal(http.ListenAndServe(":http", certManager.HTTPHandler(r)))
    }()

    // 启动HTTPS服务:证书由autocert自动从Let's Encrypt获取
    log.Fatal(server.ListenAndServeTLS("", ""))
}

关键修改说明

  • 替换默认Handler:把http.Server的Handler字段设置为你的Mux路由器实例r,这是让所有HTTPS请求通过Gorilla Mux处理的核心步骤
  • HTTP重定向与ACME处理:启动HTTP服务时,将Mux路由器传给certManager.HTTPHandler,这样autocert会自动处理Let's Encrypt的域名验证请求,同时把其他HTTP请求重定向到对应的HTTPS路径
  • 依赖安装:记得提前安装Gorilla Mux包:
    go get github.com/gorilla/mux
    

内容的提问来源于stack exchange,提问作者Lucian Blaga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:21:23