Nginx配置多个SSL证书的全面指南
海外云服务器 40个地区可选 亚太云服务器 香港 日本 韩国
云虚拟主机 个人和企业网站的理想选择 俄罗斯电商外贸虚拟主机 赠送SSL证书
美国云虚拟主机 助力出海企业低成本上云 WAF网站防火墙 为您的业务网站保驾护航
本文提供了关于如何在 Nginx 中配置多个 SSL 证书的全面指南,通过详细步骤和示例,帮助用户为不同域名设置独立的 SSL 证书,确保网站的安全性和正确性,主要内容包括:创建服务器块、配置 SSL 证书路径、使用ssl_certificate
和ssl_certificate_key
指令,以及处理多域名证书的高级配置,还介绍了如何验证配置并确保所有证书正常工作,以提升网站的HTTPS支持能力。
在现代互联网环境中,安全性和用户隐私保护变得愈发重要,为了确保网站的安全性,SSL/TLS 证书被广泛应用于加密传输数据,在某些情况下,我们需要在同一台服务器上为多个域名配置不同的 SSL 证书,本文将详细介绍如何在 Nginx 中配置多个 SSL 证书,并提供一些最佳实践和常见问题的解决方案。
为什么要使用多个 SSL 证书?
在许多情况下,我们可能需要为不同的子域名或完全不同的域名配置独立的 SSL 通配符证书或单域名证书,您可能有以下几个域名:
www.example.com
blog.example.com
shop.example.com
每个域名都有自己的 SSL 证书,这可能是由于不同的品牌策略、安全需求或者合规性要求,通过为每个域名配置单独的 SSL 证书,我们可以更好地管理证书的有效期、密钥交换机制以及中间证书链等细节。
Nginx 的基本 SSL 配置
在开始配置多个 SSL 证书之前,首先需要了解如何为单个域名设置 SSL,以下是一个简单的 Nginx 配置示例,用于为单个域名启用 HTTPS:
server { listen 443 ssl; server_name www.example.com; ssl_certificate /etc/nginx/ssl/www.example.com.crt; ssl_certificate_key /etc/nginx/ssl/www.example.com.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; location / { root /var/www/html; index index.html; } }
在这个例子中,ssl_certificate
和 ssl_certificate_key
指令分别指定了证书文件和私钥文件的位置,还设置了支持的协议版本和加密套件。
配置多个 SSL 证书
为了支持多个域名,我们需要在 Nginx 中创建多个 server
块,每个块对应一个域名,并为其指定相应的 SSL 证书和密钥,以下是一个示例配置,展示了如何为三个不同域名配置 SSL:
server { listen 80; server_name www.example.com blog.example.com shop.example.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name www.example.com; ssl_certificate /etc/nginx/ssl/www.example.com.crt; ssl_certificate_key /etc/nginx/ssl/www.example.com.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; location / { root /var/www/html; index index.html; } } 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; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; location / { root /var/www/blog; index index.html; } } server { listen 443 ssl; server_name shop.example.com; ssl_certificate /etc/nginx/ssl/shop.example.com.crt; ssl_certificate_key /etc/nginx/ssl/shop.example.com.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; location / { root /var/www/shop; index index.html; } }
在这个配置中,我们首先定义了一个监听 80 端口的 server
块,用于将所有 HTTP 请求重定向到 HTTPS,分别为 www.example.com
、blog.example.com
和 shop.example.com
定义了三个 server
块,每个块都包含了对应的 SSL 证书和密钥路径。
自动化的证书管理工具
手动管理和更新多个 SSL 证书可能会变得繁琐且容易出错,为此,可以考虑使用自动化工具来简化这一过程,Let's Encrypt 是一个免费的 SSL 证书颁发机构,提供了命令行工具 certbot
来自动化获取和续订 SSL 证书,以下是使用 Certbot 配置 Let's Encrypt SSL 证书的步骤:
安装 Certbot
在大多数 Linux 发行版中,可以通过包管理器安装 Certbot,在 Ubuntu 上可以运行以下命令:
sudo apt-get update sudo apt-get install certbot python3-certbot-nginx
获取 SSL 证书
使用 Certbot 获取 Let's Encrypt SSL 证书并自动将其配置到 Nginx 中:
sudo certbot --nginx -d www.example.com -d blog.example.com -d shop.example.com
自动续订证书
Certbot 可以定期检查即将到期的证书,并自动续订它们,你可以通过以下命令设置定时任务:
sudo crontab -e
添加以下行以每天凌晨 2 点检查一次证书是否需要续订:
0 2 * * * /usr/bin/certbot renew --quiet
常见问题及解决方法
证书链不完整
如果你的证书是由 CA 颁发的,那么你需要确保在 Nginx 中包含完整的证书链,通常情况下,CA 会提供一个中间证书文件,你可以将其附加到你的主证书文件中。
ssl_certificate /etc/nginx/ssl/www.example.com.crt; ssl_certificate_key /etc/nginx/ssl/www.example.com.key; ssl_trusted_certificate /etc/nginx/ssl/ca_bundle.crt;
浏览器显示错误
如果浏览器显示 SSL 错误,可能是由于证书配置不正确或证书链不完整导致的,检查日志文件(通常是 /var/log/nginx/error.log
)以获取更多信息,并确保所有路径和文件名都是正确的。
性能优化
为多个域名配置 SSL 证书时,可能会导致额外的开销,为了提高性能,可以启用 OCSP Stapling 和 Session Tickets,OCSP Stapling 可以减少客户端验证证书的时间,而 Session Tickets 则可以帮助更快地建立连接,以下是相关的 Nginx 配置:
ssl_stapling on; ssl_stapling_verify on; ssl_session_tickets on; ssl_session_timeout 1d;