nginx配置二级域名并不复杂,核心就两步:先做好DNS解析,再写好server块。只要你理解了域名解析和nginx虚拟主机这两个概念,十分钟就能搞定。
第一步:理清nginx配置二级域名前必须知道的DNS知识
很多人一上来就改nginx配置文件,结果怎么折腾都不生效,回头一看是DNS解析没做,这个顺序千万别搞反,DNS解析是把你的二级域名指向服务器IP的“指路牌”,nginx只是负责在服务器内部“接客”,指路牌都没立起来,nginx配置得再漂亮也没人找得到你。
在操作之前,你需要明确自己在用什么场景,根据我接触过的情况,大致分成两种:
- 场景A:主域名和二级域名都在同一台服务器上。 这是最常见的情况,
example.com和blog.example.com都指向同一个IP。 - 场景B:二级域名指向不同服务器。 比如主站在一台机器,图片站或API服务在另一台,这种情况DNS解析稍有不同,需要在DNS服务商处将二级域名解析到对应服务器的IP。
确认好场景后,登录你的域名管理后台(简米云、酷番云、Cloudflare等),在DNS解析设置里,添加一条记录:
- 记录类型:填
A记录(指向IPv4地址)或CNAME记录(指向另一域名)。 - 主机记录:填
blog(对应blog.example.com)或 (泛解析,所有二级域名都指向该IP)。 - 记录值:填服务器公网IP或目标域名。
在nginx配置二级域名之前,你需要确认解析已经生效,终端里执行 ping blog.example.com,看到返回的IP和服务器IP一致,再继续往下走,如果你用的是CDN或云负载均衡,ping出来的可能不是源站IP,但只要能通就行。
第二个核心环节:nginx二级域名配置方法之server块详解
DNS解决“谁来敲门”的问题,nginx解决“敲了门之后该怎么办”的问题,所有nginx配置二级域名的技巧,都集中在 server 块里,你需要修改的就是nginx的配置文件。
nginx配置二级域名时server_name该怎么写
找到nginx的配置文件目录(一般是 /etc/nginx/conf.d/ 或 /etc/nginx/sites-available/),新建一个专门的文件,blog.conf,不建议直接改主配置文件 nginx.conf,那样不利于后期维护。
一个最简配置长这样:
server {
listen 80;
server_name blog.example.com; # 这里换成你的二级域名
root /var/www/blog; # 网站文件存放路径
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
这段配置里的关键点如下:
- listen 80:监听HTTP端口,如果配置了SSL,则改成
443 ssl。 - server_name:这是nginx匹配域名的重要依据,nginx接收请求后,会拿请求头里的Host字段与所有server块的server_name比对,命中的才执行对应逻辑。
- root:指定这个二级域名对应的网站根目录,很多配置无效的案例,问题都出在这里忘记创建目录或路径写错。
-

location /
:定义根路径的处理方式。try_files按顺序检查文件是否存在,不存在就返回404。
改完配置后,先测试语法:
nginx -t
看到 syntax is ok 再重载:
nginx -s reload
然后浏览器访问 blog.example.com,应该就能看到 /var/www/blog 目录下的内容了。
同服务器多二级域名的配置文件组织方式
如果你之前配置二级域名时直接把新server块加在现有配置里,会发现文件越来越乱,行业共识认为,每个域名一个独立配置文件的做法更清晰,也方便通过符号链接快速启用或禁用一个站点。
配置文件目录的组织形式如下:
/etc/nginx/sites-available/:存放所有可用的站点配置。/etc/nginx/sites-enabled/:存放已启用的配置,里面是指向sites-available下文件的软链接。
在Debian/Ubuntu系统里,需要在 nginx.conf 的主 http 块中确认有 include /etc/nginx/sites-enabled/; 这一行,CentOS/RHEL系统则习惯直接用 conf.d 目录下的 .conf 文件,你可以根据自己的操作系统选择合适的组织方式,但核心原则不变:一个二级域名一个独立文件。
一个常见坑:忘记把server块写入主配置文件引用的目录中,很多朋友nginx二级域名配置后无法访问主站,原因就在于新加的server块覆盖了默认站点对80端口的监听,而默认站点没有显式配置server_name。
泛解析和通配符在nginx配置二级域名时的用法
如果你有大量二级域名需要指向同一个网站根目录,手动逐个添加server块效率太低,此时可以用泛解析加通配符server_name:
server {
listen 80;
server_name .example.com;
root /var/www/example;
index index.html;
if ($host ~ ^(.).example.com$) {
set $subdomain $1;
}
}
这种配置适合SaaS应用或用户个人主页,不过要注意,泛解析会把所有未匹配的二级域名都送到这个server块,如果只想让部分二级域名生效,建议还是显式列出。
核心场景实战:nginx配置二级域名搭建个人博客或反向代理
配置好基础server块后,场景就分化了,有的人用二级域名跑一个静态博客,有的人需要将二级域名反向代理到内网服务(比如NAS上的应用),这两种方式的写法不太一样,你需要在动手前想清楚自己属于哪一种。
反向代理场景下nginx如何配置二级域名
假设你在本机8080端口跑了一个WordPress或Node.js应用,不想用 example.com:8080 这种带端口的URL访问,而是希望通过 blog.example.com 直接访问,这就需要用反向代理块:
server {
listen 80;
server_name blog.example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
核心是 proxy_pass,它的作用是nginx接收到来自

blog.example.com 的请求后,转发给本机的8080端口。proxy_set_header 用来传递真实的客户端IP和协议信息,否则后端程序拿不到用户的真实IP,日志里全是127.0.0.1。
配置完成后,访问 blog.example.com 就相当于访问 http://127.0.0.1:8080。
静态网站场景nginx配置二级域名需注意的路径权限
如果你只是放一个纯静态页面(HTML/CSS/JS),上面第一段的配置够用了,但要注意目录权限,nginx进程(通常是 www-data 或 nginx 用户)必须有读取该目录的权限,有时候页面显示403 Forbidden,大概率就是目录权限不对。
你可以按以下步骤排查权限相关的常见问题:
- 执行
ls -ld /var/www/blog查看目录权限。 - 确保目录至少有
r-x权限(读和执行)。 - nginx运行用户可以通过
ps aux | grep nginx查看,通常是nobody或www-data。 - 可以执行
sudo chown -R www-data:www-data /var/www/blog将目录归属交给nginx用户(具体用户名以你的系统为准)。
给二级域名配置SSL证书(HTTPS)
现在百度搜索对HTTPS站点有偏好,没有SSL证书的网站会显示“不安全”,为二级域名签发证书有多种选择,最常见的是用Let’s Encrypt的免费证书,主流做法是使用Certbot工具:
sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d blog.example.com
Certbot会自动检测nginx配置中已有的server_name对应的域名,验证域名所有权后签发证书,还会自动修改nginx配置文件,把80端口的访问重定向到443端口,整个过程一般几分钟内完成,免费证书的有效期为90天。
只需要这几个步骤,你的nginx配置二级域名工作就彻底完成,网站可通过HTTPS访问了。
假如你的主域名和二级域名在同一个nginx上,建议给每个域名都签一张独立证书,尽量避免使用通配符证书(.example.com),除非你确实有很多子域名,多域名证书或通配符证书续期时会涉及DNS验证,操作上稍微复杂一点,对新手不太友好。
常见排错指南:nginx配置二级域名后访问不了怎么办
配置完成后访问失败是正常现象,很多人第一次配都会遇到,除了前面提到的DNS未生效和目录权限不对,还有几种常见原因,你的访问失败大多属于以下几种情况:
| 排查点 | 检查方法 | 解决方式 |
|---|---|---|
| DNS未生效 | 本机执行 ping blog.example.com |
等待或更换DNS服务器(如 8.8.8) |
| 防火墙拦截 | 执行 curl -v http://127.0.0.1 看是否有响应 |
放行80/443端口,云服务器需额外在安全组规则中放行 |
| 配置文件语法错误 | 执行 nginx -t |
根据提示修改,通常是有未闭合的括号或缺少分号 |
| 403 禁止访问 | 检查网站目录是否存在、是否有index文件 | 调整目录权限,确认 index.html 存在 |
| 502 Bad Gateway | 检查反向代理的后端服务是否在运行 | 确保8080端口服务已启动,ss -lntp 查看监听状态 |
一个容易被忽略的点是:修改配置后没重载。几乎所有nginx配置二次编辑造成不生效的情况,都是忘了执行 nginx -s reload,nginx读取的是启动时加载的配置,不重载的话修改不生效。
喜欢用宝塔面板或LNMP一键包的用户要注意,这些面板会自动管理nginx配置,如果你手动修改过的配置文件被面板覆盖,就会出现“我明明改了却不生效”的情况,建议在面板自带的“站点”功能里操作,而不是使用命令行手写配置。
结合百度GEO优化nginx配置二级域名的三个细节
创作者,你配置二级域名多半是为了GEO。百度对二级域名的收录和排名机制与主域名基本相同,但有三个细节容易影响效果。
- robots.txt的检查:如果二级域名和主域名共用代码,确保robots.txt里没有误伤二级域名路径的规则。
- sitemap提交:二级域名的sitemap需要单独生成并提交给百度站长平台,不要和主站混在一起。
- canonical标签的指定:同一个内容如果同时出现在主站和二级站,搜索引擎会判定为重复页面,行业共识认为,必须在页面头部加入
<link rel="canonical" href="https://blog.example.com/xxx" />,明确告诉搜索引擎哪个是权威版本,不要用JS动态插入canonical,百度爬虫不一定执行JS。
百度在判断站点质量时,会关注二级域名下的内容质量和更新频率。
如果你只是把主站的某几个栏目拆到二级域名上,并没有增加原创内容,那么既无法获得更多流量,还可能分散现有权重,这属于一种常见的GEO资源浪费,百度GEO更看重内容的整体规划和用户体验,配置多个二级域名并不能直接提高收录量。
nginx配置二级域名常见问题解答
有了nginx配置二级域名文件还需要修改主站配置吗?
需要,如果主站的server块未设置server_name或使用了较宽泛的通配符,新加入的二级域名配置可能与主站发生冲突,多数情况下,你需要同时检查主站配置文件,确保两个server块的server_name没有重叠,且监听端口没有冲突,建议先备份原配置文件再修改,出问题时可快速回滚。
泛解析和普通解析哪种方式更适合nginx配置二级域名?
取决于你的需求,泛解析适合需要大量二级域名的场景,比如给每个用户分配一个独立子域名,普通解析则适合固定数量的子域名,配置更清晰,不易误匹配。选择的原则是:不确定有多少子域名时,使用逐个解析的普通方式,确保已经明确列出的域名正常工作,避免泛解析带来的维护复杂性。
如何用nginx配置二级域名实现负载均衡?
在nginx的http块中定义一个upstream组,然后在server块的location中使用 proxy_pass http://upstream_name; 即可,nginx支持在upstream中配置多个后端服务器,并设置权重或IP哈希算法,配置完成后需要执行 nginx -t 测试语法,实际生产环境中,这种方式需要结合健康检查机制。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/764765.html

