动静分离
动静分离是优化系统性能的重要架构模式,通过将静态资源和动态请求分离处理,可以显著提升系统性能和用户体验。
📋 动静分离架构
🎯 动静分离的优势
1. 性能优势
- 静态资源缓存:静态资源可以长期缓存,减少服务器压力
- CDN加速:静态资源通过CDN分发,提升访问速度
- 负载分离:静态资源和动态请求分离,减轻应用服务器压力
2. 运维优势
- 独立扩展:静态资源和动态服务可以独立扩展
- 故障隔离:静态资源故障不影响动态服务
- 成本优化:静态资源可以使用更便宜的存储服务
3. 架构优势
- 职责清晰:静态资源和动态服务职责分离
- 易于优化:可以针对不同类型资源进行优化
- 灵活部署:静态资源和动态服务可以灵活部署
🎯 Nginx 动静分离配置
1. 基础配置
nginx
server {
listen 80;
server_name example.com;
# 静态资源
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2)$ {
root /var/www/static;
expires 30d;
add_header Cache-Control "public, immutable";
access_log off;
}
# 动态请求
location / {
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}2. 高级配置
nginx
server {
listen 80;
server_name example.com;
# 静态资源目录
location /static/ {
alias /var/www/static/;
expires 30d;
add_header Cache-Control "public, immutable";
access_log off;
gzip on;
gzip_types text/css application/javascript image/svg+xml;
}
# 图片资源
location ~* \.(jpg|jpeg|png|gif|webp|ico)$ {
root /var/www/images;
expires 365d;
add_header Cache-Control "public, immutable";
access_log off;
}
# CSS/JS资源
location ~* \.(css|js)$ {
root /var/www/assets;
expires 7d;
add_header Cache-Control "public, must-revalidate";
gzip on;
gzip_comp_level 6;
}
# 字体资源
location ~* \.(woff|woff2|ttf|eot)$ {
root /var/www/fonts;
expires 365d;
add_header Cache-Control "public, immutable";
add_header Access-Control-Allow-Origin *;
}
# 动态请求
location /api/ {
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 超时设置
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
# 根路径处理
location / {
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}3. CDN 集成
CDN配置示例:
📋 动静分离最佳实践
1. 静态资源处理
资源分类:
- HTML/CSS/JS:部署到静态服务器或CDN
- 图片资源:使用CDN加速,启用图片压缩
- 字体资源:设置长期缓存,配置CORS
- 视频资源:使用专用视频CDN
缓存策略:
| 资源类型 | 缓存时间 | 缓存策略 |
|---|---|---|
| HTML | 不缓存 | Cache-Control: no-cache |
| CSS/JS | 7天 | Cache-Control: public, must-revalidate |
| 图片 | 365天 | Cache-Control: public, immutable |
| 字体 | 365天 | Cache-Control: public, immutable |
2. 动态请求处理
请求转发:
- API请求:转发到后端应用服务器
- SSR请求:转发到Node.js服务器
- WebSocket:使用专门的WebSocket代理
负载均衡:
nginx
upstream backend_server {
least_conn;
server 192.168.1.10:8080 weight=3;
server 192.168.1.11:8080 weight=3;
server 192.168.1.12:8080 weight=2;
keepalive 32;
}3. 性能优化
优化技巧:
- Gzip压缩:启用Gzip压缩静态资源
- HTTP/2:使用HTTP/2协议提升性能
- 缓存优化:合理设置缓存策略
- CDN加速:使用CDN加速静态资源
📋 动静分离架构演进
阶段1:单机部署
阶段2:分离部署
阶段3:CDN加速
📖 学习资源
视频教程
书籍推荐
- 《Nginx实战》 - 深入讲解Nginx配置
- 《高性能网站建设指南》 - 网站性能优化
- 《Web性能权威指南》 - HTTP和浏览器优化
- 《CDN技术详解》 - CDN技术原理和实践
网站资源
工具推荐
- Web服务器:Nginx、Apache、Caddy
- CDN服务:Cloudflare、阿里云CDN、腾讯云CDN
- 静态资源托管:OSS、S3、GitHub Pages
✅ 动静分离检查清单
- [ ] 静态资源和动态请求已分离
- [ ] Nginx配置合理,缓存策略正确
- [ ] CDN已配置,静态资源已加速
- [ ] 静态资源缓存时间设置合理
- [ ] 动态请求负载均衡已配置
- [ ] 性能监控已建立
- [ ] 故障隔离机制已建立