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

双域名双IP服务器Nginx配置异常排查及已解决说明

双IP服务器Nginx多域名配置问题解决

问题场景

服务器eth1网卡绑定双IP(1.2.3.26、1.2.3.30),使用Nginx反向代理托管两个域名:

  • server.info 对应IP 1.2.3.26
  • server.dev 对应IP 1.2.3.30

单域名运行正常,新增第二个域名后出现两类异常:

  • 单配置文件时,访问server.dev会加载server.info目录下的index.html,server.info访问正常;
  • 拆分为dev.conf和api.conf两个配置文件后,仅server.dev能正常访问,server.info完全无法接收流量,但执行nginx -t始终显示配置验证通过。

问题根源

Nginx在处理多IP多域名配置时,如果未明确指定listen指令绑定特定IP+端口,会默认监听服务器所有可用IP的对应端口,导致域名匹配逻辑混乱,流量被错误路由到默认server块。拆分配置时仅为server.dev添加SSL证书不是核心问题,关键是要确保每个域名对应的server块都精准绑定到对应IP。

正确配置示例

以下是修正后的完整配置(每个server块均明确监听对应IP的端口):

# server.info 相关配置
server {
    listen                  1.2.3.26:443 ssl http2;
    server_name             www.server.info;
    root                    /var/www/server.info/;
    index                   index.html;

    # SSL 配置
    ssl_certificate /etc/letsencrypt/live/server.info/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/server.info/privkey.pem; # managed by Certbot
    ssl_trusted_certificate /etc/letsencrypt/live/server.info/chain.pem;
    
    # 安全配置
    include                 nginxconfig.io/security.conf;

    # 日志配置
    access_log              /var/log/nginx/server.info.access.log;
}

# HTTP 跳转至 HTTPS(server.info)
server {
    listen      1.2.3.26:80;
    server_name server.info;
    root        /var/www/server.info/;
    index       index.html;
    include     nginxconfig.io/letsencrypt.conf;

    location / {
        return 301 https://www.server.info$request_uri;
    }
}

server {
    listen      1.2.3.26:80;
    server_name www.server.info;
    root        /var/www/server.info/;
    index       index.html;
    include     nginxconfig.io/letsencrypt.conf;

    location / {
        return 301 https://www.server.info$request_uri;
    }
}

# server.dev 相关配置
server {
    listen                  1.2.3.30:443 ssl http2;
    server_name             www.server.dev;
    root                    /var/www/server.dev/;
    index                   index.html;

    # SSL 配置(需补充对应证书)
    # ssl_certificate /etc/letsencrypt/live/server.dev/fullchain.pem;
    # ssl_certificate_key /etc/letsencrypt/live/server.dev/privkey.pem;
    
    # 安全配置
    include                 nginxconfig.io/security.conf;

    # 日志配置
    access_log              /var/log/nginx/server.dev.access.log;
}

# HTTP 跳转至 HTTPS(server.dev)
server {
    listen      1.2.3.30:80;
    server_name server.dev;
    root        /var/www/server.dev/;
    index       index.html;
    include     nginxconfig.io/letsencrypt.conf;

    location / {
        return 301 https://www.server.dev$request_uri;
    }
}

server {
    listen      1.2.3.30:80;
    server_name www.server.dev;
    root        /var/www/server.dev/;
    index       index.html;
    include     nginxconfig.io/letsencrypt.conf;

    location / {
        return 301 https://www.server.dev$request_uri;
    }
}

关键注意事项

  • 所有listen指令必须明确指定对应域名的IP地址,避免使用listen 443或listen 80这种无IP绑定的写法;
  • 拆分配置文件时,确保每个域名的配置文件都被Nginx加载(放在/etc/nginx/conf.d/或指定的include目录下);
  • 配置修改后,执行nginx -s reload重载配置,不要仅依赖nginx -t的验证结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 22:45:43