Nginx中配置子域名本质是基于域名的虚拟主机,只需在server_name中明确写入子域名(如blog.example.com),依靠Host头精确匹配路由;支持多值、通配符(*.example.com)及独立server块隔离根目录与日志,需确保DNS解析到位并为HTTPS配置对应证书。

子域名配置的关键点
子域名不是特殊类型,而是普通域名的一种形式。Nginx 不区分“主域”或“子域”,只认你写的 server_name 值是否与请求中的 Host 头完全匹配(支持通配符和多值)。
-
精确匹配优先:如
server_name api.example.com;只响应 Host 为api.example.com的请求 -
支持多个域名/子域名共存:如
server_name www.example.com example.com api.example.com; -
可用通配符:如
server_name *.example.com;匹配任意一级子域名(但不匹配www.api.example.com这类二级子域) - 注意 DNS 解析:子域名必须已解析到该服务器 IP,否则用户根本发不到 Nginx
典型子域名配置示例
假设你要托管 blog.example.com 和 shop.example.com 两个子域名,各自独立站点:
server {
listen 80;
server_name blog.example.com;
root /var/www/blog.example.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/blog.access.log;
}
server {
listen 80;
server_name shop.example.com;
root /var/www/shop.example.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/shop.access.log;
}
每个 server 块互不影响,可分别设置根目录、日志、PHP 处理等。
常见注意事项
- 不要遗漏 listen [::]:80:IPv6 支持建议加上,避免部分用户访问失败
-
避免 server_name 冲突:两个 server 块不能有完全相同的
server_name,否则后加载的配置会覆盖前一个 -
默认站点兜底:可设一个
server { listen 80 default_server; server_name _; ... }处理未匹配的请求(比如直接用 IP 访问) -
HTTPS 子域名要单独配证书:Let’s Encrypt 等工具支持通配符证书(
*.example.com),但需在配置中显式启用 SSL 并指向对应 cert/key
推荐实践:用独立 conf 文件管理
把每个子域名配置单独存为文件,比如:/etc/nginx/conf.d/blog.example.com.conf/etc/nginx/conf.d/shop.example.com.conf
并在主配置中确保有 include /etc/nginx/conf.d/*.conf;。这样便于增删、权限控制和版本管理。


















