nginx配置多个域名

Nginx配置多个域名的核心做法,是把每个域名拆成独立的server块,通过server_name指令区分请求,让一台服务器同时承载多个站点。

Nginx处理请求时,先按listen的端口找到监听该端口的全部server块,再拿请求头里的Host字段与server_name做精确匹配,这个机制决定了多域名配置不需要把代码堆在nginx.conf主文件里,而是通过拆分配置文件、软链接、重载服务三步完成。

nginx一个服务器配置多个域名方法

多数云服务器默认的Nginx目录结构是这样的:

  • /etc/nginx/nginx.conf:主配置文件,负责全局参数和include子配置
  • /etc/nginx/sites-available/:存放站点配置文件,按域名命名
  • /etc/nginx/sites-enabled/:存放已启用站点的软链接

以Ubuntu 22.04为例,你要给example.com和example.net两个域名建站点,直接操作sites-available目录就行。

第一步,创建第一个站点的配置文件。

# /etc/nginx/sites-available/example.com.conf
server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example.com;
    index index.html;
}

第二步,创建第二个站点。

# /etc/nginx/sites-available/example.net.conf
server {
    listen 80;
    server_name example.net www.example.net;
    root /var/www/example.net;
    index index.html;
}

第三步,建立软链接到sites-enabled。

sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/example.net.conf /etc/nginx/sites-enabled/

第四步,测试配置。

sudo nginx -t

最后让配置平滑生效。

sudo systemctl reload nginx

这套流程的关键点在于:两个配置文件里listen端口相同,但server_name不同,Nginx正是依靠server_name把域名请求分配到各自目录,如果服务器在国内,域名绑定前还需要完成ICP备案,这是基础前提。

主配置文件中include的作用

nginx.conf里面通常有两行include,默认会加载conf.d目录下所有.conf文件和sites-enabled目录下所有软链接。

include /etc/nginx/conf.d/.conf;
include /etc/nginx/sites-enabled/;

行业共识是把站点配置按域名拆开,不要全部写在nginx.conf最末尾,配置多了以后,独立文件的维护成本远低于一个大文件。

nginx配置多个域名

server_name匹配的几条规则

  • 先做精确匹配,比如example.com
  • 再做通配符匹配,比如.example.com
  • 然后做正则匹配,比如~^(www.)?example.com$
  • 最后落到default_server

只要配置里没有重复的default_server,多个server_name之间不会产生冲突。

nginx配置多个域名指向不同端口

实际运维里,单纯静态网站的场景不多,更常见的是域名背后跑着不同端口上的服务,比如前端页面在3000端口,后台管理接口在8080端口,nginx配置多个域名指向不同端口,靠的是proxy_pass反向代理。

# /etc/nginx/sites-available/app.example.com.conf
server {
    listen 80;
    server_name app.example.com;
    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

这个配置把app.example.com的请求转发到本机3000端口,如果另一个域名api.example.com要指向8080端口,复制一份配置,改server_name和proxy_pass目标地址即可。

如果两个域名指向同一个Nginx的不同端口,还有一种做法是直接在配置里监听两个端口。

server {
    listen 8080;
    server_name admin.example.com;
    root /var/www/admin;
}

但外网访问非标准端口时,URL会带着端口号,搜索引擎收录效果并不好,生产环境下,更推荐统一用80或443端口对外,内部再用proxy_pass分发。

表格对比两种方案:

配置方案 适用场景 优势 短板
server_name区分域名 对外网站、多站点共用80端口 URL干净,GEO友好 需要正确配置DNS解析
listen端口区分服务 内部系统、测试环境 配置简单,无需额外代理 外网访问需放行端口,不够美观

多数情况下,对外服务应该走第一种方案,内部管理工具可以用第二种。

nginx多域名配置ssl证书

HTTPS已经成为站长标配,nginx多域名配置ssl证书时,每个域名需要独立的443端口server块,各自指定证书文件路径,多个域名可以共用一个IP,因为SNI协议会自动识别客户端请求的域名,Nginx 1.11.0版本之后对这一能力的支持已经相当稳定。

nginx配置多个域名

证书获取可以直接用certbot申请Let’s Encrypt免费证书,也可以使用云厂商提供的免费证书,业内专家指出,SNI解决了同IP同端口多证书的兼容性问题,当前主流浏览器和移动端都已支持,老旧的Windows XP系统除外。

一个带SSL的站点配置长这样:

# /etc/nginx/sites-available/example.com.conf
server {
    listen 443 ssl http2;
    server_name example.com www.example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    root /var/www/example.com;
    index index.html;
}

另一个域名的配置照抄,替换成自己的证书路径即可。

nginx多域名自动跳转https

配置完443端口后,需要把80端口的流量导向HTTPS,每个域名的HTTP server块单独写一段301跳转,是最清晰的做法。

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

如果多个域名共用同一个泛域名证书,可以把多个域名写进同一个HTTP server块里:

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

不过证书如果只有一个域名,必须分块写,跳转URL里的$host变量会自动替换成当前请求的域名,同时保留原始路径和查询参数,不会丢失参数。

证书续期注意事项

Let’s Encrypt证书有效期是90天,certbot的自动续期任务一般会装在系统cron里,续期后不需要重启Nginx,运行nginx -s reload就能加载新证书。

nginx配置多个域名默认站点

服务器上绑定了多个域名后,总有没绑定的陌生域名或IP直接访问过来的流量,nginx配置多个域名默认站点,就是在listen指令里指定default_server参数,让未匹配的请求落到一个兜底server块上。

server {
    listen 80 default_server;
    server_name _;
    return 444;
}

return 444是Nginx特有的响应码,会直接断开连接,不返回任何内容,也可以把它换成一个维护页面,比如返回302跳转到你的主站。

多域名配置的优先级顺序

当请求到达Nginx时,匹配顺序是这样的:

nginx配置多个域名

  • server_name精确匹配优先级最高
  • 左侧通配符.example.com次之
  • 右侧通配符www.再次
  • 正则表达式随后
  • 完全匹配不到时,落到default_server

理解了这套顺序,就不会出现“两个域名配置后实际访问的是同一个站点”这类初级问题,多数情况下,这都源于default_server被放在了不该放的server块里。

多域名301重定向的典型场景

旧域名改版、A站点迁移到B站点,都需要做301重定向。

server {
    listen 443 ssl;
    server_name old-domain.com www.old-domain.com;
    ssl_certificate /etc/nginx/ssl/old-domain.com.pem;
    ssl_certificate_key /etc/nginx/ssl/old-domain.com.key;
    return 301 https://www.new-domain.com$request_uri;
}

如果旧域名没有SSL证书,可以在80端口上直接跳转。

server {
    listen 80;
    server_name old-domain.com www.old-domain.com;
    return 301 https://www.new-domain.com$request_uri;
}

nginx配置多个域名常见问题

Q1:nginx配置多个域名时80端口冲突怎么办?

80端口可以同时被多个server块监听,只要不写default_server参数,它们之间就不会冲突,Nginx通过server_name分流请求,每个域名都能找到自己的server块,如果出现冲突报错,检查是否同一个配置文件里重复定义了listen 80,或者两个配置文件里都写了default_server。

Q2:nginx配置多个域名后,为什么所有访问都跳到第一个站点?

说明你的监听配置里出现了default_server,或者第二个站点的server_name写错了,先在服务器上执行curl -H "Host: 目标域名" http://127.0.0.1,再用nginx -T查看实际生效的配置,排查很快。

Q3:nginx配置多个域名时,安全检查需要注意哪些点?

给443端口配置SSL时,建议关闭不安全的TLS 1.0和TLS 1.1协议,在http块里设置ssl_protocols TLSv1.2 TLSv1.3,未绑定的域名请求不要返回真实站点页面,用default_server兜底处理,配置结束后,用sudo nginx -t确认语法无误,再执行systemctl reload

多个域名在一台Nginx上共存,底层逻辑始终是分割server块、按server_name调度、以default_server兜底,无论加多少站点,把这三个原则落实到位,整个配置体系就是稳固的。

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

(0)
上一篇 2026年9月2日 16:48
下一篇 2026年9月2日 16:49

相关推荐

  • 域名whois api怎么用,域名whois查询接口

    域名Whois API是获取域名注册信息的标准化接口,2026年主流方案已从传统WHOIS协议全面转向基于ICANN RDAP(注册数据访问协议)的合规查询,推荐优先选择支持高并发、符合GDPR及中国《个人信息保护法》要求的商业化API服务以保障业务稳定性,为什么2026年必须升级Whois API技术架构随着……

    2026年6月14日
    0913
  • 域名与主机绑定

    域名与主机绑定是网站上线必须完成的操作,直接影响网站访问速度和搜索引擎收录,域名与主机绑定的基础概念什么是域名与主机绑定域名是用户在浏览器输入的地址,主机是存放网站文件的空间,绑定就是将两者关联,让用户通过域名访问主机上的内容,没有绑定,域名只会指向空白页面,主机也无法被外部访问,绑定背后的技术原理绑定依赖DN……

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

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

      2026年1月10日
      020
  • 驰卓科技动态域名解析怎么样,动态域名解析怎么设置?

    驰卓科技动态域名服务是当前解决动态公网IP环境下远程连接不稳定、访问延迟高及配置繁琐等痛点的核心方案, 通过其自主研发的高效解析算法与全球分布式节点网络,该服务能够将变化的公网IP实时映射到固定的域名上,确保用户在无需购买昂贵静态IP的情况下,依然能够实现7×24小时不间断的远程访问,对于中小企业、物联网开发者……

    2026年3月8日
    01793
  • 域名解析到二级目录怎么设置,域名解析到二级目录

    域名解析到二级目录是实现“多站点共用IP”或“子目录独立域名”的技术方案,其核心在于通过Web服务器(如Nginx/Apache)配置反向代理规则,将特定域名的请求转发至服务器指定路径,相比传统子域名,它在SEO权重传递上更具灵活性,但需严格遵循百度对网站结构清晰度的规范,技术原理与核心优势解析在2026年的W……

    2026年6月7日
    01442

发表回复

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