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.comwww.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

相关推荐

  • IDC机房集群建设方案怎么做?IDC机房集群建设方案有哪些

    IDC机房集群建设的核心在于通过模块化设计与智能运维系统实现高可用性与能效比的平衡,而非单纯追求硬件堆砌,随着数字化转型进入深水区,企业对数据中心的依赖已从“支撑业务”转变为“驱动业务”,传统的单体机房模式在面对海量并发请求时显得捉襟见肘,而IDC机房集群建设方案应运而生,这不仅仅是多台服务器的简单连接,而是一……

    2026年6月16日
    2710
  • 中小企业服务器带宽选择建议,服务器带宽多少合适?

    中小企业服务器带宽选择的核心逻辑在于“按需扩容、峰值预留、成本可控”,切忌盲目追求高配或过度节省,最优策略是采用“基础带宽+突发带宽”的弹性组合方案,初期以5M-10M独享带宽为基准线,结合CDN加速技术分流静态资源,既能保障业务流畅度,又能将带宽成本控制在IT预算的20%以内, 实际运营中,带宽瓶颈往往不是总……

    2026年3月5日
    11200
  • html国外网站源码哪里下载?免费html国外网站源码推荐

    获取国外网站源码并非直接下载现成代码,而是通过合法授权购买模板、使用开源框架二次开发或委托专业团队定制,核心在于确保代码版权清晰、技术栈主流且符合目标市场合规要求,很多新手在搭建独立站时,第一反应是去搜索引擎里找“免费国外网站源码下载”,结果往往下载到带有后门程序的恶意代码,或者遇到无法运行的乱码文件,这种做法……

    服务器宽带 2026年6月6日
    3700
  • WordPress网站速度和性能优化的常用方法

    WordPress网站速度优化的核心在于“减少请求、压缩资源、优化缓存”,通过服务端配置与前端代码精简的双重手段,将首屏加载时间控制在2秒以内,从而显著提升百度SEO排名,在2026年的搜索生态中,用户体验不再是锦上添花,而是决定流量的生死线,百度算法对页面加载速度的权重持续攀升,尤其是移动端体验,直接关联着核……

    2026年6月22日
    1810
  • 分发网络安全防护要求是什么?

    分发网络(CDN)的安全防护核心在于构建“源站隐藏+边缘加速+动态防御”的立体架构,通过部署WAF、DDoS高防及零信任访问控制,实现从数据链路到应用逻辑的全方位合规保护,在数字化浪潮席卷全球的今天,CDN已不再仅仅是提升网站加载速度的工具,更是企业数字资产的第一道防线,随着《网络安全法》、《数据安全法》以及……

    2026年6月4日
    4400
  • 广州DDOS多少钱?广州DDOS防御价格贵不贵

    广州DDOS防护服务的市场价格差异巨大,核心费用并非由单一因素决定,而是取决于防御能力大小、线路质量以及清洗机制的先进程度,企业若想获得高性价比的防护方案,必须跳出“唯价格论”的误区,转而关注业务连续性与安全投入的平衡,选择具备真实清洗能力的正规服务商, 广州DDOS多少钱?价格体系的深度拆解在广州网络安全市场……

    2026年4月1日
    9900
  • Access数据库工具箱有什么用?access数据库工具箱详解

    Access数据库里的“工具箱”并非单一功能按钮,而是集成了数据导入导出、表结构管理、查询构建、宏与VBA代码调试、报表设计辅助以及数据库修复与压缩等核心模块的综合性操作面板,其本质是降低非专业开发者构建和管理关系型数据库门槛的关键工具集,在Access的使用场景中,很多用户面对复杂的SQL语句或繁琐的表关系设……

    2026年7月1日
    1200
  • 如何搭建HTML5视频服务器?HTML5视频服务器搭建教程

    搭建HTML5视频服务器的核心在于选择轻量级流媒体引擎(如Nginx-RTMP或SRS),配合CDN加速与HLS切片技术,即可实现低延迟、高兼容性的视频分发,无需购买昂贵的专用硬件,随着移动互联网流量的持续爆发,视频内容已成为互联网数据的绝对主力,对于许多企业开发者、自媒体团队甚至个人博主而言,自建视频服务器不……

    2026年6月11日
    5100
  • 互联网区块链仓单应用集成如何实现?区块链仓单融资流程详解

    互联网区块链仓单应用集成通过打通数据孤岛,实现了实体资产与数字凭证的实时映射,是解决供应链金融信任难题的最优解,传统仓储管理中,仓单往往是一张纸或一个孤立的电子文档,容易遭遇重复质押、伪造篡改或信息滞后等风险,随着物联网和分布式账本技术的成熟,将仓单上链已成为行业共识,这种集成不仅仅是技术的叠加,更是业务流程的……

    2026年6月2日
    3400
  • 高防CDN回源host设置错误会怎样?如何正确配置回源Host

    高防CDN回源Host设置错误会导致源站无法识别真实请求,进而引发403禁止访问、SSL证书校验失败或回源流量异常激增,直接造成业务中断,当你的网站接入高防CDN后,CDN节点作为客户端与源站之间的中间人,会将用户的请求转发给源站,在这个过程中,HTTP请求头中的Host字段至关重要,如果这个字段配置不当,就像……

    2026年6月17日
    2500

发表回复

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