Nginx多域名绑定全攻略:从基础配置到HTTPS实现
在Web服务搭建中,多域名绑定是提高服务器利用率、降低运维成本的关键技术。通过Nginx的虚拟主机功能,一台服务器可同时运行多个独立域名站点,实现资源共享与灵活管理。本文将从基础配置到SSL证书部署,详细讲解Nginx多域名绑定的完整流程。
一、多域名绑定的核心价值
多域名绑定本质是通过Nginx的虚拟主机(Virtual Host)机制,让不同域名请求指向不同的网站目录或服务。其优势包括:
- 资源复用:共享服务器硬件资源,降低多服务器部署成本;
- 管理便捷:集中管理不同域名的配置、日志和权限;
- 灵活扩展:快速添加新域名站点,无需额外服务器。
二、准备工作
1. 服务器环境要求
- 安装Nginx(版本建议≥1.10,支持
server_name指令); - 服务器具备公网IP(单IP或多IP均可,共享IP更常见);
- 域名已完成DNS解析,A记录或CNAME需指向服务器IP。
2. 基础测试
配置前需验证域名解析是否生效:
# 查看域名解析结果
nslookup example.com # 替换为你的主域名
若解析结果与服务器IP一致,即可进入配置环节。
三、单IP多域名配置(最常用场景)

共享IP下,Nginx通过server_name指令区分不同域名,每个域名对应一个server块。
核心配置示例
# /etc/nginx/sites-available/default.conf
server {
listen 80; # 监听HTTP端口
server_name example.com www.example.com; # 主域名+www前缀
root /var/www/main-site; # 网站根目录
index index.html; # 默认首页
# 常规网站配置(如PHP解析、防盗链等)
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.0-fpm.sock;
include fastcgi_params;
}
}
server {
listen 80;
server_name blog.example.com; # 子域名
root /var/www/blog-site;
index index.php;
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.0-fpm.sock;
include fastcgi_params;
}
}
关键说明:
listen 80;共享同一端口,不同域名通过server_name区分;- 每个
server块对应独立的网站根目录,避免资源冲突; - 配置完成后,执行
nginx -t检查语法,无误后nginx -s reload使配置生效。
四、不同IP下多域名绑定(扩展场景)
若服务器拥有独立IP(如192.168.1.10和192.168.1.11),可直接在listen指令中指定IP:
server {
listen 192.168.1.10:80; # 绑定独立IP
server_name example.com;
root /var/www/main;
}
server {
listen 192.168.1.11:80; # 绑定另一个IP
server_name api.example.com;
root /var/www/api;
}
这种方式适用于对安全性要求较高的场景,如主域名与管理后台分离部署。
五、HTTPS证书配置(多域名SSL支持)
当前HTTPS为标准配置,多域名绑定需同步部署SSL证书。步骤如下:
1. 安装证书工具
使用Let's Encrypt的Certbot生成证书,支持单域名或多域名:
# 安装Certbot
apt install certbot python3-certbot-nginx
# 获取多域名证书(需确保域名已解析)
certbot certonly --nginx -d example.com -d www.example.com -d blog.example.com
2. Nginx配置SSL
在HTTPS监听块中添加证书路径和协议配置:
server {
listen 443 ssl;
server_name example.com www.example.com;
# SSL证书路径(Certbot自动生成)
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# 协议与安全配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
# 启用HSTS(强制HTTPS)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}
注意:
- 证书需包含所有域名(如
example.com、www.example.com、blog.example.com),通配符证书(如*.example.com)可覆盖子域名; - 证书有效期通常为90天,需定期用
certbot renew续期。
六、常见问题与排查
- 域名不生效:检查DNS解析是否为A记录(非CNAME需确保指向正确IP),用
nslookup或在线DNS检测工具验证; - Nginx报错:执行
nginx -t检查配置语法,错误行会提示具体位置(如nginx: [emerg] unknown directive "ssl_certificate"); - 证书失效:Certbot会自动续期,但需确保服务器时间同步(避免证书签名验证失败)。
七、最佳实践建议
- 拆分配置文件:每个域名独立配置文件(如
/etc/nginx/sites-available/example.com.conf),通过include引入主配置:http { include /etc/nginx/sites-available/*.conf; } - 权限优化:网站目录权限设为
755(目录)和644(文件),Nginx运行用户(如www-data)需具备读取权限; - 防盗链与缓存:添加
valid_referers防盗链规则,或配置expires头缓存静态资源:location ~* \.(jpg|jpeg|png)$ { expires 30d; valid_referers none blocked server_names *.example.com; if ($invalid_referer) { return 403; } }
通过以上步骤,即可快速实现Nginx多域名绑定,兼顾性能与安全性。无论是个人博客、企业官网还是电商平台,都能通过该方案高效管理多站点资源,为后续扩展提供灵活基础。