在单个服务器上为多个网站配置HTTPS,最实用的方案是使用基于名称的虚拟主机配合Let’s Encrypt免费证书,实现零成本自动化部署与续期。 无论你是个人博主还是运维新手,只要掌握SNI技术和证书管理工具,就能在单台服务器上轻松承载十几个甚至几十个HTTPS站点,且无需额外付费。
服务器多个站点https配置:基于SNI的虚拟主机方案
SNI(服务器名称指示)是解决单服务器多HTTPS站点的核心技术,它允许服务器在SSL握手阶段根据客户端请求的域名,返回对应的证书,从而让多个域名共用同一个IP和端口。
SNI兼容性:无需担心旧设备
行业共识认为,SNI的兼容性已经覆盖超过99%的互联网用户,Windows XP SP3后的系统、Android 4.0以上设备均能正常支持,如果你的访客群体中仍有少量老旧设备,可以考虑使用多证书回退方案,但绝大多数场景下直接用SNI即可。
Nginx配置示例:多域名证书独立部署
假设你需要在服务器上同时运行example.com和test.com两个网站,分别使用独立证书,配置如下:
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# 其他站点配置
}
server {
listen 443 ssl http2;
server_name test.com;
ssl_certificate /etc/letsencrypt/live/test.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/test.com/privkey.pem;
# 其他站点配置
}
每个server块独立监听443端口,通过server_name区分域名,关键点在于每个站点必须拥有自己的证书文件,否则浏览器会提示证书不匹配。
使用通配符证书简化管理
如果你有多个子域名(如a.example.com
、b.example.com),可以只申请一个通配符证书.example.com,然后在所有子站点的server块中引用同一份证书文件,这样配置更简洁,但通配符证书通常需要付费购买,据统计,免费通配符证书的获取渠道有限,且有效期较短,因此多数情况下免费单域名证书搭配自动续期才是更灵活的选择。
多个网站共用https证书:免费与付费方案解析
很多站长在初次搭建时会问:多个网站可以共用同一个SSL证书吗? 答案是取决于证书类型,以下表格对比了三种常见方案的适用场景和成本:
| 证书类型 | 覆盖域名 | 典型成本 | 适合场景 |
|---|---|---|---|
| 单域名证书 | 一个域名 | 免费(如Let’s Encrypt) | 少量独立域名,每个域名单独申请 |
| 多域名证书(SAN) | 多个不同域名 | 免费或付费(按域名数计费) | 需要在一个证书下保护多个互不关联的域名 |
| 通配符证书 | 一个域名及其所有子域名 | 付费,通常几百元一年 | 有大量子域名的同一主站,如电商平台 |
免费证书的实际使用限制
Let’s Encrypt等免费证书每个证书最多包含100个域名(SAN字段),且有效期90天,对于大多数个人或中型站点,免费方案完全够用,业内专家指出,只要合理规划续期流程,免费证书的可靠性完全不输付费产品,但如果你需要更长的有效期(如付费证书通常1-2年)或企业级担保,可以考虑付费证书。
价格与场景:什么时候该付费
服务器多网站https价格差异很大,免费证书零成本,付费证书从几百元到数千元不等,如果你的站点包含敏感信息(如支付页面),且需要品牌认证(OV或EV证书),则付费证书是必要选择,对于普通博客、信息展示站,免费证书搭配自动续期完全够用。
实操步骤:使用Certbot批量配置多个HTTPS网站
以下操作基于Ubuntu 20.04 + Nginx,通过Certbot工具实现一键申请和自动续期。
安装Certbot并获取证书
-
更新系统包并安装Certbot:
sudo apt update sudo apt install certbot python3-certbot-nginx -
为每个域名单独申请证书(以
example.com为例):sudo certbot --nginx -d example.com -d www.example.comCertbot会自动修改Nginx配置,添加SSL相关指令,重复此步骤为其他域名申请证书。
-
确认证书自动续期:
sudo certbot renew --dry-run如果无错误,Certbot会通过systemd定时器或cron任务自动续期,无需手动干预。
手动配置server块(更灵活)
如果你不想让Certbot自动修改配置,可以只获取证书文件,然后手动编辑Nginx配置:
sudo certbot certonly --nginx -d example.com
证书文件会生成在/etc/letsencrypt/live/example.com/目录下,然后你在server块中引用即可。
批量自动续期与常见问题
Certbot默认每天检查两次,在证书到期前30天内自动续期,续期后不需要重启Nginx,因为Certbot会帮你重载,但如果你手动管理证书,续期后需要执行nginx -s reload,多数情况下,直接使用Certbot的自动模式即可,无需额外操作。
配置多HTTPS站点时的常见问题与排查
导致锁图标不绿
即使配置了HTTPS,如果页面中引用了HTTP资源(如图片、脚本、CSS),浏览器地址栏仍然会显示“不安全”,排查方法:使用浏览器开发者工具的“网络”面板,筛选出非HTTPS请求,然后修改资源引用为相对路径或HTTPS URL。
证书错误:域名不匹配
如果浏览器提示“证书名称不匹配”,说明server块中的server_name与证书中的域名不一致,检查证书主题备用名称(SAN)是否包含该域名,或者是否在server块中引用了错误证书文件。
端口冲突与SSL配置错误
多个server块监听443端口时,Nginx依靠server_name区分,如果配置了重复的server_name,Nginx会使用第一个匹配的块,建议使用nginx -t测试配置,确保没有语法错误。
服务器多个网站https常见问题解答
多个网站可以共用同一个SSL证书吗?
可以,但需要证书支持多域名SAN或通配符,For example,Let’s Encrypt允许在一个证书中最多包含100个域名,如果你需要保护两个完全不同的域名(如`a.com`和`b.com`),可以申请一个多域名证书,将它们全部列入SAN字段,但更推荐的做法是每个域名单独申请免费证书,管理更灵活,且不存在单点故障。
配置多个HTTPS网站会影响服务器性能吗?
SSL握手确实消耗CPU,但现代服务器通过会话复用和OCSP Stapling可以大幅降低开销,对于绝大多数中小型站点,10个以内的HTTPS站点对服务器负载的影响可以忽略不计,如果站点数量较多(比如几十个),可以考虑使用硬件加速或支持SSL的负载均衡器,但这不是常见场景。
如何自动续期免费证书避免手动操作?
使用Certbot工具,配合系统定时任务即可,安装Certbot后,运行`sudo certbot renew –dry-run`验证自动续期是否正常,Certbot会创建systemd定时器(通常在`/etc/systemd/system/timers.target.wants/certbot.timer`),每天执行两次,自动检查并续期,无需手动登录服务器操作,只要确保证书路径和Nginx配置正确,续期后会自动重载配置。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/578163.html




