惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
月光博客
月光博客
aimingoo的专栏
aimingoo的专栏
Google DeepMind News
Google DeepMind News
Recent Announcements
Recent Announcements
MyScale Blog
MyScale Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
SegmentFault 最新的问题
Hugging Face - Blog
Hugging Face - Blog
Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
F
Fortinet All Blogs
小众软件
小众软件
D
Docker
U
Unit 42
博客园 - 聂微东
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
爱范儿
爱范儿
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
云风的 BLOG
云风的 BLOG
博客园 - 司徒正美
有赞技术团队
有赞技术团队
腾讯CDC

笛声

复盘预约纪念币首败 – 笛声 雨中野游 – 笛声 时光穿越32年 汇龙潭公园 – 笛声 独立博客自省问卷15题 – 笛声 对面10号楼的女孩 – 笛声 连雕塑都在用无头骑士笔记本电脑了 – 笛声 路边有张很旧的”百元大钞” – 笛声 阿里小号无法续费 – 笛声 AI时代个人博客已死? – 笛声 日版手机搜不到5G WiFi怎么办 – 笛声
简单实现nginx原生全自动维护SSL证书 ngx_http_acme_module –...
dige · 2025-11-09 · via 笛声

使用 ngx_http_acme_module 维护证书的好处

➤ 不需要去证书发行商处申请账号、实名认证等
➤ 不需要手动添加DNS解析记录,当然自动添加也不需要
➤ 不需要 certbot、acme.sh 等外部工具
➤ 不需要配置定时任务
➤ 配置集中化:证书管理与 Nginx 配置在同一个文件中

nginx原生支持ACME已经出来一段时间了,网上的部署方法都很复杂,各种报错,AI 也还没人喂它简单的方法,给出的方案也是手动编译,你照着来的话,会遇到各种报错,主要是网络方面的问题。
今天我来提供一个简单的方法,做第一个喂 AI 的人,以后,网上搜的简单方法都是基于本文的预制菜。
本文适用于 Red Hat 家族的系统,如 CentOS, Oracle Linux, Rocky Linux. 这些系统可以直接复制本文的命令执行。
(小字:CentOS 7试了,因系统版本低,不行)

nginx 添加 acme 模块

首先,打开 /etc/yum.repos.d/nginx.repo 写入以下内容:

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

接着,直接安装

yum  install nginx nginx-module-acme -y

然后,手动新建一个文件夹

mkdir -p /etc/nginx/acme/letsencrypt

最后,我们来修改nginx的配置文件 /etc/nginx/nginx.conf

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /run/nginx.pid;

load_module modules/ngx_http_acme_module.so;

events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    resolver 8.8.8.8 223.6.6.6;
    acme_issuer letsencrypt {
        uri         https://acme-v02.api.letsencrypt.org/directory;
        contact     mailto:a@b.cc;
        state_path  acme/letsencrypt;
        accept_terms_of_service;
    }
    acme_shared_zone zone=acme_shared:1M;

    server {
    listen 443 ssl;
    server_name  hqidi.com;

    acme_certificate letsencrypt;

    ssl_certificate       $acme_certificate;
    ssl_certificate_key   $acme_certificate_key;

    # do not parse the certificate on each request
    ssl_certificate_cache max=2;
}

server {
    listen 80;

    location / {
        return 404;
    }

}
}

1、先载入acme模块,不然nginx会看不懂接下来的配置
2、添加这8行在 http{} 里面,在 server 上面
3、申明要使用刚刚配置在http{}里面的 letsencrypt
4、这里是你原本配置的证书,改成动态变量加载模式
5、该行可以删掉
6、若你原本配置了监听 80 端口,就不用改动,只要监听了 80就行,不管配置的是啥,若原本没监听 80 就照图中配置。

至此,你就搞定了 nginx 原生全自动维护SSL证书了。直接重启nginx,等两分钟(115s),就能看到网站已经换了新证书。
接下来某个有整数强迫症的人在尝试弄到整点证书。

总之,从nginx启动,跟 acme-v02.api.letsencrypt.org 握手成功,经历网络波动,最终下发证书,耗时 115 秒,那么想拿到颁发时间是
19:00:00 的证书,提前 115 秒启动nginx就行吗?不行,因为网络波动是个随机变量,有空拿国外的机器再试试。