一、二级域名配置的背景与意义
在互联网应用中,二级域名(如sub.example.com)常用于区分不同业务模块或服务,例如将api.example.com作为API接口的独立域名,blog.example.com作为博客系统的入口。这种结构不仅提升了URL的可读性,还便于后续的负载均衡、权限控制和安全隔离。Nginx作为高性能的Web服务器,支持通过配置文件灵活管理多个二级域名,是实现这一目标的核心工具。
二、配置前的准备工作
1. DNS解析配置
在配置Nginx之前,需确保二级域名已正确解析到服务器IP。以阿里云DNS为例:
- 登录DNS管理控制台,添加
sub.example.com的A记录,指向服务器公网IP。 - 等待DNS生效(通常5-10分钟),通过
ping sub.example.com验证解析是否成功。
2. 服务器环境准备
- 安装Nginx:
sudo apt install nginx(Ubuntu)或yum install nginx(CentOS)。 - 确认Nginx版本:
nginx -v,建议使用1.18.0及以上版本以支持最新特性。
3. 证书准备(HTTPS场景)
若需启用HTTPS,需为二级域名申请SSL证书:
- 使用Let’s Encrypt免费证书:
sudo certbot --nginx -d sub.example.com。 - 或购买商业证书(如DigiCert),下载证书文件(
.crt和.key)并上传至服务器。
三、Nginx配置文件编写
Nginx通过server块管理不同域名的配置,二级域名的配置通常位于/etc/nginx/conf.d/或/etc/nginx/sites-available/目录下。
1. 基础HTTP配置示例
server {listen 80;server_name sub.example.com; # 指定二级域名location / {root /var/www/sub.example.com; # 根目录index index.html;try_files $uri $uri/ =404;}# 日志配置access_log /var/log/nginx/sub.example.com.access.log;error_log /var/log/nginx/sub.example.com.error.log;}
关键点:
server_name必须与DNS解析的二级域名完全一致。root指定静态文件的存放路径,需确保Nginx用户(如www-data)有读取权限。
2. HTTPS配置示例
server {listen 443 ssl;server_name sub.example.com;ssl_certificate /etc/letsencrypt/live/sub.example.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/sub.example.com/privkey.pem;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;location / {proxy_pass http://localhost:3000; # 转发至后端服务proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}}# HTTP自动跳转HTTPSserver {listen 80;server_name sub.example.com;return 301 https://$host$request_uri;}
关键点:
ssl_certificate和ssl_certificate_key需指向正确的证书文件。proxy_pass用于将请求转发至后端应用(如Node.js、Python等)。- 强制HTTPS可提升安全性,避免中间人攻击。
3. 多二级域名共存配置
若需管理多个二级域名,可在同一配置文件中添加多个server块:
server {listen 80;server_name api.example.com;# API服务配置...}server {listen 80;server_name blog.example.com;# 博客服务配置...}
优化建议:
- 使用
include指令拆分配置,例如include /etc/nginx/conf.d/*.conf;。 - 通过
upstream模块实现负载均衡(如多台API服务器)。
四、常见问题与解决方案
1. 配置未生效
- 现象:访问二级域名返回默认页面或404。
- 排查步骤:
- 检查Nginx配置语法:
sudo nginx -t。 - 确认
server_name与DNS解析一致。 - 查看错误日志:
tail -f /var/log/nginx/error.log。 - 重启Nginx:
sudo systemctl restart nginx。
- 检查Nginx配置语法:
2. HTTPS证书错误
- 现象:浏览器提示“证书不受信任”或“域名不匹配”。
- 解决方案:
- 确保证书包含二级域名(如
sub.example.com而非*.example.com)。 - 使用
certbot renew更新过期证书。 - 检查证书链是否完整(需包含中间证书)。
- 确保证书包含二级域名(如
3. 性能优化建议
- 静态资源缓存:
location ~* \.(jpg|jpeg|png|css|js)$ {expires 30d;add_header Cache-Control "public";}
- Gzip压缩:
gzip on;gzip_types text/plain text/css application/json application/javascript;
- 连接复用:
keepalive_timeout 75s;keepalive_requests 100;
五、进阶配置技巧
1. 基于路径的路由
若需通过路径区分服务(如example.com/api和example.com/blog),可使用location指令:
server {listen 80;server_name example.com;location /api {proxy_pass http://localhost:3000;}location /blog {root /var/www/blog;try_files $uri $uri/ =404;}}
2. 动态域名解析
结合resolver指令实现动态DNS解析(适用于容器化环境):
resolver 8.8.8.8 valid=30s;set $backend "api.example.com";server {listen 80;server_name sub.example.com;location / {proxy_pass http://$backend;}}
六、总结与最佳实践
- 模块化配置:将不同二级域名的配置拆分为独立文件,便于维护。
- 自动化工具:使用Ansible或Terraform批量管理Nginx配置。
- 监控告警:通过Prometheus+Grafana监控Nginx的请求量、错误率等指标。
- 安全加固:
- 禁用危险方法(如
TRACE):if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 405; } - 限制请求速率:
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
- 禁用危险方法(如
通过以上步骤,开发者可以高效完成Nginx二级域名的配置,并根据实际需求灵活扩展功能。