Nginx 负载均衡配置
Nginx 负载均衡配置
多台服务器分流,提高网站并发能力,Nginx 负载均衡很常用。
1. 什么是负载均衡
- 多台服务器做同样的服务
- Nginx 把请求分发给不同服务器
- 提高并发能力,一台挂了其他还能用
2. 基础配置
upstream myserver {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass http://myserver;
}
}
3. 常用分发策略
1)轮询(默认)
- 一个接一个轮流分
upstream myserver { server 127.0.0.1:8080; server 127.0.0.1:8081; }
2)加权轮询
- 性能好的服务器多分点
upstream myserver { server 127.0.0.1:8080 weight=3; server 127.0.0.1:8081 weight=1; }
3)ip_hash
- 同一个IP固定访问同一台
upstream myserver { ip_hash; server 127.0.0.1:8080; server 127.0.0.1:8081; }
4. 健康检查
upstream myserver {
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server 127.0.0.1:8081 max_fails=3 fail_timeout=30s;
}
- max_fails:失败几次标记为挂掉
- fail_timeout:多久后重试
5. 常用参数
upstream myserver {
# 备用服务器,其他都挂了才用
server 127.0.0.1:8080 backup;
# 不参与负载均衡
server 127.0.0.1:8081 down;
}
6. 注意事项
- 多台服务器数据要同步(Session、数据库)
- Session 共享用 Redis
- 文件上传用共享存储
总结
Nginx 负载均衡要点:
- upstream 定义服务器组
- proxy_pass 转发到组
- 轮询、加权、ip_hash 策略
- 健康检查自动剔除挂掉的服务
- 注意 Session 共享
做大并发网站,负载均衡是必备的。
Nginx负载均衡配置,upstream多台服务器
前言
网站访问量上来了,一台服务器扛不住,想用多台服务器一起跑。Nginx 的负载均衡功能就是干这个的:前面一台 Nginx 当入口,后面多台服务器一起干活。
什么是负载均衡
用户请求 → Nginx(负载均衡)→ 服务器A
→ 服务器B
→ 服务器C
Nginx 把请求按规则分发到不同的后端服务器,分担压力。
基础配置
第一步:定义 upstream
在 http 块里定义后端服务器组:
upstream backend {
server 192.168.1.101:80;
server 192.168.1.102:80;
server 192.168.1.103:80;
}
第二步:反向代理到后端
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
负载均衡策略
轮询(默认)
默认就是轮询,一个一个轮流来。
upstream backend {
server 192.168.1.101;
server 192.168.1.102;
}
加权轮询
服务器性能不一样,性能好的多分点请求:
upstream backend {
server 192.168.1.101 weight=3;
server 192.168.1.102 weight=1;
}
意思是:每4个请求,3个给101,1个给102。
ip_hash
同一个用户的请求永远打到同一台服务器(解决 session 问题):
upstream backend {
ip_hash;
server 192.168.1.101;
server 192.168.1.102;
}
健康检查
某台服务器挂了,Nginx 自动把它踢出去:
upstream backend {
server 192.168.1.101 max_fails=3 fail_timeout=30s;
server 192.168.1.102 max_fails=3 fail_timeout=30s;
}
意思是:3次失败就暂停30秒不发请求给它。
完整配置示例
http {
upstream backend {
server 192.168.1.101 weight=3 max_fails=3 fail_timeout=30s;
server 192.168.1.102 weight=1 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass http://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 不一致
用户登录了,刷新一下又掉登录。
原因: 轮询把请求分到不同服务器,session 没共享。
解决: 用 ip_hash,或者用 Redis 统一存 session。
坑2:后端服务器改了但 Nginx 没生效
加了一台新服务器,配置也写了,但没重载。
解决: nginx -s reload。
坑3:后端服务端口不对
后端跑在 8080 端口,upstream 里写的 80。
解决: upstream 里写对端口。
坑4:后端获取不到真实 IP
后端日志里记的都是 Nginx 的 IP。
解决: 加 X-Forwarded-For 头:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
总结
负载均衡就两步:
- upstream 定义后端服务器列表
- proxy_pass 转发到 upstream
记住: 多台服务器用负载均衡,记得处理 session 共享问题。
遇到问题加QQ23979811 协助处理
Nginx 负载均衡配置
Nginx 负载均衡配置
网站流量大了,单台服务器扛不住,就需要负载均衡。这篇讲 Nginx 怎么配负载均衡。
1. 什么是负载均衡
简单说就是把请求分发到多台服务器上,分担压力,提高网站可用性。
2. 基础配置
http {
# 定义后端服务器组
upstream backend {
server 192.168.1.101:80;
server 192.168.1.102:80;
server 192.168.1.103:80;
}
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
3. 负载均衡策略
轮询(默认):
按顺序逐个分发,每台服务器轮流来。
加权轮询:
服务器性能不一样,给好的服务器多分点流量。
upstream backend {
server 192.168.1.101 weight=3;
server 192.168.1.102 weight=2;
server 192.168.1.103 weight=1;
}
ip_hash(会话保持):
同一个 IP 的请求永远分发到同一台服务器,保持登录状态。
upstream backend {
ip_hash;
server 192.168.1.101;
server 192.168.1.102;
}
4. 健康检查
服务器挂了自动跳过,不把请求发过去。
upstream backend {
server 192.168.1.101 max_fails=3 fail_timeout=30s;
server 192.168.1.102 max_fails=3 fail_timeout=30s;
}
- max_fails:失败几次标记为下线
- fail_timeout:多久后重新检查
5. 常用配置说明
location / {
proxy_pass http://backend;
# 传递真实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_connect_timeout 5s;
proxy_read_timeout 60s;
}
6. 常见问题
1)Session 丢失:
- 多台服务器 Session 不共享
- 解决方案:Session 存 Redis,或者用 ip_hash
2)静态文件 404:
- 每台服务器都要有静态文件
- 或者用共享存储
3)服务器性能不均:
- 用 weighted 加权轮询
总结
Nginx 负载均衡要点:
- upstream 定义后端服务器组
- 轮询、加权、ip_hash 三种策略
- 配置健康检查自动下线故障服务器
- Session 要共享或用 ip_hash
做网站架构,负载均衡是必备技能。
Nginx 负载均衡配置
Nginx 负载均衡配置实战
网站流量大了,单台服务器扛不住,就得用负载均衡。Nginx 做负载均衡很简单,几行配置就行。
1. 基本配置
http {
upstream backend {
server 192.168.1.101:80;
server 192.168.1.102:80;
server 192.168.1.103:80;
}
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass http://backend;
}
}
}
默认是轮询(round robin),请求轮流分到三台服务器。
2. 四种分配策略
轮询(默认):一个一个来。
权重(weight):按比例分配,性能好的服务器多分担。
upstream backend {
server 192.168.1.101 weight=3;
server 192.168.1.102 weight=2;
server 192.168.1.103 weight=1;
}
3:2:1 的比例,第一台分一半请求。
ip_hash:同一个 IP 固定分到同一台服务器,解决 session 问题。
upstream backend {
ip_hash;
server 192.168.1.101;
server 192.168.1.102;
}
least_conn:最少连接数优先,分给当前最闲的服务器。
upstream backend {
least_conn;
server 192.168.1.101;
server 192.168.1.102;
}
3. 健康检查
upstream backend {
server 192.168.1.101 max_fails=3 fail_timeout=30s;
server 192.168.1.102 max_fails=3 fail_timeout=30s;
}
一台服务器挂了,自动从列表里摘掉,恢复了再加回来。
4. 常用参数
- max_fails:失败几次算挂了,默认1次
- fail_timeout:挂了多久再重试,默认10秒
- down:标记服务器下线,不分配请求
- backup:备用服务器,其他都挂了才用
5. 完整示例
upstream backend {
server 192.168.1.101 weight=3 max_fails=3 fail_timeout=30s;
server 192.168.1.102 weight=2 max_fails=3 fail_timeout=30s;
server 192.168.1.103 backup;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
总结
Nginx 负载均衡核心:
- upstream 定义服务器组
- 四种策略:轮询、权重、ip_hash、最少连接
- 健康检查自动摘除故障节点
- 生产环境用权重 + 健康检查就够了
搞懂这些,多台服务器集群就跑起来了。
Nginx 反向代理配置
Nginx 反向代理配置详解
Nginx 反向代理是最常用的服务器配置之一,把请求转发给后端服务。本文讲清楚核心配置。
1. 基本配置
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
2. 传递真实IP
后端服务要拿到用户真实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;
3. 负载均衡
多台后端服务器,用 upstream 做负载均衡:
upstream backend {
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=2;
}
server {
location / {
proxy_pass http://backend;
}
}
4. 超时设置
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
5. 静态文件处理
静态文件直接由 Nginx 处理,不用转发给后端:
location ~* \.(js|css|png|jpg|gif)$ {
root /data/www;
expires 30d;
}
6. HTTPS 反向代理
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
总结
Nginx 反向代理的核心就是 proxy_pass,配上 proxy_set_header 传递必要信息,再加上超时和静态文件处理,基本够用了。
Nginx 配置实战:反向代理、负载均衡与缓存
前言
Nginx 是目前最流行的 Web 服务器和反向代理软件。很多人会写简单的配置,但对反向代理、负载均衡、缓存这些高级用法并不熟悉。本文带你从零开始,掌握 Nginx 的核心配置技巧。
一、反向代理基础
反向代理是 Nginx 最常用的功能之一。用户请求 Nginx,Nginx 再把请求转发给后端应用服务器。
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8080;
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_pass:后端服务地址proxy_set_header:传递真实的客户端信息给后端,否则后端拿到的都是 Nginx 的信息
二、负载均衡
当后端有多台服务器时,可以用 Nginx 做负载均衡。
1. 轮询(默认)
upstream backend {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
}
}
2. 加权轮询
upstream backend {
server 127.0.0.1:8080 weight=3;
server 127.0.0.1:8081 weight=2;
server 127.0.0.1:8082 weight=1;
}
weight 值越大,分配的请求越多。适合配置不同的服务器。
3. ip_hash 会话保持
upstream backend {
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
同一个 IP 的请求总是分配到同一台后端服务器,适合有 session 的场景。
三、缓存配置
Nginx 缓存可以大幅减轻后端压力,提升响应速度。
1. 配置缓存路径
http {
# 定义缓存路径和参数
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
add_header X-Cache-Status $upstream_cache_status;
}
}
}
关键参数说明:
keys_zone:缓存共享内存区大小max_size:缓存最大占用空间inactive:多久没访问就自动清理proxy_cache_valid:不同状态码的缓存时间X-Cache-Status:查看是否命中缓存(HIT/MISS/BYPASS)
2. 不缓存特定请求
location /admin/ {
proxy_pass http://backend;
proxy_cache off; # 后台页面不缓存
}
四、HTTPS 配置
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
# HTTP 跳转 HTTPS
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
五、常见问题排查
1. 502 Bad Gateway
通常是后端服务挂了或者端口不对:
# 检查后端服务是否在运行
netstat -tlnp | grep 8080
# 查看 Nginx 错误日志
tail -f /var/log/nginx/error.log
2. 上传文件大小限制
http {
client_max_body_size 50M;
}
3. 超时设置
location / {
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
}
总结
Nginx 配置的核心思路:
- 反向代理:把请求转发给后端应用
- 负载均衡:多台后端服务器分担流量
- 缓存:静态内容缓存,减少后端压力
- HTTPS:加密传输,安全第一
掌握这些配置,你就能应对大部分 Web 服务器场景了。Nginx 配置文件改完记得执行 nginx -t 检查语法,然后 nginx -s reload 重载生效。