Gin 如何配合 autotls 用 Let's Encrypt 一行代码上线 HTTPS 服务
【免费下载链接】ginGin is a high-performance HTTP web framework written in Go. It provides a Martini-like API but with significantly better performance—up to 40 times faster—thanks to httprouter. Gin is designed for building REST APIs, web applications, and microservices.项目地址: https://gitcode.com/GitHub_Trending/gi/gin
用 Gin 写好的服务上线时,手动申请证书、配置端口、续期都是重复劳动。Gin 官方文档(docs/doc.md 的 "Support Let's Encrypt" 一节)给出了一条直接的路径:配合github.com/gin-gonic/autotls包,用一行autotls.Run让服务以 HTTPS 启动,由 Let's Encrypt 自动签发和续期证书;如果已有现成证书文件,也可以用RunTLS手动挂载。本文给出文档中的两条完整代码路径、运行方式与验证方法。
准备条件
- 一个已有的 Gin 项目,Go 版本要求以项目 README 为准:Gin 要求 Go 的 "Go version" 说明)。
- 在项目的依赖中加入
github.com/gin-gonic/autotls;如果走自定义 autocert manager 的分支,还需要golang.org/x/crypto/acme/autocert。 - 一个已经解析到目标服务器 IP 的域名(文档示例中用
example1.com、example2.com表示,实际代码中替换为你自己的域名)。
主路径:一行代码启动 Let's Encrypt HTTPS
把main.go写成下面这样。示例来自 docs/doc.md 的 "Support Let's Encrypt" 章节,注册了一个/ping路由用于验证;autotls.Run的域名参数按注释替换为你的域名即可:
package main import ( "log" "net/http" "github.com/gin-gonic/autotls" "github.com/gin-gonic/gin" ) func main() { r := gin.Default() // Ping handler r.GET("/ping", func(c *gin.Context) { c.String(http.StatusOK, "pong") }) log.Fatal(autotls.Run(r, "example1.com", "example2.com")) }其中最后一行log.Fatal(autotls.Run(r, "example1.com", "example2.com"))就是标题所说的"一行":把 Gin engine 交给 autotls,按你声明的域名启动 HTTPS 服务;如果启动过程返回错误,log.Fatal会直接让进程终止,避免带错上线。gin.Default()自带 Recovery 与 Logger 中间件,适合直接演示和上线。
可选分支:自定义 autocert manager
需要控制证书缓存位置、限制允许的域名时,文档给出了第二个示例:自己构造autocert.Manager,再通过autotls.RunWithManager传入:
package main import ( "log" "net/http" "github.com/gin-gonic/autotls" "github.com/gin-gonic/gin" "golang.org/x/crypto/acme/autocert" ) func main() { r := gin.Default() // Ping handler r.GET("/ping", func(c *gin.Context) { c.String(http.StatusOK, "pong") }) m := autocert.Manager{ Prompt: autocert.AcceptTOS, HostPolicy: autocert.HostWhitelist("example1.com", "example2.com"), Cache: autocert.DirCache("/var/www/.cache"), } log.Fatal(autotls.RunWithManager(r, &m)) }三个字段的作用对应文档原文:Prompt: autocert.AcceptTOS表示自动接受 Let's Encrypt 服务条款;HostPolicy: autocert.HostWhitelist(...)限定只为你列出的域名签发证书;Cache: autocert.DirCache("/var/www/.cache")把签发的证书缓存到该目录。目录路径/var/www/.cache是文档示例值,按你服务器的实际可写位置替换。
验证服务是否上线成功
文档示例自带的验证方式就是/ping路由:服务启动后,用浏览器或curl请求https://你的域名/ping,返回 HTTP 200 且响应体为pong,说明 HTTPS 链路和路由都工作正常。示例中c.String(http.StatusOK, "pong")即预期输出。如果请求走的是http://而非https://,说明证书链路还没建立,应确认服务确实通过autotls.Run/autotls.RunWithManager启动,而不是普通的Run。
已有证书文件时的替代路径
如果不想用 Let's Encrypt 自动签发,而是已经持有证书文件和私钥文件,Gin 引擎本身提供了RunTLS:它"是http.ListenAndServeTLS(addr, certFile, keyFile, router)的快捷方式",启动后监听并处理 HTTPS 请求(见 gin.go)。用法即router.RunTLS(":443", "cert.pem", "key.pem"),把certFile、keyFile换成你的证书与私钥路径。与 autotls 方案不同,这条路径不自动续期,证书到期需要自行替换。
边界说明
- 以上两个 autotls 示例都是完整可运行的
main函数,example1.com、example2.com与/var/www/.cache属于文档占位值,替换为你自己的域名与目录后才能直接使用;除此之外不需要改写其他部分。 - Gin 对 Let's Encrypt 的支持自 Gin 1.2.0 起通过
gin-gonic/autotls引入(见 CHANGELOG.md),当前文档示例即针对现行版本。 - 仓库中的 docs/doc.md "Server Configuration" 章节还覆盖了自定义 HTTP 配置、优雅退出等内容,上线前后如有超时、重启需求可继续查阅。
【免费下载链接】ginGin is a high-performance HTTP web framework written in Go. It provides a Martini-like API but with significantly better performance—up to 40 times faster—thanks to httprouter. Gin is designed for building REST APIs, web applications, and microservices.项目地址: https://gitcode.com/GitHub_Trending/gi/gin
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考