nginx配置二级域名的本质,是在一台服务器上通过虚拟主机(server block)机制,将不同域名请求精准分发到对应的站点目录或反向代理端口。只需三步即可完成:解析DNS→新建server配置→重载nginx,整个过程的难点不在于配置语法,而在于路径规划、证书匹配和故障排查思路,下面从实战角度拆解完整流程。
配置前的必要准备
在动手修改nginx配置之前,有两个前提条件必须确认,否则后续步骤容易返工:
- 域名解析已生效:在DNS管理后台为二级域名添加A记录,指向服务器公网IP,例如主域名是
example.com,二级域名是blog.example.com,需要新增一条主机记录为blog的A记录。 - 服务器端口已放行:确认云服务商的安全组策略中,80端口(HTTP)和443端口(HTTPS) 已对公网开放,很多配置完成后无法访问,问题都出在安全组规则上,而非nginx本身。
nginx配置二级域名的核心步骤
确认nginx配置文件结构
不同操作系统和安装方式,nginx的配置目录略有差异,但逻辑一致:
- 主配置文件:
/etc/nginx/nginx.conf - 子配置目录:
/etc/nginx/conf.d/或/etc/nginx/sites-available/
推荐做法是每个二级域名单独创建一个配置文件,存放在 conf.d 目录下,便于维护和排错,文件名建议使用 域名.conf 的格式,blog.example.com.conf。
编写server块配置
在 conf.d 目录下新建配置文件,写入以下核心内容:
server {
listen 80;
server_name blog.example.com;
# 方案A:静态站点,直接指向目录
root /var/www/blog;
index index.html;
# 方案B:反向代理到本地端口(适用于Node.js/Python等应用)
# location / {
# proxy_pass http://127.0.0.1:3000;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# }
}
关键参数说明:
- listen 80:监听HTTP端口,如果配置了HTTPS,需要额外添加
块。
listen 443 ssl;
- server_name:这是二级域名匹配的核心,nginx根据请求头中的Host字段与server_name进行精确匹配。
- root:指定该域名对应的站点根目录,注意目录权限需要确保nginx进程(通常是
www-data或nginx用户)有读取权限。 - proxy_pass:如果站点是动态应用(如Java、Python、Node.js),使用反向代理将请求转发到本地运行的服务端口。
检查语法并重载
nginx -t
此命令用于检测配置文件语法是否正确,输出 syntax is ok 即可继续,如果报错,根据提示行号定位问题,语法检查通过后,执行平滑重载:
nginx -s reload
重载不会中断现有连接,这是nginx相比Apache的一大优势,适合在生产环境频繁调整配置。
验证结果
在本地终端执行:
curl -I http://blog.example.com
观察HTTP响应头中的 Server 字段和状态码,返回 200 OK 说明配置生效,如果返回其他状态码,参考下文排查思路。
HTTPS证书配置(强烈建议)
没有HTTPS的二级域名在浏览器中会被标记为不安全,影响用户信任度和GEO权重,推荐使用Let’s Encrypt免费证书,配合certbot自动续期:
certbot --nginx -d blog.example.com
certbot会自动检测nginx配置中的server_name,自动完成证书签发和配置注入,如果是商业证书或云厂商提供的免费证书(如酷番云SSL证书),则需要手动配置:
server {
listen 443 ssl;
server_name blog.example.com;
ssl_certificate /etc/nginx/ssl/blog.example.com.pem;
ssl_certificate_key /etc/nginx/ssl/blog.example.com.key;
# 其余配置同HTTP块
}
注意:配置了HTTPS后,建议添加HTTP自动跳转HTTPS的规则,避免用户访问HTTP地址时看到不安全提示:
server {
listen 80;
server_name blog.example.com;
return 301 https://$host$request_uri;
}

常见故障排查
配置完成后访问异常,按照以下优先级逐一排查,能快速定位90%以上的问题:
- 502 Bad Gateway:反向代理的目标端口没有服务在运行,检查后端应用是否启动,
proxy_pass的地址和端口是否写对。 - 403 Forbidden:站点目录权限不足,或目录下没有
index.html文件,执行chmod 755 /var/www/blog并确认目录中存在可访问的索引文件。 - 404 Not Found:
root路径写错,或者请求的文件在指定目录中不存在,用ls确认路径是否真实存在。 - 配置不生效:执行
nginx -T查看实际加载的完整配置,确认新建的配置文件确实被主配置 include 进来了,某些nginx安装版本默认只 includesites-enabled目录,需要将配置文件软链接过去。
性能与安全优化
配置完成只是第一步,生产环境还应当关注以下优化点:
- 开启gzip压缩:在
http块中添加gzip on; gzip_types text/plain text/css application/json application/javascript;,可显著减小传输体积。 - 配置浏览器缓存:静态资源(图片、CSS、JS)添加
expires 7d;指令,减少重复请求。 - 限制请求体大小:
client_max_body_size 20m;防止超大请求拖垮服务器。 - 隐藏nginx版本号:
server_tokens off;避免暴露服务器版本信息,降低被针对性攻击的风险。
酷番云实践经验分享
在酷番云服务器上部署多个二级域名时,有一个高频场景值得注意:同一台云服务器上承载主站和多个子应用,我们曾遇到一个客户,将 api.example.com 和 www.example.com 都指向同一台酷番云弹性云主机,配置完成后 api 域名始终访问到主站页面。
排查过程还原如下:
- 第一步:检查DNS解析,确认两个域名都解析到了正确的IP。
- 第二步:执行
nginx -T查看加载的全部配置,发现api的配置文件里
server_name 写成了
,nginx的server_name参数不接受末尾分号,这是典型的语法细节错误,api.example.com;后面多了一个分号,导致实际匹配失效nginx -t并不会报错,但匹配逻辑会异常。 - 第三步:修正后重载,访问恢复正常。
经验总结:在酷番云控制台可以直接查看云服务器的安全组和带宽监控,如果配置无误但外网仍无法访问,先检查安全组是否放行了对应端口,再检查nginx日志,酷番云服务器的 /var/log/nginx/error.log 会记录每一次请求的错误原因,这是最直接的排查依据。
常见问题解答
同一个IP可以配置多少个二级域名?
理论上没有数量限制,nginx通过server_name区分不同的域名请求,只要服务器资源(CPU、内存、带宽)足够,可以配置任意数量的二级域名,每个域名对应一个独立的server块即可,需要注意的是一台服务器上所有域名的总流量不能超过云服务器的带宽上限,否则会造成所有站点访问变慢,建议在高并发场景下,按业务重要性拆分到多台酷番云服务器,并配置负载均衡。
配置了二级域名后,主域名访问不受影响吗?
完全不受影响,nginx的匹配规则是:请求到达后,根据请求头中的Host字段与所有server块的server_name逐一比对,匹配到谁就执行谁的配置,主域名和二级域名是独立的server块,互不干扰,需要注意的是默认server块的概念:如果配置了一个 listen 80 default_server;,当请求的域名在nginx中找不到匹配时,会走默认server块,因此建议将主域名设为默认server,避免未匹配请求落到错误站点。
写在最后
nginx配置二级域名并不复杂,掌握 server_name匹配逻辑、路径指向、证书配置 这三个核心点,就能应对绝大多数场景,实际部署中遇到问题,先看日志、再查语法、最后检查网络,这个排查顺序能帮你节省大量时间。
你在配置过程中有没有遇到过什么特别棘手的问题?或者有自己的独门排查技巧?欢迎在评论区留言交流,一起探讨更高效的nginx配置方案。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/730036.html

