nginx 绑定多域名
Nginx多域名绑定全攻略:从基础配置到HTTPS部署
在Web服务部署中,多域名绑定是实现虚拟主机、区分不同业务场景的核心需求。Nginx凭借其高性能与灵活的配置机制,成为多域名管理的首选工具。本文将从原理到实战,详解Nginx多域名绑定的配置方法、常见场景及注意事项,帮助开发者快速掌握这一基础技能。
一、核心原理:Nginx如何识别多域名?
Nginx通过虚拟主机(Virtual Host) 机制实现多域名绑定,核心依赖server_name指令匹配请求中的域名。server_name支持三种匹配规则:精确匹配(如example.com)、通配符匹配(如*.example.com)、正则表达式(如~^www\.(.*)\.com$),匹配优先级为:精确匹配 > 通配符 > 正则表达式。

当用户请求某个域名时,Nginx会根据server_name找到对应的server块,执行该域名的根目录、索引文件等配置,从而实现不同域名的独立服务。
二、实战配置:三大典型场景
场景1:同一IP+同一端口,多域名(最常用)
若服务器仅绑定一个公网IP,需通过server_name区分不同域名,在nginx.conf或conf.d/*.conf中添加多个server块即可:
# 主配置文件示例(nginx.conf或独立配置文件)
server {
listen 80; # 监听80端口(HTTP)
server_name example.com www.example.com; # 精确匹配主域名和www子域名
root /var/www/example; # 网站根目录
index index.html index.htm; # 默认首页
# 静态资源缓存配置
location ~* \.(jpg|jpeg|png|css|js)$ {
expires 7d; # 静态资源缓存7天
add_header Cache-Control "public";
}
}
server {
listen 80; # 复用80端口
server_name blog.example.com; # 独立博客域名
root /var/www/blog;
index index.php;
# PHP解析配置
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
关键提示:
- 若存在
example.com和*.example.com同时匹配同一域名,Nginx会优先匹配精确域名(如example.com),避免通配符覆盖。 - 域名需在DNS解析中正确指向服务器IP,且
server_name需与DNS解析完全一致(包括大小写,Nginx默认区分大小写)。
场景2:同一IP+不同端口,多域名
若需为不同域名分配独立端口(如example.com:8080),可在listen指令中指定端口:
server {
listen 8080; # 绑定8080端口
server_name api.example.com; # API域名
root /var/www/api;
# 其他配置(如HTTPS、反向代理)
}
server {
listen 8081; # 绑定8081端口
server_name admin.example.com; # 管理后台域名
root /var/www/admin;
}
适用场景:开发环境或测试环境,避免端口冲突,便于隔离不同业务服务。
场景3:多IP+多域名(需服务器支持多IP)
若服务器具备多个独立公网IP(如云服务器弹性IP),可直接通过IP绑定域名,每个IP对应一个域名:
server {
listen 192.168.1.100:80; # 绑定IP1
server_name example.com;
root /var/www/example;
}
server {
listen 192.168.1.101:80; # 绑定IP2
server_name docs.example.com;
root /var/www/docs;
}
注意:需确保服务器内核支持多IP绑定(Linux下可通过ip addr查看已有IP),且DNS解析需将域名指向对应IP。
三、HTTPS与性能优化
1. HTTPS多域名配置
若需为多域名启用HTTPS,需确保证书支持所有域名(如通配符证书*.example.com或泛域名证书)。以Let's Encrypt为例,通过certbot批量配置:
server {
listen 443 ssl;
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;
# SSL安全配置(推荐)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers HIGH:!aNULL:!MD5;
}
提示:Certbot支持--domains参数批量添加域名,避免重复申请证书。
2. 常见问题排查
- 404错误:检查
root路径是否正确(如/var/www/example需存在且Nginx进程用户有读取权限),确认index文件是否存在(默认index.html)。 - 域名不匹配:执行
nginx -t检查配置语法,通过curl -I example.com查看响应头,确认server_name与HTTP请求头的Host字段一致。 - 配置不生效:重启Nginx需执行
nginx -s reload,避免直接nginx -s stop导致服务中断。
四、总结
Nginx多域名绑定通过server_name和listen指令灵活实现,核心是合理规划域名匹配规则。无论是共享IP、独立IP还是HTTPS场景,均需根据实际需求选择配置方案,并通过严格测试(如浏览器访问、DNS解析检查)确保服务稳定。掌握这一技能,是构建高扩展性Web架构的基础。
关键命令速记:
- 测试配置:
nginx -t - 重启服务:
nginx -s reload - 查看Nginx进程:
ps aux | grep nginx
通过上述步骤,即可快速实现Nginx多域名绑定,为业务扩展提供灵活的Web服务支撑。

上一篇





