nginx配置多域名怎么做?,nginx多域名配置教程详解

nginx配置多域名的本质是让一台服务器通过server_name指令区分不同域名的请求,并为每个域名分配独立的server块,从而实现一个IP承载多个网站。

nginx多域名配置的核心思路与server_name规则

nginx处理多域名请求时,核心机制是HTTP请求头中的Host字段,浏览器访问example.com时,请求头会携带Host: example.com,nginx读取这个字段后,与配置文件中的server_name逐一比对,匹配成功的server块负责处理该请求。

nginx server_name的匹配优先级

nginx的server_name匹配遵循精确匹配优先于通配符,通配符优先于正则的规则,按配置文件顺序从上到下查找。

  • 精确匹配server_name example.com; 完全一致的域名
  • 通配符匹配server_name .example.com; 匹配任意子域名
  • 正则匹配server_name ~^wwwd+.example.com$; 用正则表达式匹配

多域名配置时建议将精确匹配写在前面,通配符写在后面,避免正则匹配干扰正常域名解析。

默认服务器的兜底作用

当请求的Host字段匹配不到任何server_name时,nginx会交给default_server处理,可以在listen指令中指定:

listen 80 default_server;

未指定default_server时,nginx默认使用第一个server块作为默认服务器,多域名配置中设置一个明确的默认服务器,可以防止未知域名访问时跳转到错误页面。

nginx一个服务器配置多个域名的完整示例

假设你有一台云服务器,公网IP为0.113.10,需要同时承载a.comb.com两个网站,各自拥有独立的站点目录和PHP运行环境。

第一步:创建各自的站点目录

mkdir -p /var/www/a.com
mkdir -p /var/www/b.com

两个目录分别放入各自的index.html或PHP入口文件,确保权限为www-data或nginx运行用户可读。

第二步:编写两个server块

nginx配置多域名的标准写法是每个域名一个server块,推荐将不同站点的配置拆分为独立文件,放在/etc/nginx/conf.d/下,便于后期维护。

a.com的配置文件:

s

nginx配置多域名怎么做?,nginx多域名配置教程详解

erver { listen 80; server_name a.com www.a.com; root /var/www/a.com; index index.html index.php; location / { try_files $uri $uri/ =404; } location ~ .php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.1-fpm.sock; } }

b.com的配置文件:

server {
    listen 80;
    server_name b.com www.b.com;
    root /var/www/b.com;
    index index.html index.php;
    location / {
        try_files $uri $uri/ =404;
    }
    location ~ .php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    }
}

第三步:检查配置并重载

nginx -t
systemctl reload nginx

如果配置语法无误,nginx会输出test is successful,此时访问a.comb.com,两个域名各自返回对应目录的内容,互不干扰,nginx多域名配置怎么做?核心就三步:建目录、写server块、重载nginx。

nginx多域名同一端口的HTTPS方案

现代网站普遍启用HTTPS,nginx多域名配置需要同时处理443端口的SSL证书,一台服务器配置多个SSL证书依赖SNI(Server Name Indication)机制,nginx自1.11.5版本起默认支持SNI,无需额外模块。

为每个域名申请并配置独立证书

使用Let’s Encrypt免费证书是最常见的方案,以Certbot为例:

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

Certbot会自动修改nginx配置,在server块中添加证书路径和443监听,执行完成后,两个域名分别拥有独立的SSL证书。

统一跳转与HTTP自动转HTTPS

行业共识认为,多域名场景下应保持行为一致性,避免部分域名走HTTP、部分走HTTPS,可以在每个server块中添加强制跳转:

server {
    listen 80;
    server_name a.com www.a.com;
    return 301 https://$host$request_uri;
}

这样所有HTTP请求自动跳转到HTTPS,用户访问http://a.com时会自动跳转至https://a.com,不影响其他域名的正常访问。

多域名共用443端口注意事项

nginx多域名同一端口的配置中,443端口可以同时监听多个域名,但每个域名必须绑定自己的证书,证书配置错误时,浏览器会提示证书不匹配,检查配置时可以用:

nginx配置多域名怎么做?,nginx多域名配置教程详解

nginx -T | grep ssl_certificate

确认每个server块引用的证书路径是否正确。

nginx不同域名访问不同目录的配置细节

除了独立站点,还存在另一种常见场景:多个域名共用一个站点目录,但通过不同路径区分内容,比如a.comb.com都指向同一个WordPress目录,但展示不同语言版本。

使用location区分域名对应的目录

server {
    listen 80;
    server_name a.com;
    location / {
        root /var/www/site/cn;
        index index.html;
    }
}
server {
    listen 80;
    server_name b.com;
    location / {
        root /var/www/site/en;
        index index.html;
    }
}

这种nginx不同域名访问不同目录的写法适合静态站点,两个域名访问同一台服务器,但看到的内容完全不同。

通过变量动态设置根目录

nginx支持在server块内使用if判断或变量赋值:

server {
    listen 80;
    server_name a.com b.com;
    if ($host = a.com) {
        set $site_dir /var/www/a.com;
    }
    if ($host = b.com) {
        set $site_dir /var/www/b.com;
    }
    root $site_dir;
    index index.html;
}

这种写法将两个域名的配置合并到一个server块中,减少重复代码,但可读性略差,业内专家指出,配置复杂时拆分配置文件比使用if更利于排查问题。

反向代理场景下的多域名配置

如果nginx作为反向代理,多域名配置时只需修改proxy_pass的转发目标:

server {
    listen 80;
    server_name api.a.com;
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

nginx多域名配置的常见问题排查

nginx多域名配置后访问不到预期站点,多数情况下是配置细节出了问题,按以下顺序排查,能快速定位原因。

配置未重载导致旧配置生效

修改配置文件后忘记执行systemctl reload nginx,nginx仍在运行旧配置,排查时先执行:

nginx -T | grep server_name

查看当前生效的配置中server_name是否包含新域名。

server_name与域名解析不一致

nginx配置多域名怎么做?,nginx多域名配置教程详解

服务器配置了a.com,但域名的DNS记录未解析到服务器IP,本地测试时可以用curl指定Host头:

curl -H "Host: a.com" http://203.0.113.10

返回200说明nginx配置正确,问题出在DNS解析或域名注册商的解析设置上。

默认服务器覆盖了域名匹配

nginx多域名配置时如果忘记为每个域名设置独立的server_name,且开启了default_server,请求会全部落入默认服务器,检查每个server块是否都有明确的server_name指令,且没有重复定义相同域名。

证书错误导致HTTPS访问失败

多域名配置HTTPS证书时,常见的报错是ssl_certificate路径写错或证书文件权限不足,执行nginx -t会提示具体的证书错误,根据提示修正路径即可。

nginx多域名配置需要花钱吗?nginx本身是开源免费的,服务器和域名的费用由云服务商和域名注册商收取,SSL证书可以免费申请Let’s Encrypt证书,成本可以控制在服务器费用以内。

Q&A:nginx多域名配置常见疑问

nginx一个服务器能配置多少个域名?

理论上nginx配置的域名数量没有硬性上限,取决于服务器性能和配置文件复杂度,每个server块占用少量内存,数百个域名在同一台服务器上运行是可行的,多域名配置时建议将每个域名的server块拆分为独立文件,方便单独禁用或修改某个站点。

nginx多域名配置后访问不了对应网站怎么办?

先执行nginx -t检查配置语法,再执行systemctl reload nginx重载配置,确认域名的DNS解析记录指向服务器IP,且服务器安全组或防火墙开放了80和443端口,用curl -H "Host: 你的域名" http://服务器IP测试nginx是否返回预期内容,如果返回403则检查站点目录权限,返回404则检查root路径是否写错。

同一个IP可以同时配置多个域名的HTTPS证书吗?

可以,nginx通过SNI机制在TLS握手阶段识别域名,为不同域名返回对应的证书,配置时确保每个server块的ssl_certificate指向该域名自己的证书文件,使用nginx -T可以查看所有server块的证书配置,Let’s Encrypt等免费证书签发服务支持多域名申请,Certbot可以自动完成证书安装和续期,整个过程不需要额外付费。

图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/770884.html

(0)
上一篇 2026年9月2日 12:57
下一篇 2026年9月2日 12:59

相关推荐

  • 域名后缀有什么用?域名后缀有什么用_域名后缀选择技巧

    域名后缀的核心作用是区分网站属性、定位目标市场并直接影响搜索引擎收录权重与用户信任度,2026 年数据显示,匹配业务属性的后缀能提升 30% 以上的点击转化率,在 2026 年的数字生态中,域名后缀已不再是简单的地址标识,而是品牌战略的“数字身份证”,随着互联网基础设施的完善,用户与搜索引擎对域名后缀的识别能力……

    2026年5月8日
    01825
  • iis域名绑定端口,iis绑定域名和端口详细教程

    在IIS中通过“绑定”功能将域名与特定端口关联,是实现多站点隔离、HTTPS加密传输及反向代理架构的核心技术路径,其本质是修改HTTP.sys注册表监听规则而非改变IIS服务本身的监听端口,IIS域名与端口绑定的核心逻辑解析许多运维人员常混淆“监听端口”与“绑定标识”的概念,在Windows Server 20……

    2026年7月6日
    01473
  • 如何注册网址域名,域名注册流程

    选定心仪域名、选择正规注册商、完成实名认证并提交WHOIS信息,整个过程通常耗时15-30分钟,建议优先选择阿里云或腾讯云等国内备案合规平台以确保后续网站上线顺畅,域名注册全流程解析域名是互联网世界的门牌号,其注册过程看似简单,实则涉及法律合规与技术配置,对于2026年的互联网从业者而言,理解底层逻辑比单纯购买……

    2026年6月12日
    01330
    • 服务器间歇性无响应是什么原因?如何排查解决?

      根源分析、排查逻辑与解决方案服务器间歇性无响应是IT运维中常见的复杂问题,指服务器在特定场景下(如高并发时段、特定操作触发时)出现短暂无响应、延迟或服务中断,而非持续性的宕机,这类问题对业务连续性、用户体验和系统稳定性构成直接威胁,需结合多维度因素深入排查与解决,常见原因分析:从硬件到软件的多维溯源服务器间歇性……

      2026年1月10日
      020
  • pet域名是什么,宠物域名怎么选更靠谱?

    .pet域名是宠物行业专属的顶级域名,对宠物相关网站来说值得注册,但对普通商业项目来说不如.com实用,宠物经济的盘子近些年肉眼可见地变大,街道上宠物店越开越多,线上宠物内容创作者也扎堆出现,如果你正打算给这类业务做一个独立站,域名后缀选什么就成了绕不开的问题,本文直接拆解.pet域名的定位、价格、适用场景和实……

    2026年8月28日
    0265

发表回复

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