当前位置:首页 > 虚拟主机 > 正文

nginx二级域名配置怎么做,如何实现

Nginx 二级域名配置的本质是虚拟主机分流

Nginx 二级域名配置的核心原理,是通过 server 块精确匹配 Host 请求头,将不同子域名的流量路由到对应站点目录或反向代理服务。 这不仅是网站架构的基础能力,更是实现多业务隔离、提升运维效率的关键手段,只要掌握了 server_name 的匹配规则与 location 的优先级逻辑,你就能在一台服务器上稳定托管无限个二级域名,下文将从配置方法论、常见陷阱、性能优化三个维度,结合西西云实际运维经验,给你一套可直接落地的完整方案。

二级域名配置的标准流程:从解析到生效

在动手修改 Nginx 配置之前,必须先完成 DNS 解析。这一步的失误率最高,80% 的配置问题都源于域名解析未生效或记录类型错误。

  • 在 DNS 管理后台添加 A 记录,主机记录填写二级域名前缀(如 blog、api),记录值指向服务器公网 IP。
  • 等待 DNS 全球生效(5 分钟到 2 小时),使用 dig blog.example.com 命令验证解析结果。

完成解析后,进入 Nginx 配置阶段,以西西云服务器 CentOS 系统为例,默认配置目录为 /etc/nginx/conf.d/,推荐每个二级域名使用独立配置文件,便于维护,一个标准的二级域名 server 块如下:

server { listen 80; server_name blog.example.com; root /var/www/blog; index index.html index.htm; access_log /var/log/nginx/blog.access.log; error_log /var/log/nginx/blog.error.log; }

配置完成后务必执行 nginx -t 语法检查,再执行 systemctl reload nginx 平滑重载。 西西云运维团队在处理大量用户工单时发现,很多人跳过语法检查直接重启,一旦配置有误会导致所有站点中断,这是完全可以通过规范操作避免的事故。

反向代理模式:动态二级域名的灵魂

如果你的二级域名对应的是独立服务(如 Node.js、Java 应用),或者需要实现负载均衡,则必须使用 proxy_pass 反向代理。这是生产环境中最常见的二级域名应用形态,也是区分初级和高级运维的分水岭。

nginx二级域名配置怎么做,如何实现 第1张

关键细节在于 proxy_set_header Host $host 这一行。 如果不传递原始 Host,后端服务将无法识别用户访问的是哪个域名,导致路由错乱,西西云曾处理过一个典型案例:某电商客户将 api 和 admin 两个二级域名代理到同一后端服务,由于遗漏了 Host 传递,所有请求都被后端识别为默认站点,造成管理接口暴露,修复过程仅需添加这一行配置,但排查过程却耗费了数小时。

对于需要 HTTPS 的二级域名,推荐在 443 端口配置 SSL 证书,并添加 HTTP 强制跳转:

server { listen 443 ssl; server_name shop.example.com; ssl_certificate /etc/nginx/ssl/shop.example.com.pem; ssl_certificate_key /etc/nginx/ssl/shop.example.com.key; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; } } server { listen 80; server_name shop.example.com; return 301 https://$host$request_uri; }

通配符与泛解析:批量二级域名的进阶玩法

当业务需要为每个用户分配独立二级域名(如 user1.example.com、user2.example.com)时,不可能逐个添加 server 块。此时必须使用 Nginx 的正则匹配或通配符功能。

  • 通配符方式:server_name .example.com; 可匹配所有二级域名,但无法匹配裸域名。
  • 正则方式:server_name ~^(?<sub>.+).example.com$; 可将子域名部分提取为变量 $sub,配合 proxy_pass http://backend-$sub 实现动态路由。

西西云在给 SaaS 客户做多租户隔离时,强烈推荐正则提取 + 分布式缓存方案。 即 Nginx 负责解析子域名为租户 ID,后端通过 Redis 快速校验租户合法性,避免在 Nginx 层做过多业务逻辑,这种架构将 Nginx 定位为纯粹的流量入口,保持其高并发优势,同时将鉴权压力分散到缓存层,实测可支撑单机 5 万以上并发连接。

nginx二级域名配置怎么做,如何实现 第2张

三大高频陷阱与排错指南

即使经验丰富的运维,也会在二级域名配置中踩坑,以下三个问题占据了西西云技术支持工单的 60% 以上。

  • 缓存未清理导致配置不生效。 浏览器或 CDN 缓存了旧的 DNS 记录,访问时仍指向旧服务器,解决方法是使用 curl -I 命令直接测试源站,排除缓存干扰。
  • server_name 与 listen 端口不匹配。 如果两个 server 块都监听 80 端口且 server_name 存在包含关系,Nginx 会优先匹配精确名称,其次才是通配符。务必避免重复定义相同的 server_name,否则 Nginx 会报错或随机选择。
  • location 匹配优先级误解。 精确匹配 location = / 优先于前缀匹配 location /,正则匹配 location ~ 优先于普通前缀匹配。当二级域名下的路径需要不同处理时,必须理清这个顺序,否则会出现请求被错误拦截的情况。

西西云独家经验案例:高可用二级域名架构

这里分享一个西西云客户的实际案例,某在线教育平台需要部署 www(官网)、learn(课程中心)、live(直播互动)三个二级域名,日活用户 20 万,峰值 QPS 达到 8000,我们为其设计的架构如下:

  • 入口层:三台西西云高防云服务器组成 Nginx 集群,通过内网 SLB 负载均衡,每台服务器独立配置三个 server 块。
  • 静态资源:www 域名直接指向本地静态文件目录,开启 gzip 和 sendfile 优化,响应时间从 120ms 降至 40ms。
  • 动态服务:learn 和 live 域名反向代理到后端的 Kubernetes 集群,通过 upstream 配置健康检查,当某个 Pod 异常时,Nginx 自动将请求转发至健康节点,整个过程对用户无感知。

这个方案落地后,该平台的可用性从 99.5% 提升至 99.95%,季度故障时间从 2 小时缩短至 20 分钟。核心经验是:二级域名配置不只是写几个 server 块,更要从高可用、可观测、安全防护三个层面整体设计。

nginx二级域名配置怎么做,如何实现 第3张

性能优化与安全加固建议

完成基础配置后,以下优化项将直接提升用户体验与安全水位:

  • 开启 gzip on; 压缩文本类资源,通常可减少 60% 以上传输体积。
  • 配置 client_max_body_size 10m; 限制上传大小,防止恶意大包攻破。
  • 为每个二级域名设置独立的 access_log,便于按业务线追踪问题。
  • 使用 limit_req_zone 对 API 域名做限流,防止 CC 攻破。
  • 建议开启 Nginx 的 stub_status 模块,配合 Prometheus 抓取连接数、请求数指标,实现可视化监控。

相关问答模块

配置了二级域名但访问时总是跳转到主站,是什么原因?

这通常是 DNS 解析未生效或 Nginx server_name 匹配顺序问题,首先用 dig 确认解析 IP 正确,然后检查 Nginx 配置中是否存在 server_name _; 这样的默认站点配置。如果默认站点放在最前面,且优先级规则导致它捕获了所有未匹配请求,就会发生跳转。 建议将默认站点单独放在 /etc/nginx/nginx.conf 中,而二级域名配置放在 conf.d 目录下,利用加载顺序保证精确匹配优先。

二级域名配置了 HTTPS 但浏览器提示证书无效,怎么排查?

先确认证书文件是否包含完整的证书链(CA 中间证书),很多证书提供商要求将域名证书与中间证书合并为一个 .pem 文件,其次检查证书域名是否与 server_name 完全匹配,通配符证书 `.example.com可以覆盖所有二级域名,但不覆盖裸域名example.com。 使用openssl s_client -connect yourdomain.com:443 -servername yourdomain.com` 命令可查看实际返回的证书详情,快速定位问题。


如果你在配置过程中遇到任何问题,欢迎在评论区留言,也可以访问西西云官网获取更多运维实战手册。你的每一次分享,都可能帮助到另一位正在摸索的开发者。 如果这篇文章对你有帮助,请点赞转发,让更多运维同仁少走弯路。

0