nginx多域名如何绑定不同目录?,配置方法详解。

nginx多域名绑定后,实现不同域名访问不同目录的核心方法是通过配置server_name匹配规则,并在对应的server块中设置root或alias指令指向各自的站点目录。这就像给服务器装上了分拣系统,每个域名一来,nginx就能准确把它引到属于自己的“房间”,下面直接拆解配置步骤与避坑方案。

nginx多域名绑定不同目录配置方法:先理解匹配优先级

不少人在配置时遇到过这种情况:明明写了两个server块,结果所有域名都指向了第一个目录,这通常不是写错了,而是没有理解nginx的server_name匹配顺序,行业共识认为,nginx在接收到请求后,会按以下顺序寻找处理请求的server块:

手动安装nginx并 配置多域名访问不同网站
加载中
手动安装nginx并 配置多域名访问不同网站
  1. 精确匹配server_name,例如server_name example.com;。
  2. 以开头的通配符匹配,例如server_name .example.com;。
  3. 以结尾的通配符匹配,例如server_name www.example.;。
  4. 正则表达式匹配,例如server_name ~^wwwd+.example.net$;。
  5. 如果以上都没匹配到,则使用默认server或第一个加载的server。

结论很明确:如果你有两个域名A和B,都用了listen 80;且没有设置默认标记,而域名A的server块恰好被第一个加载,那么所有未匹配到的域名都会落到A上,解决方式是给默认的server块加上default_server参数。

实操:nginx多域名绑定不同目录配置步骤

假设服务器上有两个网站,域名分别是www.a-site.com和www.b-site.com,对应的目录是/var/www/a-site和/var/www/b-site,下面按步骤操作。

第一步:创建站点目录与测试文件

为了验证效果,先建立两个简单的首页文件。

mkdir -p /var/www/a-site
mkdir -p /var/www/b-site
echo "<h1>This is A Site</h1>" > /var/www/a-site/index.html
echo "<h1>This is B Site</h1>" > /var/www/b-site/index.html

第二步:编辑nginx站点配置文件

nginx的配置通常位于/etc/nginx/conf.d/或/etc/nginx/sites-available/,这里创建一个独立的配置文件,比如/etc/nginx/conf.d/multi-site.conf,写入以下内容:

# A站点配置
server {
    listen 80;
    server_name www.a-site.com a-site.com;
    root /var/www/a-site;
    index index.html index.htm;
    location / {
        try_files $uri $uri/ =404;
    }
    access_log /var/log/nginx/a-site.access.log;
    error_log /var/log/nginx/a-site.error.log;
}
# B站点配置
server {
    listen 80;
    server_na

nginx多域名如何绑定不同目录?,配置方法详解。

me www.b-site.com b-site.com; root /var/www/b-site; index index.html index.htm; location / { try_files $uri $uri/ =404; } access_log /var/log/nginx/b-site.access.log; error_log /var/log/nginx/b-site.error.log; } # 默认拒绝或重定向未匹配的域名 server { listen 80 default_server; server_name _; return 444; }

第三步的检查操作要先执行,先确认配置语法没问题:

nginx -t

看到nginx: configuration file /etc/nginx/nginx.conf test is successful后,重载配置:

nginx -s reload

第三步:验证不同域名访问不同目录效果

在本地电脑上改hosts文件,或者直接通过域名解析访问,用curl命令测试最直观:

curl http://www.a-site.com
curl http://www.b-site.com

你会发现前者输出“This is A Site”,后者输出“This is B Site”,这就是最基础的nginx多域名绑定不同目录配置方法。

nginx一个服务器多个网站怎么配置:从实际场景拆解

上面是纯静态站点的场景,现实中,你大概率会遇到PHP站点或反向代理场景,这里重点分析两种高频需求。

不同域名对应不同PHP站点

这种情况下,root指令不变,但需要让nginx把PHP请求交给PHP-FPM处理,这里有个常见误区:把root写在location里和写在server里效果有区别。

推荐写法:将root放在server层,location只负责匹配URI。

server {
    listen 80;
    server_name www.a-site.com;
    root /var/www/a-site;
    index index.php index.html;
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    location ~ .php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

为什么强调SCRIPT_FILENAME?因为如果缺少这个参数,PHP-FPM无法确定要执行的文件路径,会直接报“File not found”错误,相当一部分新手在配置多站点时踩过这个坑。

不同域名访问不同目录但共用同一个端口

有些人会问:“我只有一个80端口,是不是只能配置一个网站?”答案是否定的。nginx正是通过server_name来区分虚拟主机,而不依赖端口,这就是nginx多域名绑定的核心价值。

在同一个80端口上,你可以挂几十个域名,只要每个域名的server块独立、root目录独立、日志文件独立即可。

nginx server_name 多个域名配置技巧与隐藏陷阱

nginx多域名如何绑定不同目录?,配置方法详解。

除了上面两种场景,多个域名还可能指向同一个目录,或者需要把某个域名的请求转发到不同的后端端口,这里列出几种常见配置技巧。

需求场景 配置方式 适用情况
多域名指向同一目录 在一条server_name后空格分隔多个域名 主站与备用域名、不同后缀域名
不同域名指向不同目录 每个域名独立server块 多租户SaaS、多站点部署
域名与IP同时访问不同内容 用default_server区分IP直接访问 禁止IP访问或展示默认页
同域名不同路径反代 location + proxy_pass组合 单域名下按路径分发给多台内部服务

server_name中的下划线

如果你的域名包含下划线(虽然不推荐),在写正则匹配时需要格外小心,普通字符串匹配没问题,但如果用正则,下划线需要转义。

location中root与alias的区别

场景解析:假设域名是www.a-site.com,你想让www.a-site.com/static/访问/var/www/shared/static/目录,而不是/var/www/a-site/static/。

这时候用alias:

location /static/ {
    alias /var/www/shared/static/;
}

如果写成root /var/www/shared/static/;,nginx实际访问的是/var/www/shared/static/static/,路径拼接出错了。

配置文件里的字符编码

不少用户在Windows下编辑配置文件,默认使用GBK编码,传到Linux服务器后nginx直接报错。务必用UTF-8无BOM格式保存,BOM头会让nginx第一个server_name解析异常。

多域名下配置SSL证书与80端口跳443

现在的网站基本都上HTTPS,nginx多域名绑定不同目录后,如何让每个域名自动跳转到自己的443端口目录?答案很简单:每个server块独立做跳转。

# 强制HTTP跳转HTTPS
server {
    listen 80;
    server_name www.a-site.com a-site.com;
    return 301 https://$host$request_uri;
}
server {
    listen 443 ssl http2;
    server_name www.a-site.com a-site.com;
    ssl_certificate /etc/nginx/ssl/a-site/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/a-site/privkey.pem;
    root /var/www/a-site;
    # ... 其他配置
}

优化策略:对于多站点的服务器,不要把ssl证书配置写在nginx.conf主文件里,每个网站独立配置文件,单独引用证书路径,维护时不用动全局文件,也不容易改错导致全站崩溃。

nginx多域名如何绑定不同目录?,配置方法详解。

nginx多域名配置不生效怎么排查

配置写完了,结果域名访问的还是旧页面或默认页,多数情况下是下面几个原因:

  • 浏览器缓存了301跳转,特别是设置了return 301后,你改成别的配置,浏览器还记着旧跳转,用隐身模式或curl测试。
  • 看access.log和error.log,nginx每个站点可以独立指定日志路径,直接看对应日志更快定位。
  • 检查配置文件加载顺序。/etc/nginx/nginx.conf里的include指令加载顺序决定了谁先谁后,如果你在sites-enabled里有旧配置,同样会影响。

推荐排查命令:

nginx -T

这个命令会打印所有加载的配置,你可以快速确认哪个server块生效,以及有没有语法被覆盖。

近期问答:一个服务器多个网站怎么配置才不冲突

两个域名都指向同一个IP,但服务器上还有Apache,怎么让nginx处理80端口?

要让nginx接管80,需要确认Apache没有占用80,如果你使用宝塔面板或类似面板,可在面板中把Apache端口改为80之外的端口,或者直接卸载Apache只用nginx,配置nginx多域名后,确保只有nginx监听80。

我用了多个域名,但有个域名的子路径需要访问另一个目录,怎么处理?

使用location精确匹配即可。

server {
    server_name www.a-site.com;
    location /special/ {
        alias /var/www/other-project/;
    }
}

这样www.a-site.com/special/会访问/var/www/other-project/,其他路径仍访问默认目录。

为什么我加了一个server_name _;之后,所有没绑定的域名都访问了默认页面?

server_name _;是一个约定俗成的写法,它不代表任何真实域名,而是用于捕获所有未匹配的请求,当它被标记为default_server后,任何没有对应server_name的域名请求都会进入这个块,如果你不想展示默认页面,可以像上文那样直接return 444或重定向到一个主域名。

nginx多域名绑定后的目录分流,核心就藏在这三件套里:server_name的匹配规则、root/alias的路径指向、default_server的兜底策略,搞懂这三件事,一个服务器挂几十个站点都不会乱,配置时先用nginx -t自检语法,再用curl验证响应,基本一次就能搞定多域名访问不同目录的需求。

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

赞 (0)
虚拟机独立模式怎么配置?,虚拟机独立模式有什么用
上一篇 2026年9月1日 00:55
顶级域名和国际域名到底有何区别?,哪个更适合做网站
下一篇 2026年9月1日 00:57

相关推荐

  • FlashFXP怎么使用?FlashFXP使用教程

    FlashFXP是一款老牌且高效的FTP客户端,通过配置站点管理器、建立连接并执行文件传输,即可实现服务器与本地电脑间的数据同步,其优势在于支持多线程加速和断点续传,特别适合需要稳定传输大量文件的用户,FlashFXP核心功能与适用场景解析FlashFXP并非仅仅是一个简单的文件传输工具,它在Web开发、网站维……

    2026年6月18日
    4600
  • html5视频怎么静音?html5视频自动播放静音

    HTML5视频静音的核心在于通过添加muted属性或调用JavaScript的muted方法,强制浏览器在加载时不播放音频,这是解决自动播放策略限制及提升用户体验的关键技术手段,在2026年的Web开发环境中,浏览器对自动播放音频的限制已成为行业共识,用户不再容忍网页加载时突然发出的噪音,尤其是移动端场景,掌握……

    2026年6月11日
    3700
  • 互联网区块链数据连接用来干嘛,区块链数据连接技术原理

    互联网区块链数据连接的核心价值在于打破信息孤岛,通过去中心化的信任机制实现跨平台数据的确权、流通与共享,从而降低协作成本并提升数据透明度,区块链数据连接解决什么核心痛点在传统互联网架构中,数据通常存储在各自的“围墙花园”内,阿里巴巴的数据很难直接流向京东,银行的风控数据也无法轻易共享给电商平台,这种割裂导致了两……

    2026年6月2日
    6800
  • http协议请求api接口报错怎么办?http协议请求api接口实例

    通过HTTP协议发起API接口请求,本质是构建标准化的客户端-服务器通信,核心在于正确组装请求行、头部信息及负载数据,并妥善处理响应状态码与数据解析,在现代软件开发中,API(应用程序编程接口)是连接不同系统、服务或模块的“桥梁”,无论是前端页面调用后端数据,还是微服务之间的内部通信,HTTP协议都是最基础且最……

    2026年6月2日
    2700
  • 阿里云服务器宽带怎么选?2026年阿里云服务器宽带配置指南

    在2026年的云计算市场环境中,服务器宽带的选择已不再仅仅是带宽大小的数值比拼,而是演变为一场关于“计算效率、传输成本与业务稳定性”的综合博弈,核心结论在于:企业在2026年配置阿里云服务器时,必须摒弃“带宽越大越好”的传统思维,转而采用“按需峰值计费+智能压缩+多地域负载均衡”的组合策略,这将是实现降本增效的……

    2026年3月7日
    14900
  • HTML中如何引入JS文件,html引入js的三种方法

    HTML包含JS的核心在于通过标签将脚本嵌入文档,实现页面交互与动态内容更新,这是现代前端开发的基础标准,在网页开发的早期阶段,HTML主要负责静态内容的展示,而JavaScript则承担了让页面“活”起来的重任,随着Web技术的发展,两者已经从最初的分离走向深度融合,对于开发者而言,理解如何在HTML结构中合……

    2026年6月10日
    3410
  • Cloudflare防火墙规则怎么配置?如何设置IP白名单

    通过Cloudflare防火墙规则配置,您可以精准拦截恶意爬虫、缓解DDoS攻击并优化访问速度,核心在于利用IP地理围栏、请求速率限制及自定义WAF规则构建多层防御体系,在网络安全日益复杂的今天,仅仅依赖基础托管服务已不足以应对海量攻击,Cloudflare作为全球领先的边缘计算平台,其防火墙功能不仅是流量清洗……

    2026年6月16日
    2400
  • 虚拟机资源占用高怎么办,如何降低CPU使用率?

    先定位瓶颈,再针对性优化,顺序永远是“诊断→调整→验证”,而不是盲目加配置, 多数情况下,CPU和内存占用高背后是配置不合理、驱动缺失或宿主机资源争抢,本文将从CPU与内存两个维度,拆解具体排查方法和实操命令,帮你把虚拟机性能拉回正常水平,虚拟机CPU占用高怎么解决:先分清是“真忙”还是“假忙”CPU占用高的表……

    2026年9月3日
    000
  • html怎么添加网络音乐播放器,如何嵌入网页在线音乐

    在HTML中添加网络音乐播放器,最直接且稳定的方案是使用原生<audio>标签配合CDN提供的音频源地址,若需高级功能如歌词同步或皮肤定制,则推荐嵌入第三方平台(如网易云音乐、QQ音乐)提供的iframe代码,随着移动互联网内容的极度丰富,网页背景音乐和嵌入式播放器已成为许多内容型网站、个人博客以及……

    2026年6月10日
    5400
  • 服务控制台总览的主要功能是什么,怎么使用和设置

    服务控制台总览是云资源管理的核心页面,它聚合了所有服务的运行状态、监控数据和费用信息,让你在一个页面就能掌握全局,快速定位问题并做出决策,服务控制台总览功能详解服务控制台总览不是简单的资源列表,而是一个动态的仪表盘,它通常包含资源概览、监控告警、费用趋势和安全状态四大模块,每个模块都直接关系到你的日常运维效率……

    2026年8月3日
    900

发表回复

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