Nginx配置二级域名全攻略:从基础到进阶开发技巧
Nginx配置二级域名全攻略:从基础到进阶开发技巧
一、二级域名配置的核心价值
在Web开发中,二级域名(如api.example.com、m.example.com)是构建模块化服务架构的重要手段。通过Nginx配置二级域名,开发者可以实现:
- 服务隔离:将API服务、移动端适配、管理后台等业务拆分到不同子域名
- 负载均衡:为不同子域名配置独立的负载均衡策略
- 证书管理:为HTTPS服务提供更灵活的SSL证书配置
- 路径优化:简化URL结构,提升SEO效果
典型应用场景包括:
- 微服务架构中的服务发现
- 前后端分离项目的接口管理
- 多终端适配(PC/Mobile/H5)
- 灰度发布环境的流量控制
二、配置前的准备工作
1. DNS解析设置
首先需要在域名注册商处添加CNAME记录:
子域名 类型 记录值 TTLapi CNAME server.example.com 3600
技巧:建议将TTL设置为300-600秒,便于快速调整
2. 服务器环境检查
确认已安装Nginx并验证版本:
nginx -v# 推荐使用1.18.0+版本,支持更完善的HTTP/2特性
3. 证书准备(HTTPS场景)
使用Let’s Encrypt免费证书:
sudo apt install certbot python3-certbot-nginxsudo certbot --nginx -d api.example.com
或手动准备证书文件:
/etc/nginx/certs/├── api.example.com.crt└── api.example.com.key
三、Nginx核心配置详解
1. 基础配置模板
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;}}
关键参数说明:
listen:监听端口(80/443)server_name:精确匹配二级域名proxy_pass:后端服务地址
2. HTTPS增强配置
server {listen 443 ssl;server_name api.example.com;ssl_certificate /etc/nginx/certs/api.example.com.crt;ssl_certificate_key /etc/nginx/certs/api.example.com.key;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;location / {# 配置同上...}}
安全建议:禁用SSLv3和TLSv1.0,推荐使用Mozilla SSL配置生成器
3. 高级路由配置
路径重写示例
location /v1/ {rewrite ^/v1/(.*) /$1 break;proxy_pass http://api-service;}
多后端负载均衡
upstream api-cluster {server 10.0.0.1:3000 weight=3;server 10.0.0.2:3000;server 10.0.0.3:3000 backup;}server {# ...location / {proxy_pass http://api-cluster;}}
四、常见问题解决方案
1. 域名不生效问题排查
- 检查DNS解析是否生效:
dig api.example.com
- 验证Nginx配置语法:
nginx -t
- 检查防火墙设置:
sudo ufw status
2. HTTPS证书错误处理
- NET::ERR_CERT_COMMON_NAME_INVALID:
确认证书的CN或SAN字段包含二级域名 - SSL_ERROR_BAD_CERT_DOMAIN:
重新生成证书时添加-d api.example.com参数
3. 502 Bad Gateway错误
- 检查后端服务是否运行:
curl http://localhost:3000
- 调整Nginx超时设置:
proxy_connect_timeout 60s;proxy_read_timeout 300s;
五、进阶优化技巧
1. HTTP/2配置
server {listen 443 ssl http2;# ...其他配置...}
性能提升:HTTP/2可减少TCP连接数,提升多资源加载速度
2. 动态证书加载
使用ssl_certificate_by_lua_block实现多域名证书自动选择(需OpenResty)
3. 监控与日志
server {access_log /var/log/nginx/api.access.log;error_log /var/log/nginx/api.error.log warn;location / {# 添加健康检查端点if ($request_method = HEAD) {return 200;}}}
六、最佳实践建议
配置管理:
- 使用Git管理Nginx配置
- 按环境区分配置文件(dev/stage/prod)
性能优化:
# 启用gzip压缩gzip on;gzip_types text/plain application/json;# 启用静态资源缓存location ~* \.(jpg|png|css|js)$ {expires 30d;add_header Cache-Control "public";}
安全加固:
# 禁止非法HTTP方法if ($request_method !~ ^(GET|HEAD|POST)$ ) {return 405;}# 防止点击劫持add_header X-Frame-Options "SAMEORIGIN";
七、完整配置示例
# 主配置文件 /etc/nginx/conf.d/api.confserver {listen 80;server_name api.example.com;return 301 https://$host$request_uri;}server {listen 443 ssl http2;server_name api.example.com;ssl_certificate /etc/nginx/certs/api.example.com.crt;ssl_certificate_key /etc/nginx/certs/api.example.com.key;ssl_session_timeout 1d;ssl_session_cache shared:SSL:50m;ssl_session_tickets off;access_log /var/log/nginx/api.access.log main;error_log /var/log/nginx/api.error.log warn;location / {proxy_pass http://api-backend;proxy_http_version 1.1;proxy_set_header Connection "";proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;client_max_body_size 10m;proxy_read_timeout 300s;}# 健康检查端点location = /health {return 200 "OK";access_log off;}}upstream api-backend {server 10.0.0.1:3000 max_fails=3 fail_timeout=30s;server 10.0.0.2:3000 backup;keepalive 32;}
通过系统化的配置管理,Nginx可以高效地支撑复杂的二级域名架构。建议开发者定期审查配置,结合监控工具(如Prometheus+Grafana)持续优化服务性能。对于大型项目,可考虑使用Ansible等自动化工具实现配置的版本化部署。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权请联系我们,一经查实立即删除!