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

Nginx配置HTTPS到HTTPS重定向报conflicting server name错误

报错根因

这个警告的触发逻辑非常明确:0.0.0.0:443 监听端口下存在两个 server_name 完全一致(都是old-name.example.com)的虚拟主机块。Nginx 同端口下对相同域名的虚拟主机只会加载第一个读取到的配置,后续重复的配置会被直接忽略,这也是你写的HTTPS到新域名的跳转规则完全不生效的原因。
你当前配置里,第一个server块是原有带业务、CORS规则、SSL配置的443虚拟主机,第三个server块是你新加的443跳转规则,两个块同端口、同域名,直接触发冲突。

修复方案

核心逻辑是删掉重复的虚拟主机块,把跳转逻辑合并到唯一的对应域名server块里,步骤如下:

  • 删除重复定义的第三个443 server块
  • 修改第一个443 server块:移除原有业务相关的location配置、CORS头配置,保留Certbot生成的SSL证书相关配置,直接在块根层级配置301跳转到新域名
  • 简化第二个80端口server块:移除Certbot自动生成的冗余host判断和末尾的404返回规则,直接配置全量HTTP请求跳转到HTTPS
修正后可直接用的配置

替换 /etc/nginx/sites-enabled/myconf.conf 内的全部内容即可:

# 80端口HTTP服务:统一跳转至HTTPS
server {
    listen 80;
    server_name old-name.example.com;
    return 301 https://$host$request_uri;
}

# 443端口HTTPS服务:旧域名永久跳转至新域名
server {
    listen 443 ssl; # managed by Certbot
    server_name old-name.example.com;

    # 保留原有Certbot生成的全部SSL配置,删除这部分会导致HTTPS握手失败
    [ssl config...]

    # 原有业务、CORS相关的location配置全部删除,直接配置全局跳转
    return 301 https://www.new-name.com$request_uri;
}
生效操作

配置修改完成后依次执行以下命令:

  1. 校验配置语法是否正确:nginx -t,确认输出syntax is ok、test is successful再继续下一步
  2. 重载Nginx配置让规则生效:systemctl reload nginx
避坑提醒
  • Nginx虚拟主机匹配规则:同一监听端口维度,server_name精确匹配的虚拟主机只会生效第一个被读取到的配置,重复定义的同名配置会被直接丢弃,不要给同端口同域名配置多个server块
  • HTTPS跳转必须在对应server块中配置有效SSL证书,否则用户请求会先触发SSL证书错误,无法正常收到跳转响应
  • 所有Nginx配置修改后必须先执行nginx -t做语法校验,避免配置错误导致服务中断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 02:45:51