ubuntu nginx绑定多个域名怎么做,多域名怎么配置

用在ubuntu上给nginx绑定多个域名,核心做法就是为每个域名单独写一个server块,或者让多个域名共用同一套配置再按项目拆开管理,没有比这更简洁可靠的方案了。搞清楚server块的匹配规则,多域名部署就是套模板的事。

ubuntu nginx配置多个域名,先搞清server块

很多人第一次接触nginx多域名时,习惯去改http块里的全局配置,结果所有域名都指向同一个页面,原因在于nginx的配置逻辑是按server块区分站点,而不是按域名自动识别目录。

零基础入门 Nginx 反向代理配置 | 自定义域名绑定教程 | 从理论到实战的完整指南
加载中
零基础入门 Nginx 反向代理配置 | 自定义域名绑定教程 | 从理论到实战的完整指南

一个server块就是一台“虚拟主机”,nginx收到请求后,会根据请求头里的Host字段去匹配server_name,匹配上了就交给对应的server块处理,所以在ubuntu上绑定多个域名,本质就是写多个server块,每个块声明自己的server_name和root目录。

以ubuntu 22.04 LTS为例,nginx的站点配置一般放在以下路径:

  • /etc/nginx/sites-available/:存放站点配置文件的目录,相当于“可用站点池”
  • /etc/nginx/sites-enabled/:存放启用配置的目录,默认通过软链接指向sites-available
  • /etc/nginx/nginx.conf:主配置,末尾会include sites-enabled下的所有文件

行业共识是,不要把server块直接写进nginx.conf,而是每个域名单独建一个文件,放到sites-available里,再做个软链接到sites-enabled,这样维护起来清清楚楚,禁用一个站点只需删掉软链接,不用动其他配置。

实战:两个域名绑定同一台ubuntu服务器的完整过程

假设你有一台ubuntu服务器,IP是0.113.10,手上有两个域名:

  • www.example-a.com,网站目录放/var/www/site-a
  • www.example-b.com,网站目录放/var/www/site-b

先在服务器上建好两个网站目录,并放入测试页面:

sudo mkdir -p /var/www/site-a /var/www/site-b
echo '<h1>Site A</h1>' | sudo tee /var/www/site-a/index.html
echo '<h1>Site B</h1>' | sudo tee /var/www/site-b/index.html

接着在sites-available下创建两个配置文件:

sudo nano /etc/nginx/sites-available/site-a.conf

写入:

server {
    listen 80;
    listen [::]:80;
    server_name www.example-a.com example-a.com;
    root /var/www/site-a;
    index index.html index.htm;
    access_log /var/log/nginx/site-a-access.log;
    error_log  /var/log/nginx/site-a-error.log;
}

ubuntu nginx绑定多个域名怎么做,多域名怎么配置

同样的方式创建site-b.conf,改掉server_name和root路径,然后启用这两个站点:

sudo ln -s /etc/nginx/sites-available/site-a.conf /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/site-b.conf /etc/nginx/sites-enabled/

删除nginx自带的default站点,避免它抢占默认server位置:

sudo rm -f /etc/nginx/sites-enabled/default

检查配置语法并重载:

sudo nginx -t
sudo systemctl reload nginx

这时候在浏览器分别访问两个域名,就能看到各自的页面。核心就三步:建目录、写server块、启用配置,整个过程不需要重启服务器,reload就够。

如果两个域名指向同一个网站怎么办

这种情况更简单,让两个域名共用同一个root即可,用方括号列出多个server_name:

server {
    listen 80;
    server_name example-a.com www.example-a.com example-b.com www.example-b.com;
    root /var/www/site-a;
    # 其他配置
}

访问任何一个域名都会命中这个server块,如果你想保留一个主域名做301跳转,把所有流量归到主域名上,再单独加一个server块:

server {
    listen 80;
    server_name example-b.com www.example-b.com;
    return 301 http://www.example-a.com$request_uri;
}

这样用户访问b域名,浏览器地址栏会直接跳转到a域名,URL参数原样保留,业内专家指出,多域名GEO场景下统一主域名有助于权重集中,建议用301而不是302。

nginx多个域名怎么分开?按项目拆分配置文件

当你的网站数量超过3个,继续往sites-available里堆文件虽然可行,但找起来麻烦,更规范的做法是按项目拆分配置,把每个域名的server块拆成两个文件:一个只管HTTP,一个只管HTTPS,或者直接把配置按业务域拆成独立文件。

另一种常见思路是把公用的配置抽离成片段,比如所有站点都要用的gzip、缓存策略,写成/etc/nginx/conf.d/common.conf,然后每个server块里用include引入,这样多个域名共用基础配置,实际修改时只需要动业务相关的部分。

具体结构参考:

/etc/nginx/
├── sites-available/
│   ├── site-a.conf
│   ├── site-b.conf
│   └── site-c.conf
└── conf.d/
    ├── common.conf
    └── cache.conf

ubuntu nginx绑定多个域名怎么做,多域名怎么配置

这种做法的优势在于:单个域名出现问题,排查范围被限制在一个文件里,不会牵连其他站点,对于一台服务器上跑五六个域名的场景,这是最省心的组织方式。

ubuntu nginx一个端口绑定多个域名,server_name规则详解

80端口只有一个,但nginx可以承载无数个域名,靠的就是server_name匹配,理解匹配规则的优先级,能帮你避开很多“为什么域名指向了错误的站点”这类问题。

nginx在收到请求时,按以下顺序寻找匹配的server块:

优先级 server_name写法 示例
1 精确匹配 server_name www.example-a.com;
2 通配符前缀 server_name .example-a.com;
3 通配符后缀 server_name www.example-;
4 正则表达式 server_name ~^wwwd+.example.net$;
5 默认server listen 80 default_server;

也就是说,如果两个server块的server_name都能匹配同一个域名,nginx会优先选精确匹配的那个,如果所有server块都匹配不上,就落到default_server,没有声明的话,nginx默认选择加载顺序排第一个的server块,这就是为什么你明明配置了正确的server_name,请求却总跑错地方很可能是default站点没删干净。

多个域名配置SSL证书怎么处理

当今的网站基本都要上HTTPS,多域名绑定跑不了要配SSL,有两种主流方案:

  • 每个域名独立SSL证书:为每个server块单独配置ssl_certificate和ssl_certificate_key,适用于用Let’s Encrypt免费证书、或者各有独立付费证书的场景。
  • SAN证书一个顶多个:一张证书里同时包含多个域名,比如.example-a.com加example-a.com,所有域名共用一个证书文件,配置更简洁,适合同主域下的多个子域名。

以Let’s Encrypt的certbot为例,一条命令就能给多个域名签证书:

sudo certbot --nginx -d example-a.com -d www.example-a.com -d example-b.com

certbot会自动修改nginx配置文件,把80端口跳转和443监听一并配置好,装完证书后重载nginx:

sudo systemctl reload nginx

ubuntu nginx绑定多个域名怎么做,多域名怎么配置

用certbot配置的多域名SSL证书,后续续期也是全自动的,不需要手动干预。

多域名绑定后的验证方法和常见坑

配置写完了,如何确认所有域名都生效?分四步验证:

  1. 用sudo nginx -t验证配置语法,这一步能过滤掉90%的书写错误。
  2. 用curl -H "Host: www.example-a.com" http://127.0.0.1在服务器本机测试,不走DNS,直接验证nginx的匹配结果。
  3. 检查监听端口,sudo netstat -tlnp | grep nginx确认80和443端口都在监听。
  4. 看访问日志,tail -f /var/log/nginx/access.log,访问一次域名看日志输出。

常见的问题集中在几个地方:

  • 配置文件里少了分号,nginx -t会直接报错,按提示行号逐行排查。
  • 防火墙没放行443端口,sudo ufw allow 443/tcp提前做好。
  • sites-enabled里的软链接路径写错,导致配置没被加载,用ls -l /etc/nginx/sites-enabled/检查。
  • 域名解析没生效,在本地用dig www.example-a.com确认A记录指向服务器IP。

据统计,绝大多数“nginx多个域名配置无效”的案例,最后查出来都是DNS解析或者default_server拦截的问题,不是nginx配置本身写错。

配置多个域名的本质很简单:nginx只管按Host字段路由,域名指向哪里由DNS决定,把这两件事分开想,排查思路就清晰了。

常见问题解答

ubuntu nginx绑定多个域名时,一个域名能配置多个端口吗

能,在同一个域名对应的server块里,可以分别监听80和443端口:

server {
    listen 80;
    listen 443 ssl;
    server_name www.example-a.com;
    # 证书配置...
}

访问80端口时自动走HTTP,访问443时走HTTPS,两者共用同一个server_name,你也可以分开写两个server块,但放在一起更省事,还能利用一个块内的统一rewrite规则。

nginx多个域名绑定同一个IP,访问时怎么区分

靠HTTP请求头里的Host字段区分,浏览器发起请求时,会带上用户输入的域名作为Host头,nginx解析这个字段后去server_name索引里查找匹配项,把请求路由到对应的server块,如果两个域名的A记录指向同一个服务器IP,nginx依然能正确区分,这就是虚拟主机机制的核心,如果Host完全匹配不上任何server_name,nginx会把请求交给default_server处理。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/ubuntu-nginx%e7%bb%91%e5%ae%9a%e5%a4%9a%e4%b8%aa%e5%9f%9f%e5%90%8d%e6%80%8e%e4%b9%88%e5%81%9a%e5%a4%9a%e5%9f%9f%e5%90%8d%e6%80%8e%e4%b9%88%e9%85%8d%e7%bd%ae/

赞 (0)
如何在Mac上安装Linux虚拟机?,虚拟机哪个好用又免费?
上一篇 2026年9月7日 12:07
连接至csgo服务器时发生错误是怎么回事
下一篇 2026年9月7日 12:09

相关推荐

  • WAF智能防护模式如何自适应调整?WAF智能防护模式自适应调整机制

    WAF智能防护模式通过实时分析流量特征与业务逻辑,自动在严格拦截与流畅访问之间寻找平衡点,无需人工频繁干预即可实现动态优化,告别静态规则:理解自适应防护的核心逻辑传统的Web应用防火墙(WAF)像是一个死板的保安,拿着固定的名单检查每一个访客,只要访客携带了黑名单里的关键词,哪怕只是正常的业务参数,也会被直接拒……

    2026年6月16日
    3210
  • html制作电商网站难吗?2026年建站最新教程

    使用HTML制作电商网站的核心在于构建语义化标签结构、响应式布局及优化加载速度,而非单纯堆砌代码,这直接决定了搜索引擎抓取效率与用户转化率,在2026年的数字营销环境中,电商网站的底层代码质量已成为影响排名的关键因素,百度算法早已超越单纯的关键词匹配,转向对用户体验(UX)和技术SEO的深度评估,一个由HTML……

    2026年6月7日
    4000
  • BGP服务器和普通服务器区别在哪?BGP服务器有什么好处?

    BGP服务器与普通服务器的核心区别在于网络接入模式与跨网访问质量,BGP服务器通过边界网关协议实现多线单IP接入,彻底解决了跨运营商互联互通的延迟与丢包问题,而普通服务器通常仅支持单线或双线接入,跨网访问体验极不稳定,对于追求高可用性与全国范围内快速访问的业务而言,BGP服务器是唯一的企业级解决方案,普通服务器……

    2026年3月7日
    12600
  • Ubuntu22.04/22.10如何安装Wine?详细步骤教程

    在Ubuntu 22.04 LTS或22.10中安装Wine,最直接且稳定的方法是通过官方PPA源添加仓库并执行sudo apt install winehq-stable命令,从而获得经过优化的稳定版Wine环境,而非使用系统默认仓库中版本较旧的Wine,Wine作为连接Linux与Windows应用程序的桥……

    2026年6月23日
    8500
  • 联机服务器系列到底有哪些,联机游戏服务器怎么选?

    联机服务器系列按部署方式、游戏领域和软件生态分为云服务器、物理服务器、家用主机、游戏面板以及一键镜像五大类,选择核心看游戏类型、人数规模和预算,没有“最好的服务器”,只有最适合你当前开服场景的方案,联机服务器怎么选?先看你的游戏类型不同类型的联机游戏对硬件和网络的要求完全不同,很多玩家上来就租一台高配机器,结果……

    2026年10月6日
    100
  • 香港服务器走什么线路快?香港服务器哪种线路速度最快?

    香港服务器访问速度最快、延迟最低的线路,首推CN2 GIA(全球互联网接入)直连线路,其次是CN2 GT线路,再次是优化后的BGP多线线路,对于追求极致速度的大陆用户而言,CN2 GIA是目前的“黄金标准”,它能提供类似内网访问的低延迟体验,是搭建企业级应用、金融交易系统及高速网站的首选, 核心线路深度解析:为……

    2026年3月6日
    12600
  • 锤石城邦都有哪些服务器,哪个区服人最多?

    锤石城邦并不是英雄联盟官方服务器的名称,而是玩家对暗影岛大区的戏称,暗影岛作为独立大区只有一个服务器,但国服目前仍有多个大区可选,锤石城邦是什么?跟暗影岛有什么直接关系锤石是《英雄联盟》中一位极具辨识度的英雄,他的背景故事扎根于暗影岛,在玩家群体里,暗影岛大区因为锤石这名标志性角色,被不少人称为“锤石城邦”,这……

    2026年10月8日
    100
  • VPS带宽不够用怎么办?加带宽一年需要多少钱

    VPS带宽升级的年度费用通常在几百元至数万元不等,具体价格取决于带宽类型(独享或共享)、线路质量(CN2 GIA、BGP或普通线路)以及所在数据中心的位置,对于绝大多数中小型企业及个人开发者而言,选择“按需升级”策略,通过优化现有架构与增量带宽相结合,是性价比最高的解决方案,盲目购买大带宽不仅造成资源浪费,还会……

    2026年3月4日
    13800
  • HTML中如何查询数据库?前端页面直接读取后端数据库数据

    HTML本身无法直接查询数据库,必须通过后端服务器(如Node.js、Python或PHP)作为中间层进行数据交互,前端HTML仅负责展示最终渲染后的页面内容,很多人误以为在网页里写几行代码就能直接连接MySQL或Oracle,这其实是一个常见的认知误区,浏览器出于安全考虑,严禁前端脚本直接访问本地或远程数据库……

    2026年6月11日
    2500
  • html制作静态网站教程难吗,html制作静态网站免费模板

    © 2026 版权所有“`第三步:添加基础CSS样式静态网站的美观度依赖于CSS,建议使用现代CSS特性,如Flexbox和Grid布局,以实现响应式设计,响应式设计关键点使用@media查询适配不同屏幕尺寸,设置viewport meta标签,确保移动端正确缩放,使用相对单位(如rem、)而非固定……

    2026年6月7日
    3700

发表回复

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