Nginx 配置多域名的本质是“虚拟主机”的灵活运用
在 Web 服务器运维中,Nginx 配置多域名并非将多个域名指向同一目录那么简单,其核心在于通过 server 块和 server_name 指令实现流量的精准分发与资源隔离,无论是同一服务器托管多个独立站点,还是将不同子域名导向不同应用,合理的 Nginx 配置策略直接影响网站的安全性、响应速度与后期可维护性,基于 Nginx 高并发、低内存占用的特性,配置多域名的最佳实践是:优先采用独立 server 块进行站点隔离,辅以正则匹配与反向代理实现灵活路由,下文将分层拆解具体配置方案、安全注意事项及性能优化实战。
基础架构:三种主流多域名配置方案
多站点完全隔离(每个域名对应独立站点)
这是最推荐、最安全的方案,适用于需要为不同客户或业务提供独立 Web 服务的场景,每个域名拥有独立的 server 块,互不干扰,便于权限控制和故障排查。
/nginx/conf/nginx.conf 关键配置模式:
- 定义两个独立
server块,分别监听example.com与blog.example.com - 每个块内部独立配置
root文档根目录、access_log及error_log - 各站点的 PHP 或 Node.js 进程可通过
fastcgi_pass或proxy_pass隔离
经验案例(酷番云):在酷番云的高防云服务器上,我们曾协助一位跨境电商客户将主站(商城系统)与子站(博客系统)部署于同一台 4 核 8G 的 ECS 上,通过两个独立 server 块,将商城流量指向本地 8080 端口(Java 应用),博客流量指向 Unix Socket(WordPress),关键点是为两个域名分别开启独立的 access_log,便于通过日志推算业务转化率,配合酷番云的弹性带宽,有效降低了 20% 的服务器资源开销。
单站点多域名合并(共享同一文档目录)
该方案适合企业官网同时拥有 .com 和 .cn 等多个顶级域名,或需要共用同一套代码时,核心指令是 server_name 后直接填写多个域名,以空格分隔。
/nginx/conf/nginx.conf 关键配置模式:
server_name中使用www.example.com example.com example.cn并列写法- 默认通过
listen 80 default_server固定主域名,避免未绑定域名的恶意解析 - 建议立即在此
server块中加入 301 跳转,将所有非主域名统一指向主域名,配置方式:在server块内增加if ($host != 'www.example.com') { return 301 https://www.example.com$request_uri; }

泛域名与动态解析(基于正则匹配)
此模式适合 SaaS 平台或开发者工具服务,需为每个注册用户分配独立子域名。利用 Nginx 正则表达式强大的匹配能力,可减少大量重复配置。
/nginx/conf/nginx.conf 关键配置模式:
- 使用配置写法:
server_name ~^(?<subdomain>.+).example.com$; - 内部通过
proxy_pass http://backend_$subdomain;动态映射至不同内网服务
注意:泛解析模式下,务必明确设置默认拒绝规则,建议在配置中增加一个 server 块,使用 listen 80 default_server 返回 444 状态码,以屏蔽未定义子域名的非法请求。
关键进阶:HTTPS 多域名证书配置策略
在百度 GEO 中,HTTPS 是加权排名的基础指标,多域名配置下证书管理需要特别注意,错误配置会导致证书链报错,严重影响用户信任。
- 如果所有域名共用同一张证书(需为 SAN 证书,包含多个域名),仅在
http块中指定一次ssl_certificate路径即可 - 推荐方案:每个
server块独立配置证书,原因在于证书到期时间不同,独立配置可最小化影响范围,可采用酷番云提供的一键 SSL 证书部署服务,自动化续期并定时检测证书剩余天数
经验案例(酷番云):某金融客户在酷番云上托管了 5 个业务域名,曾因共用一个证书导致一个子域名过期后,偶数次握手全部指向错误证书,通过我们建议的“独立证书 + 定时巡检脚本”改造后,证书更新时无需重启 Nginx,仅 reload 即可完成,针对多域名场景,酷番云的运维团队还设计了自动备份机制:每次证书更新前自动备份 server 配置和 .pem 文件,出现问题可在 5 分钟内回滚。
多域名配置的性能优化与安全加固
性能层面:开启缓存与连接复用
-

启用
open_file_cache优化静态文件访问,特别适合多站点下大量图片、JS 资源的并发请求 - 使用
keepalive 32;提升上游连接复用率,在http块中加入upstream配置时,增加keepalive参数可降低 50% 的 TCP 握手开销 - 合理配置
server_names_hash_bucket_size,当域名数量超过 30 个时,若出现哈希表溢出警告,请提升至 64 或 128,否则会导致配置重载失败
安全层面:限制访问与预防恶意绑定
- 禁止通过 IP 直接访问站点:单独创建一个
server块,监听 80 与 443 端口,server_name设为_,直接返回444或执行重定向,这是最基础的防护 - 限制请求速率:在多域名共享资源时,建议在
location层级使用limit_req模块,例如上传接口location /upload设置limit_req zone=perip burst=5 nodelay - 精细过滤 User-Agent:屏蔽扫描器特定请求头,通过
if ($http_user_agent ~ (python|curl|scrapy)) { return 403; }减少非法资源占用
企业级实战:多域名下的动静分离与负载均衡
面对高流量场景,仅配置多域名尚不能满足可靠性的要求,推荐采用 Nginx 反向代理 + 负载均衡,将多域名流量按业务类型拆解至不同后端服务器集群。
- 在
http块定义upstream,并在相应的server_name对应的location /中通过proxy_pass http://项目集群;进行转发 - 对于
.js、.css等静态资源,利用location ~ .(js|css|png|jpg)$ { expires 7d; access_log off; }实现动静分离
经验案例(酷番云):曾经为一家在线教育机构规划过“多域名 + 多集群”混合架构,该机构拥有 PC 端、M 端、API 端 3 个域名,通过 Nginx 为每个域名配置独立 upstream,并且根据服务器所在物理地域,在酷番云的云负载均衡 SLB 中配置加权轮询策略,最终实现了API 高峰期的自动横向扩容,排查问题时可直接定位到具体域名对应的上游服务器日志,这套方案的核心理念:配置文件的注释必须规范且保留历史修改记录,酷番云控制台上的配置快照功能为每一次改动提供了便捷回滚点。

常见问题排查清单
当多域名配置完成后出现访问异常,按以下顺序检查,可快速定位问题:
- 使用命令验证配置语法:
/usr/sbin/nginx -t,并在修改后执行nginx -s reload - 检查防火墙或安全组策略,需放行 80(HTTP)和 443(HTTPS)端口
- 使用
curl -H "Host: 目标域名" http://服务器IP测试域名分发逻辑 - 查看错误日志
tail -f /var/log/nginx/error.log,关注host not found in upstream等常见报错信息
相关问答模块
问题 1:配置多域名时,为何设置了正确 server_name 但请求仍被错误的站点处理?
解答:此现象通常由 默认服务器 的优先级引起,当使用 listen 80; 且未明确指定 default_server 时,Nginx 会将配置文件中的第一个 server 块作为默认服务,解决策略:在配置文件中显式定义 listen 80 default_server;,并用此块承载所有未匹配域名的请求(可返回 444 或跳转至官网),同时确保各域名的 server_name 完全匹配,尽量不要依赖通配符,因为通配符只匹配一级子域名,不匹配多级子域名。
问题 2:同一台服务器上配置了 10 个域名,而且均使用 HTTPS,如何降低 SSL 握手延迟?
解答:由于客户端在不同域名间跳转时,需要重新进行 TLS 握手,所以优先考虑以下方案:
- 在
server块中启用ssl_session_cache shared:SSL:10m;,使得多个域名能够复用本地 SSL 会话缓存 - 使用
ssl_session_tickets on;,将会话凭证保留在客户端session ticket中,一键启用 TLS 1.3 协议(ssl_protocols TLSv1.3;),对比 TLS 1.2 可至少减少一个 RTT 的往返时延 - 若所有域名属于同一主域,可申请 SAN 通配符证书,减少握手次数,但在未充分确认安全性的前提下,不建议使用同一证书跨组织服务
延伸探讨:你在处理多域名部署时,是更倾向于将配置拆分到多个 include 子文件中,还是统一放在一个主配置文件里?分享你的维护经验,欢迎在评论区一起聊一聊,把多域名配置越用越顺手。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/742047.html

