在 Nginx 中配置多域名证书,通常有两种常见的业务场景。您可以根据实际需求选择对应的配置方案:
场景一:多个域名使用各自独立的证书(基于 SNI 匹配)
如果您的服务器托管了多个不同的网站,且每个网站都有自己专属的 SSL 证书,核心思路是为每个域名划分独立的 server 块。Nginx 不支持在同一个 server 块内根据 $host 动态切换证书,必须让 Nginx 在 TLS 握手阶段,依据客户端发出的 SNI(Server Name Indication)信息精准返回对应域名的证书。
配置示例:
域名 A 的独立配置
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
# ... 其他网站配置}
域名 B 的独立配置
server {
listen 443 ssl;
server_name blog.example.com;
ssl_certificate /etc/nginx/ssl/blog.example.com.crt;
ssl_certificate_key /etc/nginx/ssl/blog.example.com.key;
# ... 其他网站配置}
注:如果使用的是宝塔面板等可视化工具,由于面板默认只允许上传一份证书,您需要手动进入“站点配置”中,复制一份 server 块,修改 server_name 并指向另一个域名的证书路径,最后重启 Nginx。
场景二:多个域名共用一张多域名证书(SAN 证书)
如果您申请的是 SAN(Subject Alternative Name)多域名证书或通配符证书(如 *.example.com),则只需要在对应的 server 块中引用这一份证书即可。
配置示例:
server {
listen 443 ssl;
# 在 server_name 中列出所有需要保护的域名
server_name example.com www.example.com api.example.com;
# 统一指向多域名证书
ssl_certificate /etc/nginx/ssl/example_san_fullchain.crt;
ssl_certificate_key /etc/nginx/ssl/example_san.key;
# ... 其他网站配置}
⚠️ 关键注意事项与避坑指南
必须使用完整证书链(Fullchain):配置多域名证书时,极易遇到手机端访问报错或“无法获取本地颁发者证书”的问题。请务必确保 ssl_certificate 指向的是包含中间证书的 fullchain.crt 或 fullchain.pem 文件,而不是单一的站点证书文件。
精确匹配原则:多域名证书不支持通配符自动扩展。例如,如果您需要同时保护带 www 和不带 www 的域名,必须在申请证书和配置 server_name 时分别作为独立条目填入。
强制 HTTP 跳转:无论使用哪种方式,都建议为这些域名配置 80 端口的监听,并统一 301 重定向到 HTTPS,以避免混合内容或证书错配风险。
配置生效验证:修改完配置文件后,务必先执行 nginx -t 检查语法是否正确,确认无误后再执行 nginx -s reload 重载服务使其生效。
评论已关闭