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

Docker环境下Nginx反向代理多域名配置:同服务多域名访问需求

实现双域名指向同一后端且地址栏保持原域名的Nginx配置方案

完全可以实现你的需求,以下是具体的配置调整方案和关键说明:

核心配置思路

  • 用一个通用命名的upstream块统一指向后端服务,避免和域名绑定
  • 通过server_name同时指定两个域名,或复制独立server块分别对应域名
  • 关键配置proxy_set_header Host $host,确保后端接收原始请求域名,同时地址栏不会跳转

方案一:单server块适配双域名(配置简洁,适合无差异化需求)

# 重命名upstream为通用名称,避免和域名绑定
upstream panels-backend {
    server 172.20.1.100:3000;
}

server {
    # 同时指定两个需要匹配的域名
    server_name panels-cliente1.company.com panels-cliente2.company.com;
    listen 443 ssl http2 ;
    access_log /var/log/nginx/access.log vhost;

    # 文件上传限制
    client_max_body_size 50M;

    ssl_session_timeout 5m;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;
    # 注意:SSL证书必须包含两个域名的SAN(Subject Alternative Name),否则浏览器会报安全错误
    ssl_certificate /etc/nginx/certs/cert.crt;
    ssl_certificate_key /etc/nginx/certs/cert.key;
    add_header Strict-Transport-Security "max-age=31536000" always;

    location / {
        proxy_pass http://panels-backend;
        # 核心配置:保留原始请求的Host头,确保地址栏显示用户输入的域名,同时后端能识别请求来源
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

# 可选:添加HTTP跳转HTTPS的配置,同样适配双域名
server {
    server_name panels-cliente1.company.com panels-cliente2.company.com;
    listen 80;
    return 301 https://$host$request_uri;
}

方案二:双server块分别配置(灵活度高,适合后续差异化需求)

如果后续需要给两个域名配置不同的日志路径、自定义响应头等,可以复制独立的server块:

upstream panels-backend {
    server 172.20.1.100:3000;
}

# 第一个域名专属配置
server {
    server_name panels-cliente1.company.com;
    listen 443 ssl http2 ;
    access_log /var/log/nginx/client1-access.log vhost;

    client_max_body_size 50M;
    ssl_session_timeout 5m;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;
    ssl_certificate /etc/nginx/certs/cert.crt;
    ssl_certificate_key /etc/nginx/certs/cert.key;
    add_header Strict-Transport-Security "max-age=31536000" always;

    location / {
        proxy_pass http://panels-backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

# 第二个域名专属配置
server {
    server_name panels-cliente2.company.com;
    listen 443 ssl http2 ;
    access_log /var/log/nginx/client2-access.log vhost;

    client_max_body_size 50M;
    ssl_session_timeout 5m;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;
    ssl_certificate /etc/nginx/certs/cert.crt;
    ssl_certificate_key /etc/nginx/certs/cert.key;
    add_header Strict-Transport-Security "max-age=31536000" always;

    location / {
        proxy_pass http://panels-backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

# HTTP跳转HTTPS配置
server {
    server_name panels-cliente1.company.com panels-cliente2.company.com;
    listen 80;
    return 301 https://$host$request_uri;
}

关键注意事项

  1. SSL证书兼容性:必须确保你的SSL证书包含两个域名的SAN扩展,否则HTTPS访问会被浏览器拦截。如果当前证书只包含单个域名,需要重新申请覆盖双域名的证书。
  2. DNS解析:确认两个域名的DNS记录都指向Nginx反向代理容器所在的服务器IP。
  3. 配置重载:修改配置后,需要在Docker容器内执行nginx -s reload命令使配置生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:45:46