发布时间:2026-09-21 12:32 更新时间:2026-09-21 12:32 阅读量:0
在宝塔面板里给站点申请并部署 SSL 之后,很多站长会遇到一个很典型的现象:浏览器访问 https://www.example.com 正常,换成 https://example.com 就报证书错误或连接被重置;反过来也有可能。HTTP 下两个入口都能打开,一上 HTTPS 就只剩一个能用,问题基本出在两处:证书本身覆盖了哪些域名,以及 Nginx 的 server_name 有没有把两个入口都接住。
把这两件事理清楚,你就能判断是重新签证书、补一条站点,还是只改一段跳转配置。下面按证书范围和服务器分流两个层面拆开讲。
证书不是「给一台服务器签的」,而是「给一组域名签的」。浏览器校验的是:你访问的域名,是否出现在证书的域名列表里。因此判断问题第一步,是看证书到底包含哪些名字。
单域名证书只写一个名字,例如只签了 example.com。这时访问 www.example.com,浏览器发现证书里没有 www 这个名字,就会拦下来。多域名证书(SAN 证书)在同一张证书里列出多个名字,可以同时包含 example.com 和 www.example.com;通配符证书 *.example.com 只能覆盖同一级子域,注意它通常不覆盖裸域本身,裸域要单独加进去。
在宝塔面板里,进入「网站 → 对应站点 → SSL」,证书信息区域一般能看到证书包含的域名列表。也可以用命令行直接读服务器上已部署的证书文件,确认它签了哪些名字:
# 查看证书包含的域名(SAN 列表)
openssl x509 -in /www/server/panel/vhost/cert/example.com/fullchain.pem -noout -text | grep -A1 "Subject Alternative Name"
只看颁发对象与有效期
openssl x509 -in /www/server/panel/vhost/cert/example.com/fullchain.pem -noout -subject -dates
如果输出的 DNS 列表里没有你访问的那个域名,那就不是配置问题,而是证书没覆盖到,需要重新申请一张把两个名字都包含进去的证书。宝塔面板申请 Let's Encrypt 证书时,勾选域名的地方通常可以把 www 和裸域一起勾上,具体界面以你当前面板版本为准。
证书覆盖到位之后,还要保证 Nginx 对两个域名的请求都能正确响应。Nginx 是按 server_name 匹配请求 Host 的,谁匹配上就用谁的配置。常见做法有两种。
第一种,一个站点文件里同时写两个 server_name,证书也挂在同一段里。这样两个域名共用同一份配置和同一张证书,适合两个入口内容完全一致的情况:
server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /www/server/panel/vhost/cert/example.com/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/example.com/privkey.pem;
root /www/wwwroot/example.com;
index index.php index.html;
}
80 端口统一跳到 HTTPS
server {
listen 80;
server_name example.com www.example.com;
return 301 https://www.example.com$request_uri;
}
第二种,在宝塔里建两个站点分别绑定裸域和 www,各自部署证书。这种结构更清晰,但要注意两个站点的根目录、伪静态、PHP 版本要一致,否则会出现「一个入口是网站、另一个入口是默认页」的串站现象。无论哪种方式,判断当前请求落到哪个 server 块,可以看访问日志里的 server 名字段,或者用 curl 指定 Host 直接测:
# 分别用两个域名测试 TLS 握手与响应头
curl -I https://example.com
curl -I https://www.example.com
忽略证书问题只看服务端返回,用于区分是证书报错还是配置报错
curl -k -I https://www.example.com
如果 curl -k 能通、不带 -k 就报证书错误,说明服务端配置没问题,问题在证书没覆盖该域名;如果带不带 -k 都连不上或返回错误页,就要往 server_name 匹配和站点绑定上查。
第一,别只改跳转不补证书。有人把 80 端口强制跳到 www,以为访问裸域会自动过去,但用户如果直接输入 https://example.com,浏览器在发起请求前就要先完成 TLS 握手,此时还没轮到跳转规则,证书不匹配照样报错。跳转只能解决 HTTP 入口,HTTPS 入口必须靠证书覆盖。
第二,两条入口都启用 HTTPS 后,建议统一主域并做 301,避免 www 与裸域各自被收录造成权重分散。选哪个当主域没有硬性规定,选定后让另一个稳定跳过去即可,跳转链尽量一步到位,别 www 跳裸域再跳 www。
第三,改完配置记得检查语法并重载,不要直接重启:
nginx -t && nginx -s reload
宝塔面板环境下重载
/etc/init.d/nginx reload
另外,如果站点前面套了 CDN,CDN 侧一般也要单独上传或引用证书,并配置回源协议与回源 Host,否则源站通了、边缘节点仍可能报证书错误,这部分以各 CDN 服务商文档为准。证书自动续期后如果新证书没覆盖全部域名,续期成功也可能再次出现只生效一个的情况,续期后值得用上面的 openssl 命令复查一次 SAN 列表。
总结一下排查顺序:先用 openssl 看证书包里有没有两个域名,没有就重新申请覆盖两个名字的证书;再看 Nginx 的 server_name 是否两个都接住、443 与 80 是否都有对应 server 块;最后统一主域做 301,并确认 CDN 与续期环节没有漏掉域名。按这个顺序走,www 与裸域同时走 HTTPS 通常一次就能配好。
| 📑 | 📅 |
|---|---|
| 服务器买多大够用:按日均PV估算CPU内存带宽 | 2026-09-21 |
| 域名转入转出实操:转移码、60天锁与DNS不断线 | 2026-09-21 |
| 宝塔面板新建站点访问却是默认页:根目录与index排查 | 2026-09-21 |
| WordPress换主题后排版错乱:数据迁移避坑指南 | 2026-09-21 |
| 建站前期最容易踩的域名坑:泛解析、www并存与CNAME冲突 | 2026-09-21 |
| Nginx 静态资源 304 与 200 反复切换:条件请求排查 | 2026-09-22 |
| 宝塔面板开CDN后日志全是节点IP:real_ip落地配置 | 2026-09-22 |
| WordPress数据库utf8转utf8mb4:emoji问号的处理步骤 | 2026-09-22 |
| 服务器只开80/443:SSH端口转发访问面板与数据库 | 2026-09-22 |
| 换服务器后百度收录掉了:改IP前后的抓取诊断与sitemap动作 | 2026-09-22 |