动静分离是一种常见的网站架构优化手段,将动态请求和静态资源请求分别处理。结合负载均衡技术,可以构建高性能、高可用的Web服务集群。
客户端 → Nginx负载均衡器 → [动态服务器集群]
↘ [静态资源服务器集群]
http {
upstream dynamic_servers {
# 动态服务器集群
server 192.168.1.101:8080 weight=3;
server 192.168.1.102:8080 weight=2;
server 192.168.1.103:8080 backup; # 备用服务器
}
upstream static_servers {
# 静态资源服务器集群
server 192.168.1.201:80;
server 192.168.1.202:80;
}
server {
listen 80;
server_name example.com;
# 静态资源请求
location ~* \.(jpg|jpeg|gif|png|css|js|ico|html|txt)$ {
proxy_pass http://static_servers;
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_cache static_cache;
proxy_cache_valid 200 304 12h;
proxy_cache_valid 301 302 1h;
proxy_cache_valid any 1m;
proxy_cache_use_stale error timeout invalid_header updating;
}
# 动态请求
location / {
proxy_pass http://dynamic_servers;
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_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}
# 健康检查
location /nginx_status {
stub_status on;
access_log off;
allow 192.168.1.0/24;
deny all;
}
}
}
server {
listen 80;
server_name static.example.com;
root /data/static;
location / {
expires 30d;
access_log off;
add_header Cache-Control "public";
# 开启gzip压缩
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}
}
server {
listen 8080;
server_name dynamic.example.com;
location / {
# 这里配置你的应用服务器(如Tomcat, PHP-FPM等)
proxy_pass http://127.0.0.1:8000;
# 禁用静态资源缓存
proxy_buffering off;
expires -1;
}
}
nginx -t
测试配置文件语法通过以上配置,您可以构建一个高性能的动静分离负载均衡集群,有效提升网站性能和可用性。