Nginx 动静分离与负载均衡的实战配置
为什么需要动静分离与负载均衡

记得我第一次负责一个高并发项目时,服务器经常在访问高峰期崩溃。通过分析发现,大量静态资源请求占用了宝贵的动态处理资源。后来采用动静分离方案后,不仅服务器负载下降了60%,用户体验也得到显著提升。当业务进一步扩展时,负载均衡更是帮我们轻松应对了百万级日活。
环境准备与架构规划
在开始配置前,我们需要准备以下环境:
# 假设我们有三台服务器
192.168.1.10 # Nginx 负载均衡器
192.168.1.11 # 静态资源服务器
192.168.1.12 # 动态应用服务器
192.168.1.13 # 动态应用服务器(备用)
架构思路很简单:Nginx作为入口,静态请求直接转发到静态服务器,动态请求通过负载均衡分发到多台应用服务器。
动静分离配置详解
首先配置静态资源服务器,这里我推荐将静态资源独立部署:
server {
listen 80;
server_name static.example.com;
location / {
root /data/www/static;
expires 30d; # 缓存30天
access_log off;
}
# 图片资源特殊处理
location ~* .(jpg|jpeg|png|gif|ico)$ {
root /data/www/static/images;
expires 365d;
}
}
这里有个小技巧:通过设置不同的expires时间,可以有效利用浏览器缓存,我实测可以减少80%的重复请求。
负载均衡核心配置
接下来是重头戏——负载均衡配置。我常用的几种算法各有适用场景:
upstream backend {
# 轮询算法(默认)
server 192.168.1.12:8080 weight=1;
server 192.168.1.13:8080 weight=2; # 这台服务器配置更好
# IP哈希算法,适合需要会话保持的场景
# ip_hash;
# 最少连接数算法
# least_conn;
}
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# 超时设置很重要,我吃过亏的
proxy_connect_timeout 30s;
proxy_read_timeout 60s;
}
}
完整配置示例与优化技巧
把动静分离和负载均衡结合起来,这是我的生产环境配置:
upstream static_backend {
server 192.168.1.11:80;
}
upstream dynamic_backend {
server 192.168.1.12:8080;
server 192.168.1.13:8080;
}
server {
listen 80;
server_name www.example.com;
# 静态资源
location ~* .(css|js|png|jpg|jpeg|gif|ico|svg)$ {
proxy_pass http://static_backend;
proxy_set_header Host static.example.com;
expires 30d;
}
# 动态请求
location / {
proxy_pass http://dynamic_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
踩坑记录与解决方案
在实际部署中,我遇到过几个典型问题:
问题1:Session丢失
使用ip_hash解决,或者改用Redis等外部Session存储。
问题2:静态资源更新不及时
通过添加版本号解决:style.css?v=20231201
问题3:后端服务器健康检查
使用Nginx的upstream_check模块:
upstream backend {
server 192.168.1.12:8080;
server 192.168.1.13:8080;
check interval=3000 rise=2 fall=3 timeout=1000;
}
性能测试与监控
配置完成后一定要进行压力测试:
# 使用ab进行压力测试
ab -n 10000 -c 100 http://www.example.com/
监控关键指标:QPS、响应时间、错误率。我习惯用Prometheus + Grafana搭建监控面板,实时掌握集群状态。
总结
通过这套动静分离+负载均衡的方案,我们成功将系统的并发处理能力提升了5倍。最重要的是,这种架构具有良好的扩展性——当业务增长时,只需要水平增加服务器即可。希望我的实战经验能帮你少走弯路!


这个配置很实用,正好解决了我最近遇到的性能问题