开发小技巧: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为例,配置示例:

  1. 记录类型:A
  2. 主机记录:api
  3. 记录值:192.0.2.123
  4. TTL10分钟

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工具自动申请证书:

  1. sudo apt install certbot python3-certbot-nginx
  2. sudo certbot --nginx -d api.example.com

三、Nginx配置核心步骤

1. 创建配置文件

/etc/nginx/conf.d/目录下新建api.example.com.conf文件,采用模块化设计便于维护。

2. 基础配置模板

  1. server {
  2. listen 80;
  3. server_name api.example.com;
  4. location / {
  5. proxy_pass http://localhost:3000; # 后端服务地址
  6. proxy_set_header Host $host;
  7. proxy_set_header X-Real-IP $remote_addr;
  8. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  9. }
  10. # 日志配置
  11. access_log /var/log/nginx/api.access.log main;
  12. error_log /var/log/nginx/api.error.log warn;
  13. }

3. HTTPS强制跳转配置

  1. server {
  2. listen 443 ssl;
  3. server_name api.example.com;
  4. ssl_certificate /etc/letsencrypt/live/api.example.com/fullchain.pem;
  5. ssl_certificate_key /etc/letsencrypt/live/api.example.com/privkey.pem;
  6. ssl_protocols TLSv1.2 TLSv1.3;
  7. ssl_ciphers HIGH:!aNULL:!MD5;
  8. location / {
  9. # 同上proxy配置
  10. }
  11. }
  12. server {
  13. listen 80;
  14. server_name api.example.com;
  15. return 301 https://$host$request_uri;
  16. }

4. 性能优化配置

  1. proxy_buffering on;
  2. proxy_buffer_size 128k;
  3. proxy_buffers 4 256k;
  4. proxy_busy_buffers_size 256k;
  5. # 启用Gzip压缩
  6. gzip on;
  7. gzip_types text/plain application/json;
  8. 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块中添加:

  1. add_header 'Access-Control-Allow-Origin' '*';
  2. add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
  3. add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';

五、进阶配置技巧

1. 基于路径的路由

  1. server {
  2. server_name example.com;
  3. location /api/ {
  4. proxy_pass http://backend-api;
  5. }
  6. location /static/ {
  7. alias /var/www/static/;
  8. expires 30d;
  9. }
  10. }

2. 多二级域名共用证书

使用通配符证书(*.example.com)简化管理:

  1. ssl_certificate /path/to/wildcard.crt;
  2. ssl_certificate_key /path/to/wildcard.key;

3. 动态证书加载

配合Certbot的webroot验证方式,实现证书自动续期:

  1. 0 3 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"

六、最佳实践建议

  1. 配置备份:修改前备份nginx.conf和站点配置文件
  2. 语法检查:每次修改后执行nginx -t验证配置
  3. 灰度发布:先在内网环境测试配置
  4. 监控告警:设置Nginx状态监控(stub_status模块)
  5. 文档维护:记录每个二级域名的用途和负责人

通过系统化的二级域名配置,开发者可以构建出更清晰、更安全的Web架构。Nginx的灵活配置能力配合现代DevOps实践,能让域名管理成为提升系统质量的利器。建议定期审查域名配置,及时淘汰不再使用的子域名,保持架构的简洁性。