文档首页> 云计算> Nginx的静态资源部署,反向代理,负载均衡,动静分离的配置

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; 
    }
}

关键配置解析

  1. sendfile on:跳过用户态数据拷贝,直接从内核缓存发送文件
  2. tcp_nopush on:仅在数据包满时发送,提升网络效率
  3. immutable:声明资源永不改变,跳过304验证
  4. 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;
    }
}

最佳实践总结 ✅

  1. CDN融合:将静态域名接入CDN(如Cloudflare),提升全球访问速度
  2. 协议优化:启用HTTP/2(需HTTPS)提升并发能力
  3. 安全加固
    • 动态接口限制请求速率 limit_req_zone
    • 静态资源禁用PHP执行 location ~* \.php$ { deny all; }
  4. 监控指标:通过 stub_status 模块暴露监控指标
  5. 容器化部署:使用官方Nginx镜像,通过 volumes 挂载配置和静态文件

📊 性能对比

  • 纯静态请求:单机Nginx可处理 5万+ QPS
  • 动态代理:单机可承载 2万+ QPS(依赖后端性能)
  • 开启HTTP/2后:页面加载时间平均减少 30%~50%

通过合理配置,Nginx可成为高性能Web架构的核心流量枢纽,有效支撑百万级并发场景。