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

迁移至Ubuntu24.04 Nginx时出现server_name冲突报错求助

Nginx 冲突服务器名警告排查与修复

问题背景

从CentOS7+Apache迁移到Ubuntu24.04+Nginx后,出现警告:

nginx: [warn] 25570#25570: conflicting server name "www.example.com" on 0.0.0.0:80, ignored

附上当前Nginx配置文件请求排查。

配置文件内容

server {
    server_name example.com www.example.com;
    root /var/www/example.com;

    index index.html index.php;

    location / {
       try_files $uri $uri/ /index.php?$query_string;
     }

       location ~* /(\.git|cache|bin|logs|backup|tests)/.*$ { return 403; }
       location ~* /(system|vendor)/.*\.(txt|xml|md|html|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
       location ~* /user/.*\.(txt|md|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
       location ~ /(LICENSE\.txt|composer\.lock|composer\.json|nginx\.conf|web\.config|htaccess\.txt|\.htaccess) { return 403; }

    location ~ \.php$ {
       fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
       fastcgi_split_path_info ^(.+\.php)(/.+)$;
       fastcgi_index index.php;
       include fastcgi_params;
       fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
     }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

server {
    if ($host = example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    listen 80;
    server_name example.com www.example.com;
    return 404; # managed by Certbot
}

问题分析

警告的核心原因是80端口的监听配置中,www.example.com被重复声明,同时当前配置的80端口server块存在逻辑错误:

  1. Certbot生成的if ($host = example.com)仅处理主域名的HTTPS跳转,www.example.com访问80端口会直接返回404,不符合预期。
  2. 若服务器上存在其他Nginx配置文件(如默认的default.conf),其未指定server_name或也声明了www.example.com,会触发冲突警告。

修复方案

步骤1:检查并清理冲突配置

执行命令查看启用的配置文件:

ls /etc/nginx/sites-enabled/

如果存在default等无关配置文件,执行以下命令禁用:

sudo unlink /etc/nginx/sites-enabled/default

步骤2:修正80端口跳转逻辑

将原80端口的server块替换为以下内容,实现主域名与www域名统一跳转到HTTPS:

server {
    listen 80;
    server_name example.com www.example.com;

    # 所有HTTP请求强制跳转HTTPS
    return 301 https://$host$request_uri;
}

步骤3:验证配置并重启服务

执行配置合法性检查:

sudo nginx -t

若输出test is successful,重启Nginx服务:

sudo systemctl reload nginx

补充说明

你关于“主域名与子域名放在同一server_name行”的理解是正确的,问题并非出在该配置上,而是80端口的跳转逻辑错误+潜在的配置文件冲突导致的警告。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 07:15:12