Nginx 在2025年8月12日宣布引入了官方 ACME 模块 ngx_http_acme_module
这个模块使用Rust语言编写,支持 ACMEv2 协议(HTTP-01 挑战)可以方便的申请TLS证书
安装模块:
apk add nginx nginx-mod-http-acme
包管理器应该会自动加载模块
neko:~# cat /etc/nginx/modules/10_http_acme.conf
load_module "modules/ngx_http_acme_module.so";
新建文件 /etc/nginx/http.d/acme.conf 用于存放ACME相关的配置:
# 定义一个 issuer,叫啥都行,这里用 letsencrypt
acme_issuer letsencrypt {
# 证书颁发机构 ACME(v2, RFC 8555) 服务URL,这里用 Let's Encrypt
uri https://acme-v02.api.letsencrypt.org/directory;
# 可选,填写自己的邮箱
contact j4fyfxqwn@mozmail.com;
# 存储账号、证书的路径
state_path /var/cache/nginx/acme-letsencrypt;
# 同意 Let's Encrypt 服务条款
accept_terms_of_service;
}
# ACME 模块专用的共享内存区
acme_shared_zone zone=acme_shared:1M;
# 配置 DNS
resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001];
创建存储账号、证书的目录:
mkdir -p /var/cache/nginx/acme-letsencrypt
在 server {} 块里启用它:
server {
listen 80;
listen [::]:80;
listen 443 ssl;
listen [::]:443 ssl;
# 证书域名
server_name neko.guguan.us.kg;
# 使用名称为 letsencrypt 的 issuer 申请/续签证书
acme_certificate letsencrypt;
# 使用变量由模块自动填充
ssl_certificate $acme_certificate;
ssl_certificate_key $acme_certificate_key;
# 可选,缓存证书,减少每次请求解析
ssl_certificate_cache max=2;
root /var/www/localhost/htdocs;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
重载 Nginx
nginx -t && service nginx reload
静置几分钟,Nginx 会自动申请证书
检查你指定的 state_path 是否有相关证书文件
neko:~# ls /var/cache/nginx/acme-letsencrypt/
account.key neko.guguan.us.kg-aaf2531d0d8ce1b0.crt
account.url neko.guguan.us.kg-aaf2531d0d8ce1b0.key
这样就说明申请TLS证书成功了
相关文档:https://blog.nginx.org/blog/native-support-for-acme-protocol
发表回复