外观
多域名多SSL证书配置
约 280 字小于 1 分钟
2025-09-07
一般情况下一个server
内,配置一个域名以及一个SSL
证书。
但有些场景下,同一个server
内,通过server_name
代理了多个域名,且每个域名有单独的SSL
证书。按传统做法,只能将server
进行拆分,确保一个server
内一个域名与一个SSL
证书,但这会让配置分散、冗余,不好维护。
Nginx 1.7.0
版本开始,引入SNI(Server Name Indication)
功能,获取TLS
握手期间客户端请求的服务器名称,可通过$ssl_server_name
变量获取。
Nginx
是否支持SNI
可通过查看版本信息确认:
% nginx -V
nginx version: nginx/1.27.4
built by clang 16.0.0 (clang-1600.0.26.6)
built with OpenSSL 3.4.0 22 Oct 2024 (running with OpenSSL 3.4.1 11 Feb 2025)
TLS SNI support enabled
configure arguments: --prefix=......
通过$ssl_server_name
变量简化多域名证书配置:
path
to
certs# 将证书文件放到同一个目录下
a.com.key
a.com.pem
b.com.key
b.com.pem
c.com.key
c.com.pem
server {
listen 443 ssl;
server_name a.com b.com c.com;
# 使用ssl_server_name变量动态选择证书
ssl_certificate /path/to/certs/$ssl_server_name.pem;
ssl_certificate_key /path/to/certs/$ssl_server_name.key;
}