You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NGINX下仅单个域名出现ERR_CERT_COMMON_NAME_INVALID错误如何解决

问题原因分析
  • 你配置的80端口server块仅匹配example.com的请求,访问http://www.example.com时无法匹配到该块,Nginx不会返回预期的301跳转
  • 307状态码是浏览器本地HSTS(HTTP严格传输安全)策略触发的内部重定向,并非Nginx返回:由于你之前的站点返回过带includeSubDomains参数的HSTS头,浏览器会自动将所有example.com子域名的HTTP请求直接升级为HTTPS请求,根本不会请求80端口
  • 升级后的请求是https://www.example.com,而你的SSL证书仅对example.com签发,SSL握手阶段就会触发ERR_CERT_COMMON_NAME_INVALID错误,还没走到Nginx的跳转逻辑
修复方案

1. 调整80端口配置捕获所有HTTP请求

将原80端口的server块替换为如下配置,匹配所有HTTP请求直接跳转主站,避免域名匹配遗漏:

server {
  listen 80 default_server;
  server_name _;
  return 301 https://example.com$request_uri;
}

2. 解决HTTPS证书适配问题

二选一即可:

  • 申请SAN多域名SSL证书,将所有你持有的域名(包括www.example.com、example.pl、example.at等)都加入证书的使用者备用名称列表,替换原有证书即可解决握手错误
  • 如果你不想修改证书,可去掉HSTS响应头里的includeSubDomains参数,同时清除本地浏览器的HSTS缓存,即可避免浏览器自动将www.example.com的请求升级为HTTPS

3. 优化443端口跳转逻辑

你当前配置中的两条if判断可以合并简化,同时建议将303跳转改为301永久跳转,更符合域名跳转的使用场景,对SEO也更友好:

server {
  listen 443 ssl default_server;
  # 如果已经更换为多域名SAN证书,可将所有域名添加到server_name列表
  server_name example.com;

  include /etc/nginx/headers/headers.conf;
  include /etc/nginx/ssl-options/options-ssl-nginx.conf;
  ssl_dhparam /etc/nginx/ssl-options/ssl-dhparams.pem;

  access_log /var/log/nginx/data-access.log combined;

  # 合并跳转逻辑
  if ($host != example.com) {
    return 301 https://example.com$request_uri;
  }

  location / {
    root /usr/share/nginx/html;
    try_files $uri /blog-build.html;
  }
}

内容的提问来源于stack exchange,提问作者Pepsko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 01:45:03