继原生ACME支持后:我们让NGINX的自动证书变得更简单

大家好!距离上次分享《NGINX 终于迎来"史诗级"更新,原生支持 ACME 自动申请证书》已经有一段时间了。那篇文章引起了很好的反响,很多人都对 NGINX 这一官方功能感到兴奋 ------ 终于我们可以摆脱 certbot 和其他第三方工具,用更优雅、更原生的方式实现 SSL 证书的自动化。

然而,在兴奋之余,我也收到了大量的反馈,其中一个核心问题被反复提及:

"功能虽好,但自己动手编译 NGINX 和 ACME 模块实在是太麻烦了!而且编译的时候会遇到很多依赖包的网络下载失败问题"

我完全理解大家的感受。手动编译不仅意味着要安装一套完整的构建环境(build-essential, libpcre2-dev, libssl-dev...),以及rust构建环境,还要小心翼翼地处理版本兼容性、下载源码、配置编译参数,整个过程既耗时又容易出错。对于许多只想快速部署网站的开发者和运维人员来说,这个门槛确实不低。

那么,我们能否将这份强大化为一份开箱即用的简单?

为了解决这个痛点,我创建了一个全新的开源项目,它将整个编译、打包过程完全自动化。现在你无需任何编译操作,只需几条简单的命令,就能拥有一个内置了 ACME 模块、完全可移植的 NGINX 环境。

项目地址:github.com/hzbd/nginx-...


我们构建了什么?一个"绿色版"的 NGINX

这个项目不再仅仅是构建一个孤零零的 .so 动态模块,而是通过 GitHub Actions 自动化构建了一个完全可移植、自包含的 NGINX 软件包

你可以把它理解为一个"绿色版"的 NGINX,它具备以下优秀特性:

  • 完全可移植,零系统依赖 :我们通过修改编译参数,将 NGINX 的所有默认路径(如配置、日志、PID、临时文件)都改为了相对路径 。这意味着它不会在你的系统里到处创建文件(比如 /etc/nginx, /var/log/nginx),所有文件都被"囚禁"在一个目录里,干净又清爽。
  • 开箱即用: 下载解压后,你会得到一个包含 NGINX 二进制文件、ACME 模块、配置文件模板以及所有必需目录的完整环境。
  • 自动跟踪最新稳定版: 工作流每天会自动检查 NGINX 的最新稳定版本,并构建对应的软件包。你总能第一时间用上最新的稳定功能。
  • 支持自定义版本: 如果你需要一个特定的 NGINX 版本,只需 Fork 仓库,手动触发一次构建,填入版本号即可。

🚀 快速使用指南

下载的软件包被设计为通过附带的 nginxctl.sh 脚本进行完整管理,这大大简化了操作。

第一步:下载并解压

  1. 访问本仓库的 Releases 页面

  2. 从 "Assets" 区域下载与您服务器 Debian 版本相匹配的压缩包 (例如 ...-debian12.tar.gz)。

  3. 在您的服务器上解压文件:

    bash 复制代码
    tar -xzf <archive-name>.tar.gz
    cd nginx_acme

    重要提示 : 如果您的系统上已通过 apt 安装了 NGINX,请先停止并禁用它 (sudo systemctl stop nginx),以释放 80 和 443 端口。

第二步:配置您的网站

  1. 检查主配置 : 主配置文件 nginx.conf 已包含在内。您可能需要根据 conf/nginx.conf 模板的设计,在其中启用 load_module 指令。

  2. 设置您的站点 : 复制 vhost 模板以创建您网站的配置文件。

    bash 复制代码
    cp vhost/default.conf.example vhost/your_site.conf
  3. 编辑配置 : 打开 vhost/your_site.conf 文件,更新您的域名、路径和其他设置。

第三步:使用 nginxctl.sh 管理 NGINX

此脚本是您控制 NGINX 服务的主要工具。

  1. 赋予执行权限 (仅需一次):

    bash 复制代码
    chmod +x nginxctl.sh
  2. 使用脚本命令:

    • 测试配置 : 脚本在启动或重载前会自动测试配置,以防出错。

      bash 复制代码
      ./nginxctl.sh test
    • 启动 NGINX :

      bash 复制代码
      ./nginxctl.sh start
    • 查看状态 :

      bash 复制代码
      ./nginxctl.sh status
    • 重载配置 (修改配置文件后) :

      bash 复制代码
      ./nginxctl.sh reload
    • 平滑停止 (等待当前连接处理完毕) :

      bash 复制代码
      ./nginxctl.sh quit
    • 立即停止 :

      bash 复制代码
      ./nginxctl.sh stop

就是这么简单!你的 NGINX 已经带着强大的 ACME 功能运行起来了。


为什么这是更好的方式?

  • 省时省力: 从下载到运行只需几分钟,而手动编译可能需要数小时的折腾。
  • 稳定可靠: 自动化的构建流程确保了每一次的产物都是一致和可靠的,避免了人为操作的失误。
  • 环境隔离: 它不污染你的主系统,你可以把它放在任何目录下运行,甚至可以在同一台服务器上运行多个不同版本的 NGINX 实例而互不干扰。

使用场景

场景 是否适合 核心原因
作为"公网直接入口" (VPS, Docker) 非常适合 能直接响应 ACME 的 HTTP 验证,是理想工作模式。
个人/中小型项目/快速原型 非常适合 架构简单,符合"直接入口"模式,部署极快。
开发环境 (配合内网穿透) 适合 可通过工具临时暴露端口,获得真实证书用于测试。
位于"负载均衡器/Ingress之后" (Docker/K8s) 完全不适合 无法响应公网验证,SSL 证书应由边缘设备管理。
大规模企业自动化运维 不适合 与现有的标准化配置管理及证书体系冲突。

构建您自己的版本

如果您需要一个特定(某个低版本,但至少是1.25.0以后的)NGINX 版本,或者想要自定义编译参数,您可以轻松地 fork 本仓库并自行构建。

  1. Fork 本仓库 : 点击页面右上角的 Fork按钮
  2. 启用 Actions: 在您 fork 后的仓库页面,进入 'Actions' 标签页,并按提示启用 GitHub Actions。
  3. 手动触发构建 :
    • 在左侧边栏点击 'Build and Release NGINX with ACME Module Package' 工作流。
    • 点击右侧的 'Run workflow' 下拉按钮。
    • 在 'Optional: Specify an NGINX version to build' 输入框中,填入您想要构建的 NGINX 版本号(例如 1.26.1)。
    • 点击绿色的 'Run workflow' 按钮开始构建。
  4. 获取包文件: 构建完成后,一个新的 Release 将会自动创建在您自己仓库的 'Releases' 页面,您可以从中下载您的定制软件包。
  5. 当前仅适配了Debian11/12版本,如果你需要适配其他如何ubuntu/centos等发行版,仅需将编译基础容器更换为对应linux发行版,同时对应依赖的软件包做修改,并调整包名。

遇到过的问题

如果你是基于letsencrypt.org来验签证书,部分地区可能会存在网络问题,比如证书申请失败,这时你需要调整resolver 223.5.5.5 valid=30s; 参数,增加超时或者更换一个距离你服务器更近的dns。另外,你可以将Nginx error日志级别调整为debug,acme扩展的debug信息非常详细,依然可以快速定位问题。

结语

从功能上说,nginx-acme官方扩展做得非常出色。指令清晰(acme_certificate),跟 NGINX 自身的事件模型结合得天衣无缝,没有外部脚本依赖,也不需要你再去操心额外的 cron 续期任务。一旦配置正确跑起来,证书自动化就成了一件你几乎可以彻底忘记的事情。这绝对是官方出手该有的水准,也是未来 NGINX 证书管理的正确方向。但是呢,他不适合所有场景拿去使用,还是要具体情况据看待。

就到这里吧。

欢迎大家前往项目仓库 hzbd/nginx-acme-build 下载体验,如果您有任何建议或问题,欢迎提出 Issue 和 Pull Request!

相关推荐
CoderJia程序员甲3 小时前
GitHub 热榜项目 - 日榜(2025-10-10)
ai·开源·大模型·github·ai教程
ajassi20004 小时前
开源 java android app 开发(十八)最新编译器Android Studio 2025.1.3.7
android·java·开源
DolphinScheduler社区5 小时前
# 3.1.8<3.2.0<3.3.1,Apache DolphinScheduler集群升级避坑指南
java·大数据·开源·apache·任务调度·海豚调度
CoderJia程序员甲5 小时前
GitHub 热榜项目 - 日榜(2025-10-06)
ai·开源·llm·github·ai编程·github热榜
小小前端_我自坚强5 小时前
Tailwind CSS 详解
css·程序员·开源
kalvin_y_liu8 小时前
DeploySharp开源发布:让C#部署深度学习模型更加简单
深度学习·开源·c#
猫头虎9 小时前
如何解决 pip install -r requirements.txt extras 语法 ‘package[extra’ 缺少 ‘]’ 解析失败问题
开发语言·python·开源·beautifulsoup·virtualenv·pandas·pip
序属秋秋秋10 小时前
《Linux系统编程之入门基础》【Linux的前世今生】
linux·运维·服务器·开源·unix·gnu