Nginx配置子域名的核心在于利用server_name指令将不同的域名请求精准分发至对应的网站根目录,结合DNS的A记录解析,实现单台服务器或单一IP地址高效托管多个独立业务,这种配置方式不仅能够最大化利用服务器资源,还能通过逻辑隔离提升网站的安全性,是现代Web架构中实现多站点部署的标准解决方案。

DNS解析是配置的前提基础
在开始Nginx配置之前,必须确保域名解析已正确指向服务器IP,对于子域名(如blog.example.com),需要在域名服务商处添加主机记录,通常有两种方式:一种是添加A记录,直接将子域名指向服务器的公网IP地址;另一种是添加CNAME记录,将其指向另一个域名。推荐使用A记录,因为这样能减少解析层级,提高访问速度,DNS生效通常需要几分钟到48小时不等,配置前可以使用ping或nslookup命令确认解析是否已生效。
基础Server块配置逻辑
Nginx的配置文件通常位于/etc/nginx/nginx.conf,但为了保持整洁,建议将每个子域名的配置单独存放在/etc/nginx/conf.d/目录下,配置的核心是server块,每一个子域名对应一个独立的server块,通过监听80端口(HTTP)或443端口(HTTPS),并利用server_name指令来区分访问请求。
配置一个api.example.com的子域名,关键配置如下:
server {
listen 80;
server_name api.example.com;
root /var/www/api;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
这里,server_name必须准确填写,包括通配符的使用。root指令指定了该子域名对应的网站文件存放路径,确保该路径存在且Nginx进程用户(通常是www-data或nginx)对该目录拥有读取权限,否则会报403 Forbidden错误。
利用通配符与正则实现高效管理
在拥有大量子域名的场景下,为每个子域名编写重复的配置块不仅效率低下,而且难以维护,Nginx支持使用通配符和正则表达式来匹配子域名,这体现了其配置的灵活性。

使用通配符*.example.com可以匹配所有三级域名。
server {
listen 80;
server_name *.example.com;
root /var/www/$host;
}
更专业的方案是结合正则表达式捕获子域名部分,从而实现动态映射根目录,将user1.example.com自动映射到/var/www/users/user1:
server {
listen 80;
server_name ~^(?<subdomain>.+)\.example\.com$;
root /var/www/users/$subdomain;
location / {
index index.html;
}
}
这种配置方式极大地简化了多租户系统的部署,避免了每次新增用户都需要重启Nginx服务,是SaaS类应用推荐的配置模式。
SEO与安全性的双重加固
为了符合百度SEO优化标准及现代安全规范,子域名配置必须包含HTTPS支持,搜索引擎目前更倾向于收录HTTPS站点,且浏览器也会对非HTTPS站点标记为不安全,需要为每个子域名申请SSL证书,或者使用泛域名证书。
配置SSL时,务必开启HSTS(HTTP Strict Transport Security),强制客户端只能通过HTTPS连接,防止SSL剥离攻击,应配置从HTTP到HTTPS的301重定向,将权重集中到HTTPS版本上。
server {
listen 80;
server_name app.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name app.example.com;
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
# 其他配置...
}
为了防止恶意域名指向你的服务器IP(即别人随意解析一个域名指向你的IP),建议设置一个默认的server块,用于丢弃未匹配的请求:
server {
listen 80 default_server;
server_name _;
return 444;
}
配置验证与平滑重载

配置修改完成后,切忌直接重启服务,应先使用nginx -t命令测试配置文件的语法正确性,如果提示syntax is ok和test is successful,再执行systemctl reload nginx进行平滑重载。平滑重载能确保正在处理的连接不被中断,这对用户体验至关重要。
相关问答
Q1:配置Nginx子域名后访问显示403 Forbidden,应该如何排查?
A1:403错误通常由权限问题引起,首先检查root指定的目录路径是否正确且存在,查看目录及文件的权限设置,确保Nginx运行用户(如nginx或www-data)对目录拥有r(读)和x(执行)权限,对文件拥有r权限,如果是CentOS系统,还需检查SELinux是否开启了限制,可以使用setenforce 0临时关闭测试或配置正确的SELinux上下文。
Q2:能否在一个Nginx端口上配置主域名和多个子域名?
A2:完全可以,Nginx通过server_name指令来区分请求,即使多个server块都监听同一个IP和端口(如80),Nginx会根据请求头中的Host字段与server_name进行匹配,只要server_name不同,它们就能完美共存,这也是Nginx基于名称虚拟主机的核心特性。
希望以上配置方案能帮助你顺利搭建起高效的子域名管理系统,如果你在配置过程中遇到特定的报错信息或复杂的业务场景需求,欢迎在评论区留言,我们可以进一步探讨解决思路。