Nginx 自动申请 TLS 证书

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


已发布

分类

来自

标签:

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注