Nginx 部署前端项目、负载均衡与反向代理
基础配置详解:Nginx 部署前端项目、负载均衡与反向代理
一、部署前端项目(静态资源)
# 基本配置:托管静态资源
server
{listen 9529;server_name 139.xxx.82.1xx;index index.php index.html index.htm default.php default.htm default.html;root /www/wwwroot/dist;location /api {proxy_pass http://xxx.196.xxx.169:xxx;rewrite "^/api/(.*)$" /$1 break;#nginx跟后端服务器连接超时时间(代理连接超时)proxy_connect_timeout 18000;#后端服务器数据回传时间(代理发送超时)proxy_send_timeout 18000;#连接成功后,后端服务器响应时间(代理接收超时)proxy_read_timeout 18000;} access_log /www/wwwlogs/139.196.82.169.log;error_log /www/wwwlogs/139.196.82.169.error.log;
}
二、反向代理(对接后端 API/服务)
server {listen 80;server_name api.example.com;location / {# 后端服务地址(可替换为实际地址)proxy_pass http://localhost:3000;# 关键请求头转发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;# HTTP 1.1支持proxy_http_version 1.1;# 连接超时控制proxy_connect_timeout 5s;proxy_send_timeout 10s;proxy_read_timeout 30s;}
}
高级功能配置1. WebSocket 代理
location /ws/ {proxy_pass http://backend_ws;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";# 保持连接活跃proxy_set_header Keep-Alive "timeout=300, max=1000";
}2.路径重写
location /service/ {# 移除URL中的/service前缀再转发rewrite ^/service/(.*)$ /$1 break;proxy_pass http://backend-api;
}
三、负载均衡(多后端服务器分发流量)
# 定义后端服务器组
upstream backend-servers {# 基础轮询(默认)server 192.168.1.101:8080 weight=3; # 权重3(处理更多请求)server 192.168.1.102:8080;# 可选负载策略:# least_conn; # 最少连接数# ip_hash; # 相同IP固定到同一后端
}server {listen 80;server_name loadbalance.example.com;location / {proxy_pass http://backend-servers; # 指向upstream组proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 失败重试机制proxy_next_upstream error timeout http_500;proxy_connect_timeout 2s; # 连接超时proxy_read_timeout 5s; # 读取响应超时}
}
关键配置说明
-
静态资源部署
root
:指定项目根目录路径try_files
:解决SPA路由刷新404问题expires
:设置静态资源缓存时间
-
反向代理核心指令
proxy_pass
:转发请求到目标服务proxy_set_header
:透传客户端信息(如真实IP)proxy_http_version 1.1
+Upgrade
:WebSocket必配
-
负载均衡策略
- 轮询 (round-robin):默认(可加权
weight
) - IP哈希 (ip_hash):会话保持
- 最少连接 (least_conn):动态分配
- 健康检查:自动屏蔽故障节点(需Nginx Plus或开源替代方案)
- 轮询 (round-robin):默认(可加权
-
超时控制
proxy_connect_timeout 3s; # 连接后端超时 proxy_send_timeout 5s; # 发送请求超时 proxy_read_timeout 10s; # 等待响应超时
5.关键配置说明
proxy_pass - 核心指令,定义后端服务地址proxy_set_header - 转发请求头信息Host $host:保持原始主机头
X-Real-IP:传递客户端真实IP
X-Forwarded-For:记录请求路径
连接超时控制proxy_connect_timeout:连接建立超时
proxy_send_timeout:请求发送超时
proxy_read_timeout:响应接收超时
WebSocket特殊配置Upgrade $http_upgrade
Connection "upgrade"
路径重写rewrite 修改URL路径后转发
break 标志停止后续rewrite处理
实战技巧
- 多项目部署:使用
server_name
区分不同域名 - HTTPS支持:
listen 443 ssl; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/privkey.pem;
- 跨域处理(CORS):
add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
- 流量控制:
location /downloads/ {limit_rate 500k; # 限速500KB/s }
**附:可根据实际情况修改配置