在网站管理中,子域名的合理配置能够有效提升网站的组织结构和用户体验,Nginx作为一款高性能的Web服务器和反向代理服务器,其灵活的配置能力使得子域名管理变得简单高效,本文将详细介绍如何通过Nginx配置子域名,从基础设置到进阶优化,帮助读者全面掌握相关技能。

理解子域名与DNS解析
在配置Nginx之前,需明确子域名的工作原理,子域名是主域名的延伸,例如blog.example.com中的blog即为子域名,example.com是主域名,子域名的生效依赖于DNS解析,需在域名管理后台添加A记录或CNAME记录,将子域名指向服务器的IP地址,添加A记录blog.example.com,值为服务器公网IP,确保DNS生效后(通常需要几分钟到几小时),才能进行后续的Nginx配置。
Nginx配置子域名的核心步骤
创建网站目录与配置文件
为子域名创建独立的网站目录,用于存放网站文件,为blog.example.com创建目录/var/www/blog,并设置适当的文件权限:
sudo mkdir -p /var/www/blog sudo chown -R $USER:$USER /var/www/blog sudo chmod -R 755 /var/www/blog
在Nginx配置目录/etc/nginx/sites-available/下创建子域名配置文件,如blog.conf,使用文本编辑器打开并编写基础配置。
编写Nginx配置文件
一个基础的子域名配置文件包含server块,定义监听端口、根目录、域名及错误日志等关键信息,以blog.example.com为例,配置内容如下:
server {
listen 80;
server_name blog.example.com www.blog.example.com;
root /var/www/blog;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
listen 80:监听HTTP默认端口;server_name:指定子域名及带www的变体;root:指向网站根目录;index:默认首页文件;location:处理请求路径,try_files确保文件存在性。
启用配置文件并测试
配置文件创建后,需通过符号链接将其激活到sites-enabled目录:
sudo ln -s /etc/nginx/sites-available/blog.conf /etc/nginx/sites-enabled/
使用sudo nginx -t测试配置语法是否正确,若无错误则执行sudo systemctl reload nginx重新加载Nginx配置,使新配置生效。
多子域名与泛域名配置
当需要管理多个子域名时,可通过重复上述步骤为每个子域名创建独立配置文件,若子域名结构相似(如api.example.com、admin.example.com),可使用通配符简化配置:

server {
listen 80;
server_name *.example.com;
root /var/www/$host;
# 其他配置...
}
其中$host变量会动态匹配请求的域名,实现多子域名共享配置逻辑,对于泛域名(如*.example.com),需在DNS解析中添加通配符A记录,并确保Nginx配置支持通配符server_name。
HTTPS配置与安全优化
为子域名启用HTTPS可提升安全性,可通过Let’s Encrypt免费获取SSL证书,使用certbot工具自动配置:
sudo certbot --nginx -d blog.example.com -d www.blog.example.com
执行后,certbot会自动修改Nginx配置,添加443端口监听和SSL证书路径,配置示例如下:
server {
listen 443 ssl;
server_name blog.example.com www.blog.example.com;
root /var/www/blog;
ssl_certificate /etc/letsencrypt/live/blog.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/blog.example.com/privkey.pem;
# 其他配置...
}
建议在HTTP配置中添加301重定向,强制跳转HTTPS:
server {
listen 80;
server_name blog.example.com www.blog.example.com;
return 301 https://$host$request_uri;
}
可通过添加add_header指令增强安全性,例如启用HSTS、CSP等:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; add_header X-Frame-Options "SAMEORIGIN" always;
反向代理与负载均衡
若子域名对应的应用服务运行在其他端口或服务器,可通过Nginx的反向代理功能实现请求转发,将api.example.com的请求代理到本地8080端口:
server {
listen 80;
server_name api.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;
}
}
对于多台服务器的负载均衡场景,可定义upstream服务器池,并配置负载均衡策略(如轮询、加权轮询):

upstream backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080 backup;
}
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://backend;
}
}
日志管理与性能优化
子域名的访问日志默认存放于/var/log/nginx/目录,可通过access_log和error_log指令自定义日志路径和格式:
access_log /var/log/nginx/blog.access.log combined; error_log /var/log/nginx/blog.error.log warn;
为提升性能,可启用Gzip压缩、缓存静态资源(如图片、CSS、JS):
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 7d;
add_header Cache-Control "public, no-transform";
}
定期分析日志文件(如使用awk、grep或ELK工具),可及时发现异常访问和性能瓶颈。
通过以上步骤,即可完成Nginx子域名的完整配置,从基础搭建到安全优化、反向代理和性能调优,满足不同场景下的需求,合理的子域名配置不仅能提升网站的可维护性,还能为用户提供更精准、高效的服务体验。















