开发小技巧:Nginx配置二级域名全攻略
一、为什么需要配置二级域名?
在Web开发中,二级域名(如api.example.com、m.example.com)是实现服务拆分和功能隔离的重要手段。通过配置二级域名,开发者可以将API服务、移动端适配、静态资源等不同功能模块部署到独立子域名下,既提升系统可维护性,又能通过Cookie隔离增强安全性。
以典型电商系统为例,主域名(www.example.com)承载商品展示,二级域名api.example.com处理订单接口,static.example.com托管静态资源。这种架构使前后端分离更彻底,缓存策略更灵活,同时便于实施CDN加速和负载均衡。
Nginx作为高性能反向代理服务器,其配置二级域名的核心优势在于:支持基于域名的虚拟主机配置、可自定义路由规则、集成SSL证书管理方便。相比Apache,Nginx的配置文件更简洁,处理高并发能力更强,特别适合现代云原生架构。
二、配置前的准备工作
1. 域名解析设置
登录域名注册商控制台,在DNS管理界面添加两条A记录:
- 主域名(@):指向服务器公网IP
- 二级域名(如api):同样指向服务器IP
以阿里云DNS为例,配置示例:
记录类型:A主机记录:api记录值:192.0.2.123TTL:10分钟
2. 服务器环境检查
确保服务器已安装Nginx最新稳定版(建议1.20+),通过nginx -v验证。检查防火墙是否开放80/443端口,使用netstat -tuln | grep :80确认。
3. SSL证书准备(可选)
如需HTTPS支持,需准备:
- 域名型DV证书(免费方案可选Let’s Encrypt)
- 证书文件(.crt)和私钥文件(.key)
- 证书链文件(.ca-bundle,部分CA需要)
推荐使用Certbot工具自动申请证书:
sudo apt install certbot python3-certbot-nginxsudo certbot --nginx -d api.example.com
三、Nginx配置核心步骤
1. 创建配置文件
在/etc/nginx/conf.d/目录下新建api.example.com.conf文件,采用模块化设计便于维护。
2. 基础配置模板
server {listen 80;server_name api.example.com;location / {proxy_pass http://localhost:3000; # 后端服务地址proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}# 日志配置access_log /var/log/nginx/api.access.log main;error_log /var/log/nginx/api.error.log warn;}
3. HTTPS强制跳转配置
server {listen 443 ssl;server_name api.example.com;ssl_certificate /etc/letsencrypt/live/api.example.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/api.example.com/privkey.pem;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;location / {# 同上proxy配置}}server {listen 80;server_name api.example.com;return 301 https://$host$request_uri;}
4. 性能优化配置
proxy_buffering on;proxy_buffer_size 128k;proxy_buffers 4 256k;proxy_busy_buffers_size 256k;# 启用Gzip压缩gzip on;gzip_types text/plain application/json;gzip_min_length 1k;
四、常见问题解决方案
1. 配置后访问404错误
- 检查
server_name是否与DNS解析一致 - 确认后端服务是否正常运行(
curl http://localhost:3000) - 查看Nginx错误日志定位具体原因
2. SSL证书验证失败
- 确认证书路径是否正确
- 检查证书是否过期(
openssl x509 -noout -dates -in cert.pem) - 验证证书链是否完整(需包含中间证书)
3. 跨域问题处理
在location块中添加:
add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
五、进阶配置技巧
1. 基于路径的路由
server {server_name example.com;location /api/ {proxy_pass http://backend-api;}location /static/ {alias /var/www/static/;expires 30d;}}
2. 多二级域名共用证书
使用通配符证书(*.example.com)简化管理:
ssl_certificate /path/to/wildcard.crt;ssl_certificate_key /path/to/wildcard.key;
3. 动态证书加载
配合Certbot的webroot验证方式,实现证书自动续期:
0 3 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"
六、最佳实践建议
- 配置备份:修改前备份
nginx.conf和站点配置文件 - 语法检查:每次修改后执行
nginx -t验证配置 - 灰度发布:先在内网环境测试配置
- 监控告警:设置Nginx状态监控(stub_status模块)
- 文档维护:记录每个二级域名的用途和负责人
通过系统化的二级域名配置,开发者可以构建出更清晰、更安全的Web架构。Nginx的灵活配置能力配合现代DevOps实践,能让域名管理成为提升系统质量的利器。建议定期审查域名配置,及时淘汰不再使用的子域名,保持架构的简洁性。