nginx如何配置域名代理多个域名,nginx多域名反向代理配置教程

Nginx配置域名代理多个域名,核心答案就一句话:每个域名对应一个独立的server块,用server_name识别域名,再用proxy_pass转发到各自的后端服务。 这套逻辑在80和443端口都成立,真正容易踩坑的地方不在语法,而在证书匹配、Host头传递和默认server的优先级。

nginx反向代理多个域名怎么配置?先理清server块与请求匹配逻辑

一个请求进来,Nginx怎么知道该找哪个域名

Nginx处理多域名请求时,靠的是“监听端口 + server_name”组合匹配,你可以把它理解成前台分诊:先看请求进的是哪个门,再看挂号条上的域名。

手动安装nginx并 配置多域名访问不同网站
加载中
手动安装nginx并 配置多域名访问不同网站

具体匹配顺序可以记成下面几点:

  • 先匹配listen指令,比如80端口和443端口分开处理;
  • 再匹配server_name,精确域名优先,通配符次之,正则再次之;
  • 如果没有匹配到任何server_name,就会落到该端口的default_server;
  • 如果没显式设置默认server,Nginx通常会把第一个server块当默认。

业内专家指出,多域名代理最容易出问题的地方不是proxy_pass,而是Host头和SNI证书匹配,很多“访问A域名却打开B站点”的故障,根源都在这里。

最小可用配置示例

假设你有两个域名:a.example.com和b.example.com,分别代理到本机8080和8081端口,配置可以写成这样:

# /etc/nginx/conf.d/multi-domain.conf
server {
    listen 80;
    server_name a.example.com;
    location / {
        proxy_pass http://127.0.0.1:8080;
        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 {
    listen 80;
    server_name b.example.com;
    location / {
        proxy_pass http://127.0.0.1:8081;
        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_name后面写完整域名,不要带http://或路径;
  • 不同后端就拆不同server块,不要硬塞进一个location里;
  • proxy_set_header Host $host必须加,否则后端可能拿不到原始域名。

改完配置后,别急着刷新浏览器

每次改完Nginx配置,建议按这个顺序检查:

  1. 执行nginx -t,确认语法没有问题;
  2. 执行nginx -T,查看最终合并后的完整配置;
  3. nginx如何配置域名代理多个域名,nginx多域名反向代理配置教程

  4. 执行systemctl reload nginx或nginx -s reload,平滑加载;
  5. 用curl -I -H "Host: a.example.com" http://127.0.0.1测试本机匹配;
  6. 再用curl -I --resolve a.example.com:80:服务器IP http://a.example.com测试外部解析。

这样能快速判断是Nginx匹配问题,还是DNS、防火墙、后端服务的问题。

nginx一个端口代理多个域名:80和443的实操差异

80端口:纯HTTP多域名代理

80端口的配置最简单,多个server块都监听80,靠server_name区分,适合内部测试、临时跳转、旧站迁移,生产环境如果还跑HTTP,建议加一个301跳转到HTTPS。

443端口:HTTPS多域名代理

443端口多域名代理,核心多了SSL证书,每个域名最好有对应的证书,或者用一张多域名证书、通配符证书覆盖,配置片段如下:

server {
    listen 443 ssl;
    http2 on; # Nginx 1.25.1+ 写法,旧版本可用 listen 443 ssl http2;
    server_name a.example.com;
    ssl_certificate /etc/letsencrypt/live/a.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/a.example.com/privkey.pem;
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

如果证书和域名对不上,浏览器会直接报错,SNI机制会让Nginx根据客户端带来的域名选择证书,所以server_name和证书覆盖范围必须一致。

国内服务器nginx多域名代理配置教程:从DNS到防火墙

在国内服务器上部署,除了Nginx本身,还要把周边环节一起打通,可以按这个清单走:

  • 域名DNS添加A记录,指向服务器公网IP;
  • 据工信部公开信息,境内服务器提供网站服务通常需要完成备案;
  • 云服务器安全组放行80和443端口;
  • 系统防火墙如firewalld、ufw也要放行;
  • Nginx配置多个server块,分别绑定域名;
  • 用nginx -t和systemctl reload nginx生效;
  • 最后用手机流量和电脑浏览器分别验证。

不同配置方式对比如下:

配置方式 server_name写法 适用场景 主要风险
多server块 a.example.com 不同域名不同后端 证书要一一对应
同server多域名 a.example.com b.example.com 多个域名同一后端 后端需自行区分Host
泛解析 .example.com

nginx如何配置域名代理多个域名,nginx多域名反向代理配置教程

子域名很多 通配符证书成本较高
默认server _或default_server 拦截未绑定域名 配置不当会抢域名

nginx多域名SSL证书配置方法:让HTTPS不串站

单域名证书逐个绑定

最稳妥的方式是每个域名一张证书,各自放在对应server块里,比如用Certbot申请:

certbot --nginx -d a.example.com -d b.example.com

Let’s Encrypt证书有效期通常为90天,建议配置自动续期:

certbot renew --dry-run

确认无误后,把certbot renew加入cron或systemd timer。

泛域名证书和多域名证书怎么选

泛域名证书适合.example.com这种大量子域名的场景,一张证书覆盖所有同级子域名,多域名证书适合域名数量不多、但主域名分散的情况,行业共识认为,生产环境应避免把所有域名都塞进一个server块里,除非它们确实共用同一套后端和同一张证书。

免费SSL证书和付费证书价格差异怎么权衡?

免费证书不是“不能用”,而是服务边界不同,免费证书价格为零,但有效期短,通常没有人工支持和赔付条款,付费证书价格跨度较大,差异主要体现在保修金额、技术支持、通配符覆盖和签发机构信任链上。

对大多数中小站点,免费证书配合自动续期已经够用,对电商、金融、政企类站点,付费证书的赔付和技术支持更有价值,选择时别只看价格,要看证书类型、覆盖域名数量和续期自动化程度。

排查HTTPS串站

如果访问A域名却提示B域名证书,可以按下面顺序排查:

  • 检查是否有listen 443 default_server抢占了未匹配请求;
  • 检查server_name是否精确,避免通配符范围过大;
  • 用openssl s_client -connect 服务器IP:443 -servername a.example.com查看实际返回证书;
  • 检查浏览器是否开启了HSTS,导致旧跳转被缓存;
  • 检查CDN或负载均衡层是否提前终止了HTTPS。

多域名代理进阶:后端区分、日志分离与真实IP

后端如何区分不同域名

如果多个域名代理到同一个后端,后端需要通过Host头或自定义Header区分,比如在Nginx里加:

proxy_set_header X-Site-Name "a";

后端再根据X-Site-Name或Host加载不同站点,这样比开多个后端端口更省资源,但要求后端程序支持多租户或多站点配置。

日志分离

nginx如何配置域名代理多个域名,nginx多域名反向代理配置教程

多域名共用一台Nginx时,建议按域名拆日志:

access_log /var/log/nginx/a.example.com.access.log;
error_log  /var/log/nginx/a.example.com.error.log;

排查问题时,能直接定位到具体域名,不用在混合日志里翻找。

WebSocket和长连接

如果后端有WebSocket,需要加:

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

否则连接会在代理层被断开,长连接场景还要关注proxy_read_timeout和keepalive_timeout,避免空闲连接被过早回收。

upstream负载均衡

同一域名需要多个后端时,可以用upstream:

upstream a_backend {
    server 127.0.0.1:8080;
    server 127.0.0.1:8082;
}
server {
    listen 80;
    server_name a.example.com;
    location / {
        proxy_pass http://a_backend;
    }
}

这样Nginx会按默认轮询分发请求,也可以加权重、健康检查等策略。

收束

多域名代理并不复杂,关键是让每个域名有清晰的server块、正确的server_name和匹配的证书,把Host头、默认server、HTTPS证书这三处管住,绝大多数串站和502问题都能提前避开。

Q&A:nginx配置域名代理多个域名常见问题

两个域名可以代理到同一个后端吗?

可以,把两个域名写进同一个server块的server_name,或者分别写server块但proxy_pass指向同一个后端地址,区别在于后端如何区分请求来源,如果后端需要按域名展示不同内容,必须把Host头传过去,或者额外加自定义Header。

nginx多域名代理后,后端如何获取真实客户端IP?

在Nginx的location里加上:

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

后端不要直接读remote_addr,而是读取X-Real-IP或X-Forwarded-For的第一个IP,如果前面还有CDN或负载均衡,需要配置set_real_ip_from和real_ip_header,否则拿到的可能是上一层代理的IP。

nginx配置多个域名后,为什么访问A域名却跳到B域名?

常见原因有三个:B域名所在server块被设成了default_server,抢占了未精确匹配的请求;A域名的HTTPS证书不匹配,浏览器按SNI选择了另一个server块;浏览器或CDN缓存了HSTS策略,把A强制升级到HTTPS后落到了错误配置上,检查listen、server_name和ssl_certificate三项,通常就能定位。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/726381.html

赞 (0)
基岩版2b2t服务器怎么用,下载地址在哪里?
上一篇 2026年10月9日 03:25
物联网数据上报异常检测如何保障监控系统?,异常检测方法有哪些?
下一篇 2026年10月9日 03:28

相关推荐

  • CDN加速影响排名吗?CDN加速对SEO优化有什么影响

    CDN加速本身不直接决定排名,但通过显著降低页面加载时间、提升移动端体验及减少服务器负载,间接满足百度对用户体验的核心考核标准,从而对SEO排名产生正向影响,在2026年的搜索引擎生态中,百度的算法逻辑已经高度成熟,不再单纯依赖关键词密度或外链数量,而是将“用户体验”置于核心地位,CDN(内容分发网络)作为提升……

    2026年6月13日
    5300
  • 网站制作到底怎么做,零基础小白如何快速搭建个人网站?

    从零开始构建你的在线平台构建网站不再是程序员的专利,无论你是想建立个人博客、企业官网还是电子商务平台,以下步骤将指引你完成从构思到上线的全过程,第一步:明确网站定位与规划在动手之前,必须先明确目标,这决定了后续的技术选型:确定网站类型:是展示型(Portfolio)、博客型(Blog)还是交易型(E-comme……

    2026年7月13日
    1600
  • antd的cdn文件怎么引入?antd cdn地址最新完整版

    使用Ant Design CDN文件是快速集成UI组件库的最佳方案,尤其适合不需要复杂构建工具的小型项目或原型开发,能显著减少加载时间并简化部署流程,在Web开发领域,Ant Design(简称antd)凭借其企业级中后台界面的设计语言和React组件体系,占据了极高的市场份额,对于许多开发者而言,引入antd……

    2026年6月27日
    3500
  • 服务器安装https证书难吗?服务器https证书怎么安装

    在服务器上安装HTTPS证书,本质是通过部署SSL/TLS加密协议实现网站数据传输的加密与身份验证,这是2026年保障Web安全、提升搜索排名及满足合规要求的必行操作,2026年HTTPS部署的战略价值与底层逻辑安全与合规的双重底线根据中国网络安全审查技术与认证中心(CCRC)2026年最新规范,政务及商用数据……

    2026年4月24日
    5200
  • cdn产品的项目流程是什么?cdn项目流程详解

    CDN产品项目落地并非简单的节点部署,而是涵盖需求评估、架构设计、压测验证及全链路监控的系统工程,其核心在于通过智能调度实现毫秒级响应与高可用性保障,在2026年的数字生态中,随着AI生成内容(AIGC)爆发与边缘计算深度融合,CDN已从单纯的静态资源分发工具演变为集安全、计算、存储于一体的边缘智能平台,企业若……

    2026年5月16日
    5900
  • FTP服务器的特点有哪些?,如何安全配置?

    FTP服务器作为互联网上最古老的文件传输协议之一,其核心特点是稳定、简单、跨平台,但安全性需要额外加固,因此在特定场景下依然不可替代,与云存储相比各有优劣,FTP服务器与云存储哪个好?从场景对比看选择FTP服务器的核心优势:稳定自主- **传输协议成熟**,很少出现兼容性问题,支持所有主流操作系统,无需额外客户……

    2026年8月11日
    600
  • 如何在服务器上搭建Drupal网站?服务器搭建网站教程

    在服务器上搭建Drupal网站其实并不复杂,只要准备好Linux服务器、Web服务器(Apache或Nginx)、数据库(MySQL/MariaDB)和PHP环境,再通过Composer或手动下载安装包,按步骤配置即可完成部署,搭建Drupal网站前先确认服务器配置要求很多人在服务器上搭建Drupal网站时卡在……

    2026年8月12日
    700
  • cdn类型选择哪种好,cdn类型选择

    CDN类型选择的核心结论是:对于静态资源密集型网站首选全球覆盖型CDN,对于高并发动态交互应用应选智能路由型CDN,而涉及敏感数据合规场景必须选择具备国密算法支持的合规型CDN,在2026年的数字生态中,内容分发网络(CDN)已不再仅仅是加速工具,而是决定用户体验、转化率及数据安全的关键基础设施,面对日益复杂的……

    2026年6月16日
    3800
  • 天玑系统大模型哪个好用?用了3个月对比,天玑大模型哪款最强

    天玑系统大模型哪个好用?用了 3 个月对比经过连续三个月在真实业务场景中的深度测试与多轮迭代,天玑系统大模型在复杂逻辑推理与垂直行业数据适配性上表现最为出色,是追求高精度与私有化部署企业的首选,相比之下,通用型大模型在创意生成上虽有优势,但在处理结构化数据与长上下文任务时,天玑系统的稳定性与响应速度均领先行业平……

    云计算 2026年4月18日
    5100
  • cdn是负载均衡吗,CDN和负载均衡的区别

    CDN(内容分发网络)并非负载均衡,两者虽在提升网站性能上协同工作,但本质不同:CDN侧重于通过边缘节点缓存静态内容以就近加速访问,而负载均衡侧重于在服务器集群间分配动态请求以优化资源利用率,在2026年的云原生架构中,许多开发者常将两者混淆,理解它们的差异,是构建高可用、低延迟应用的关键,核心概念辨析:CDN……

    2026年5月24日
    4400

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注