news 2026/9/11 2:08:34

Gin 如何配合 autotls 用 Let‘s Encrypt 一行代码上线 HTTPS 服务

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Gin 如何配合 autotls 用 Let‘s Encrypt 一行代码上线 HTTPS 服务

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.comexample2.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"),把certFilekeyFile换成你的证书与私钥路径。与 autotls 方案不同,这条路径不自动续期,证书到期需要自行替换。

边界说明

  • 以上两个 autotls 示例都是完整可运行的main函数,example1.comexample2.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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 2:08:27

Windows临时文件智能清理与存储空间释放实战指南

说句实在话,我做Windows系统维护这么多年,见过太多用户对“临时文件”这个概念的误解。有人觉得C盘满了就是垃圾太多,装个清理软件一键扫描就万事大吉;也有人被各种“优化大师”吓怕了,宁可忍受空间告急也不敢动系统里…

作者头像 李华
网站建设 2026/9/11 2:06:52

如何用 :tree-sitter-subtree 查看语法树来编写 Helix 查询

如何用 :tree-sitter-subtree 查看语法树来编写 Helix 查询 【免费下载链接】helix A post-modern modal text editor. 项目地址: https://gitcode.com/GitHub_Trending/he/helix 编写 Helix 的 tree-sitter 查询文件(highlights.scm、rainbows.scm、textobj…

作者头像 李华
网站建设 2026/9/11 2:04:02

微服务数据依赖症:拆服务易,拆数据难

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 2:02:46

HeyGem.ai本地部署教程:3步跑通数字人视频生成工具

HeyGem.ai本地部署教程:3步跑通数字人视频生成工具 【免费下载链接】Duix-Avatar 🚀 Truly open-source AI avatar(digital human) toolkit for offline video generation and digital human cloning. 项目地址: https://gitcode.com/GitHub_Trending/…

作者头像 李华
网站建设 2026/9/11 2:02:39

从零接入WorkBuddy:个人开发者构建Agent应用全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华