原标题:nginx 绑定多域名
导读:
# Nginx多域名绑定实战指南:从配置到问题排查全解析在Web服务部署中,多域名绑定是常见需求——无论是企业官网使用不同子域名区分功能模块,还是开发者测试环境用独立域名...
Nginx多域名绑定实战指南:从配置到问题排查全解析
在Web服务部署中,多域名绑定是常见需求——无论是企业官网使用不同子域名区分功能模块,还是开发者测试环境用独立域名隔离项目,都离不开Nginx的虚拟主机配置能力。本文将从原理到实战,详解Nginx多域名绑定的配置方法、常见问题及解决思路,帮助读者快速上手。
一、为什么需要Nginx多域名绑定?
多域名绑定的核心价值在于资源复用与场景隔离。例如:
- 电商网站通过
www.example.com(主域名)承载核心业务,sale.example.com(促销域名)承载营销活动,两者可共享服务器资源; - 企业官网使用
www.company.com展示品牌,hr.company.com指向招聘页面,便于用户快速识别; - 开发者测试环境用
dev.example.com和test.example.com分别部署不同项目,避免域名混淆。
Nginx通过虚拟主机(Virtual Host)机制,利用server_name指令区分不同域名的请求,实现“一台服务器、多个网站”的高效部署。
二、Nginx多域名绑定原理
Nginx的虚拟主机基于server块配置,每个server块对应一个或多个域名,通过server_name匹配客户端请求的Host头信息。其匹配规则优先级为:
- 精确匹配(如
www.example.com) - 通配符匹配(如
*.example.com,匹配所有二级域名) - 正则表达式(如
~^www\.example\.com$,需以~开头)
若多个server块的server_name均未匹配,Nginx会返回默认虚拟主机的配置(通常是第一个server块)。
三、配置实战:从单域名到多域名
1. 准备工作
- 域名解析:确保所有域名的A记录已指向服务器IP(可通过
ping 域名验证); - Nginx安装与权限:确认Nginx已安装(如
apt install nginx),网站根目录(如/var/www)需设置nginx用户读写权限。
2. 单域名配置示例
以绑定www.example.com为例,创建配置文件/etc/nginx/sites-available/example.com:
server {
listen 80;
server_name www.example.com; # 精确匹配主域名
root /var/www/example; # 网站根目录
index index.html index.php; # 默认首页
location / {
try_files $uri $uri/ =404; # 常规请求处理
}
}
保存后通过ln -s软链接到启用目录,并重启Nginx:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t # 验证配置语法
sudo systemctl restart nginx
3. 多域名绑定(两个域名)
若需绑定www.example.com和sale.example.com,可在同一配置文件中添加第二个server块:
server {
listen 80;
server_name www.example.com;
root /var/www/example;
index index.html;
}
server {
listen 80;
server_name sale.example.com; # 新增域名
root /var/www/sale; # 指向不同根目录
index index.html;
}
关键:若访问example.com(不带www)时无法匹配,需补充server_name:
server {
listen 80;
server_name example.com www.example.com; # 同时匹配主域名和带www
root /var/www/example;
}
4. HTTPS多域名证书配置
若需绑定HTTPS,需在listen 443 ssl;下配置证书,并确保server_name与证书域名一致:
server {
listen 443 ssl;
server_name www.example.com sale.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;
index index.html;
}

注意:免费证书(如Let’s Encrypt)支持通配符证书(*.example.com),或单独配置多个域名证书。
四、常见问题与排查
1. 配置不生效:域名无法访问
- 排查方向:
- DNS解析错误:执行
nslookup example.com确认域名是否指向服务器IP; - 配置路径错误:用
nginx -t检查语法,/var/log/nginx/error.log查看Nginx错误日志; - 端口冲突:若80/443端口被占用(如Apache),需关闭或修改占用服务。
- DNS解析错误:执行
2. 域名跳转异常:访问A域名跳转到B域名
- 原因:
server_name未包含目标域名,或配置了return 301重定向(如强制跳转到www)。 - 解决:在
server块中补充server_name,或检查rewrite规则是否正确。
3. HTTPS证书不匹配
- 问题:浏览器提示“不安全”,因证书未包含多域名(如证书仅包含
www.example.com,但用户访问example.com)。 - 解决:
- 使用通配符证书(
*.example.com)覆盖所有子域名; - 配置证书链时包含所有绑定域名(Let’s Encrypt需手动指定
--domains参数)。
- 使用通配符证书(
五、应用场景扩展
- 测试环境隔离:用
dev.example.com部署开发版,prod.example.com部署生产版,避免环境混淆; - 多语言站点:
en.example.com和zh.example.com分别指向不同语言页面; - API服务:
api.example.com指向后端服务,前端通过跨域配置区分。
六、总结
Nginx多域名绑定的核心是通过server_name和server块实现虚拟主机隔离,配置时需注意域名匹配规则、路径权限及证书兼容性。掌握本文方法后,可快速实现多域名部署与问题排查,适用于个人博客、企业官网、开发者测试等场景。
提示:配置前务必备份原文件,使用nginx -t验证语法,避免因配置错误导致服务中断。





还没有评论,来说两句吧...