Nginx的静态资源部署,反向代理,负载均衡,动静分离的配置
发布时间:2025-07-27 00:04       
以下是Nginx实现静态资源部署、反向代理、负载均衡、动静分离的专业配置指南,基于最新Nginx 1.24+版本,结合生产环境最佳实践:
一、静态资源部署 ⚡
场景:高效分发CSS/JS/图片等静态文件
server {
listen 80;
server_name static.example.com;
# 静态资源根目录
root /data/www/static;
location / {
# 启用文件缓存(浏览器缓存1年)
add_header Cache-Control "public, max-age=31536000, immutable";
# 启用Nginx高效文件传输(零拷贝)
sendfile on;
tcp_nopush on;
# 压缩文本资源(节省带宽)
gzip on;
gzip_types text/css application/javascript image/svg+xml;
}
# 禁止访问隐藏文件
location ~ /\. {
deny all;
}
}
关键配置解析:
sendfile on
:跳过用户态数据拷贝,直接从内核缓存发送文件tcp_nopush on
:仅在数据包满时发送,提升网络效率immutable
:声明资源永不改变,跳过304验证gzip_types
:对文本类资源压缩(压缩率通常达70%)
二、反向代理 🔄
场景:将客户端请求转发至后端应用服务器
server {
listen 80;
server_name api.example.com;
location / {
# 后端服务器地址
proxy_pass http://backend_server;
# 透传客户端IP和协议头
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 3;
proxy_read_timeout 30;
}
}
# 定义后端服务器组
upstream backend_server {
server 10.0.0.1:8080; # 应用服务器1
server 10.0.0.2:8080; # 应用服务器2
}
安全增强项:
# 防止HTTP头注入攻击
proxy_hide_header X-Powered-By;
# 限制客户端请求体大小(防DoS)
client_max_body_size 10m;
三、负载均衡 ⚖️
场景:将流量智能分配至多台后端服务器
upstream backend_cluster {
# 加权轮询(权重越高分配越多请求)
server 10.0.1.1:8000 weight=3;
server 10.0.1.2:8000 weight=2;
server 10.0.1.3:8000 backup; # 备用服务器
# 负载均衡算法(可选):
# least_conn; # 最小连接数优先
# ip_hash; # 同一IP固定后端(会话保持)
}
server {
location / {
proxy_pass http://backend_cluster;
# 健康检查(Nginx Plus专属)
# health_check interval=5s fails=3 passes=2;
}
}
故障转移策略:
- 当主服务器连续3次响应超时(默认)自动标记为不可用
backup
服务器仅在所有主节点故障时启用- 商业版支持主动健康检查(开源版需用第三方模块)
四、动静分离 🚀
方案1:基于URL路径分离
server {
listen 80;
server_name www.example.com;
# 动态请求 → 后端应用
location ~ \.(php|jsp|do)$ {
proxy_pass http://backend_server;
}
# 静态请求 → 本地存储
location ~* \.(jpg|css|js)$ {
root /data/www/static;
expires 30d; # 客户端缓存30天
}
}
方案2:跨服务器分离(高性能推荐)
# 静态资源服务器
server {
listen 80;
server_name static.example.com;
root /data/static;
...
}
# 动态应用服务器
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://backend_server;
}
}
客户端配置:
<!-- 前端代码直接指向静态资源域名 -->
<script src="https://static.example.com/js/app.js"></script>
五、性能调优关键参数 🔧
在 nginx.conf
的 http{}
块全局配置:
# 连接复用优化
keepalive_timeout 65;
keepalive_requests 1000;
# 文件描述符缓存
open_file_cache max=10000 inactive=30s;
open_file_cache_valid 60s;
# 压缩优化
gzip_comp_level 6;
gzip_min_length 1k;
六、完整配置示例 🌐
# 静态资源服务器配置
server {
listen 80;
server_name static.site.com;
root /data/static;
location / {
sendfile on;
tcp_nopush on;
expires max;
add_header Cache-Control "public";
}
}
# 动态应用负载均衡
upstream app_servers {
least_conn;
server 10.1.0.10:8080 weight=2;
server 10.1.0.11:8080;
server 10.1.0.12:8080 backup;
}
server {
listen 80;
server_name app.site.com;
location / {
proxy_pass http://app_servers;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
# 故障熔断(商业版功能)
# proxy_next_upstream error timeout http_500;
}
}
最佳实践总结 ✅
- CDN融合:将静态域名接入CDN(如Cloudflare),提升全球访问速度
- 协议优化:启用HTTP/2(需HTTPS)提升并发能力
- 安全加固:
- 动态接口限制请求速率
limit_req_zone
- 静态资源禁用PHP执行
location ~* \.php$ { deny all; }
- 动态接口限制请求速率
- 监控指标:通过
stub_status
模块暴露监控指标 - 容器化部署:使用官方Nginx镜像,通过
volumes
挂载配置和静态文件
📊 性能对比:
- 纯静态请求:单机Nginx可处理 5万+ QPS
- 动态代理:单机可承载 2万+ QPS(依赖后端性能)
- 开启HTTP/2后:页面加载时间平均减少 30%~50%
通过合理配置,Nginx可成为高性能Web架构的核心流量枢纽,有效支撑百万级并发场景。