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

相关推荐

  • 监控服务器端口都有哪些,常用命令是什么?

    监控服务器端口,核心就是盯住“谁在监听、谁在连接、是否放行、流量是否异常”, 常用命令是 Linux 的 ss、lsof、nmap,Windows 的 netstat、PowerShell,平台可以用 Zabbix、Prometheus、Uptime Kuma 或云监控,监控服务器端口有哪些:先分清监听、连接和……

    2026年10月7日
    000
  • html怎么缩进文字?html中设置段落缩进的方法

    HTML缩进文字最核心的方法是使用CSS的text-indent属性,它能精准控制首行缩进;若需整体缩进,则使用padding-left或margin-left,在网页开发的日常实践中,排版细节往往决定了用户体验的质感,许多初学者在面对“如何让文字看起来更专业”这个问题时,容易陷入视觉混乱,HTML本身并不直接……

    2026年6月10日
    3700
  • 互动课堂场景方案好不好?互动课堂解决方案有哪些

    互动课堂场景方案好不好?答案是肯定的,它不仅是提升教学效率的有效工具,更是实现个性化教育和数据驱动决策的关键基础设施,但成功落地高度依赖于硬件稳定性与软件生态的深度融合,传统“黑板+粉笔”的模式正在经历深刻变革,教育信息化2.0时代的核心痛点在于如何让技术真正服务于教与学,而非仅仅作为展示品,互动课堂场景方案通……

    2026年6月1日
    4300
  • Web服务器软件平台有哪些值得选,哪个适合中小企业?

    Web服务器软件平台主流选择包括:Nginx、Apache、IIS、Tomcat,以及在国内政企市场广泛应用的TongWeb和宝塔面板,如果您正在纠结选型,先别急着下载,看完这篇文章再动手也不迟,我们直接进入正题,聊聊这些平台各自的脾气秉性和适用场景,主流Web服务器软件怎么选选Web服务器就跟找搭档一样,没有……

    2026年10月2日
    100
  • HTML如何访问数据库解析数据?前端读取后端数据接口

    HTML本身无法直接连接数据库,必须通过后端语言(如Python、PHP、Node.js)或前端代理服务器作为中间层进行数据交互与解析,这是构建动态Web应用的核心架构逻辑,在2026年的Web开发语境下,单纯依靠前端HTML页面去“访问”数据库是一个常见的认知误区,HTML是一种标记语言,负责页面的结构展示……

    服务器宽带 2026年6月1日
    4400
  • HTML网址里为什么会出现文字?网页源码乱码怎么解决

    HTML网址中出现文字并非技术错误,而是搜索引擎优化(SEO)中提升点击率与理解度的重要策略,通过语义化的URL结构,能让用户和爬虫更直观地识别页面内容,很多人看到网址栏里出现汉字或拼音,第一反应是“这会不会影响收录”或者“看起来不专业”,这种担忧大多源于对早期搜索引擎算法的刻板印象,在2026年的今天,百度等……

    2026年6月7日
    3800
  • hp服务器硬盘闪红灯怎么办?服务器硬盘故障代码解读

    HP服务器硬盘闪红灯通常意味着硬盘出现物理故障、RAID降级或预测性故障,核心解决步骤是立即备份数据、通过iLO远程诊断并更换故障硬盘,切勿直接热插拔未确认状态的硬盘,当服务器面板上的硬盘指示灯由正常的绿色或蓝色变为红色,甚至开始闪烁时,这不仅是视觉上的警示,更是存储系统发出的紧急求救信号,对于运维人员而言,这……

    2026年6月10日
    5800
  • html的input属性在HTML输入中有哪些用法,怎么用?

    HTML的input属性是构建网页表单与用户交互的核心,掌握其类型、验证、占位符等关键属性,能直接提升输入体验和开发效率,无论是简单的搜索框还是复杂的注册表单,input属性决定了用户如何输入数据、数据如何被验证以及最终如何提交,本文从基础类型到进阶用法,结合真实场景,帮你彻底搞懂这些属性的实际作用,html……

    2026年7月30日
    800
  • 广安云原生是什么意思,广安云原生服务哪家好

    广安企业数字化转型已进入深水区,传统IT架构在应对高并发业务、数据实时处理及敏捷迭代需求时,显露出扩展性差、维护成本高、响应周期长等结构性瓶颈,核心结论在于:全面拥抱云原生架构,是广安本地企业实现降本增效、构建业务护城河的必由之路,而非单纯的技术升级, 这不仅是技术栈的替换,更是从瀑布式开发向敏捷运维的组织变革……

    2026年4月2日
    7100
  • 服务器在配置存储器时停止不动了,请问这是什么原因导致的?

    根据关键词「服务器在配置存储器停止不动」生成的问答内容

    服务器宽带 2026年2月21日
    12800

发表回复

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