Nginx二级域名配置全攻略:从原理到实践
在Web服务架构中,二级域名作为一级域名的子分类,常用于区分不同业务模块或服务(如api.example.com、blog.example.com)。Nginx作为高性能反向代理服务器,其二级域名配置涉及DNS解析、虚拟主机设置、SSL证书管理等多个环节。本文将从基础原理出发,逐步拆解配置流程,并提供实战案例与问题排查指南。
一、二级域名配置的核心原理
1.1 DNS解析:域名到IP的映射
二级域名的生效依赖于DNS记录的配置。以sub.example.com为例,需在域名注册商或DNS服务商处添加一条CNAME记录(指向主域名)或A记录(直接指向服务器IP)。例如:
类型: CNAME主机: sub值: example.comTTL: 3600
关键点:
- CNAME记录允许二级域名继承主域名的DNS设置,适合动态IP场景;
- A记录直接绑定IP,适合静态IP且需独立管理的场景;
- TTL(生存时间)决定DNS缓存时间,调试时可设为较短值(如300秒)。
1.2 Nginx虚拟主机:多域名分离的核心
Nginx通过server块实现基于域名的虚拟主机,每个二级域名需配置独立的server块。配置文件通常位于/etc/nginx/conf.d/或/etc/nginx/sites-available/,示例如下:
server {listen 80;server_name sub.example.com;root /var/www/sub;index index.html;location / {try_files $uri $uri/ =404;}}
关键参数:
listen 80:监听HTTP端口;server_name:匹配请求的域名,支持通配符(如*.example.com)和正则表达式;root:指定网站根目录,需确保Nginx用户(如www-data)有读取权限。
二、Nginx二级域名配置实战
2.1 基础HTTP配置
步骤1:创建网站目录并上传文件
sudo mkdir -p /var/www/subsudo chown -R www-data:www-data /var/www/subecho "<h1>Subdomain Test</h1>" > /var/www/sub/index.html
步骤2:编写Nginx配置
server {listen 80;server_name sub.example.com;root /var/www/sub;index index.html;# 防止目录列表显示autoindex off;# 日志配置(可选)access_log /var/log/nginx/sub.access.log;error_log /var/log/nginx/sub.error.log;}
步骤3:测试并重启Nginx
sudo nginx -t # 检查语法sudo systemctl restart nginx
2.2 HTTPS配置(Let’s Encrypt证书)
步骤1:安装Certbot工具
sudo apt install certbot python3-certbot-nginx
步骤2:自动获取证书并配置
sudo certbot --nginx -d sub.example.com
Certbot会自动修改Nginx配置,添加SSL证书和强制HTTPS重定向。生成的配置类似:
server {listen 443 ssl;server_name sub.example.com;root /var/www/sub;index index.html;ssl_certificate /etc/letsencrypt/live/sub.example.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/sub.example.com/privkey.pem;include /etc/letsencrypt/options-ssl-nginx.conf;ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;}server {listen 80;server_name sub.example.com;return 301 https://$host$request_uri;}
2.3 动态子域名配置(通配符证书)
若需支持*.example.com,需获取通配符SSL证书:
sudo certbot --nginx -d example.com -d *.example.com
Nginx配置需调整server_name为通配符:
server {listen 443 ssl;server_name ~^(?<subdomain>.+)\.example\.com$;root /var/www/$subdomain;# ...其他配置}
注意:通配符证书仅保护一级子域名(如a.example.com),不保护多级子域名(如a.b.example.com)。
三、常见问题与解决方案
3.1 域名不生效
- 现象:访问二级域名返回默认页面或404。
- 排查步骤:
- 检查DNS记录是否生效:
dig sub.example.com或nslookup sub.example.com; - 确认Nginx配置中
server_name与DNS记录一致; - 检查防火墙是否放行80/443端口:
sudo ufw status。
- 检查DNS记录是否生效:
3.2 SSL证书错误
- 现象:浏览器提示“证书不受信任”或“域名不匹配”。
- 解决方案:
- 确保证书包含所有需要的域名(使用
certbot certificates查看); - 避免手动编辑证书文件,始终通过Certbot等工具管理;
- 检查系统时间是否正确(证书有效期依赖系统时钟)。
- 确保证书包含所有需要的域名(使用
3.3 性能优化建议
- 静态资源缓存:为CSS/JS文件添加缓存头:
location ~* \.(css|js|png)$ {expires 1y;add_header Cache-Control "public";}
- Gzip压缩:启用文本压缩:
gzip on;gzip_types text/plain text/css application/json application/javascript text/xml;
四、进阶配置技巧
4.1 基于域名的负载均衡
若二级域名需指向多个后端服务器,可在server块内配置upstream:
upstream sub_backend {server 10.0.0.1:8080;server 10.0.0.2:8080;}server {listen 80;server_name sub.example.com;location / {proxy_pass http://sub_backend;proxy_set_header Host $host;}}
4.2 限制访问来源
通过allow/deny指令限制二级域名的访问IP:
server {listen 80;server_name api.example.com;allow 192.168.1.0/24;deny all;# ...其他配置}
五、总结与最佳实践
- DNS与Nginx配置同步:修改DNS后需等待TTL过期,或临时降低TTL值加速生效;
- 证书自动化管理:使用Certbot的
--deploy-hook实现证书续期后自动重启Nginx; - 配置版本控制:将Nginx配置纳入Git管理,便于回滚与协作;
- 监控与告警:通过Prometheus+Grafana监控各二级域名的访问量与错误率。
通过以上步骤,开发者可系统掌握Nginx二级域名的配置方法,从基础部署到高级优化均能高效完成。实际场景中,建议结合CI/CD流水线实现配置的自动化测试与部署,进一步提升运维效率。