在互联网架构中,域名系统是连接用户与服务器的重要桥梁,而 Nginx 作为高性能的 Web 服务器和反向代理服务器,在域名的配置与管理中扮演着核心角色,无论是主域名的直接访问,还是子域名的功能扩展,Nginx 都能通过灵活的配置实现高效、稳定的请求分发与处理,本文将围绕 Nginx 对主域名与子域名的配置逻辑、应用场景及实践技巧展开说明,帮助读者构建清晰的多域名管理体系。

主域名与子域名的概念及关系
主域名(Domain Name)是网站的核心标识,example.com,通常用于承载网站的主要内容和品牌形象,子域名(Subdomain)则是主域名的延伸,通过 符号划分层级,如 blog.example.com、api.example.com 等,子域名可以独立指向不同的服务器或服务,实现功能的模块化管理,从 DNS 角度看,主域名与子域名共享同一个顶级域(如 .com),但在 Nginx 配置中,二者可通过 server_name 指令进行独立区分,从而实现差异化的请求处理逻辑。
Nginx 配置主域名与子域名的基础逻辑
Nginx 通过 server 块定义不同域名的处理规则,每个 server 块通过 server_name 指令绑定域名,当用户发起请求时,Nginx 会根据请求头中的 Host 字段匹配对应的 server 块,若未匹配到则按顺序使用第一个 server 块(默认服务器)。
主域名配置示例
以下是一个主域名 example.com 的基础配置,指向本地 /var/www/html 目录:
server {
listen 80;
server_name example.com www.example.com; # 同时绑定主域名及其www子域名
root /var/www/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
该配置中,server_name 同时监听 example.com 和 www.example.com,确保用户无论输入哪个地址均可访问主站点内容。
子域名配置示例
假设需要为博客服务配置子域名 blog.example.com,指向独立的目录 /var/www/blog:

server {
listen 80;
server_name blog.example.com;
root /var/www/blog;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
通过 server_name 单独绑定子域名,并配置对应的 root 目录和 PHP 解析规则,实现子域名的独立功能。
主域名与子域名的进阶配置场景
基于端口的差异化服务
若主域名与子域名需要共享 IP 但通过端口区分服务(如主域名 80 端口提供 Web 服务,子域名 8080 端口提供 API 服务),可通过 listen 指令实现:
# 主域名服务(80端口)
server {
listen 80;
server_name example.com;
root /var/www/main;
location / { ... }
}
# 子域名API服务(8080端口)
server {
listen 8080;
server_name api.example.com;
location / { ... }
}
反向代理实现子域名服务分离
当子域名需要指向不同的后端服务(如 Node.js 应用、Java 服务等),可通过 Nginx 反向代理实现请求转发:
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://127.0.0.1:3000; # 代理至本地Node.js服务
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
HTTPS 证书配置与 HTTPS 强制跳转
通过 Let’s Encrypt 等工具获取 SSL 证书后,可为主域名与子域名启用 HTTPS,并强制 HTTP 请求跳转至 HTTPS:
# 主域名HTTPS配置
server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
root /var/www/html;
location / { ... }
}
# HTTP强制跳转HTTPS
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
子域名的 HTTPS 配置同理,需为每个子域名单独配置证书或使用通配符证书(如 *.example.com)。

主域名与子域名配置的常见问题与优化
域名重定向与泛域名配置
- 301重定向:若需将
www.example.com永久重定向至example.com,可在主域名配置中添加:if ($host = www.example.com) { return 301 https://example.com$request_uri; } - 泛域名配置:通过
server_name *.example.com可匹配所有子域名,适用于动态子域名场景(如多租户系统)。
负载均衡与高可用
当子域名服务需要高并发支持时,可通过 Nginx 的 upstream 模块配置负载均衡:
upstream backend_api {
server 192.168.1.10:8000;
server 192.168.1.11:8000;
server 192.168.1.12:8000 backup; # 备用服务器
}
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://backend_api;
}
}
日志管理与访问控制
- 独立日志:为不同域名配置独立的访问日志和错误日志,便于问题排查:
access_log /var/log/nginx/example.com.access.log; error_log /var/log/nginx/example.com.error.log;
- IP访问限制:通过
allow/deny指令限制特定子域名的访问 IP:location /admin { allow 192.168.1.0/24; deny all; }
Nginx 对主域名与子域名的管理,核心在于通过 server_name 精准匹配请求,并结合 listen、location、proxy_pass 等指令实现灵活的流量分发,无论是基础的静态站点部署,还是复杂的多服务架构,Nginx 都能通过简洁的配置满足需求,在实际应用中,需结合 HTTPS 证书、负载均衡、日志监控等手段,确保域名服务的安全性、稳定性与可扩展性,从而为用户提供高效、可靠的访问体验,通过合理规划主域名与子域名的层级关系,企业可构建清晰、易维护的互联网服务架构,支撑业务的持续发展。



















