nginx负载均衡配置

Nginx 负载均衡配置

这份文档讲的是 Nginx 的负载均衡写法。

它的核心作用是:

  • 多台后端服务器一起提供服务
  • NGINX 轮流或按策略把请求分给这些后端
  • 用来分担压力,提高可用性

0. 负载均衡配置流程图

flowchart TD
A[开始] --> B[确认多个后端服务地址]
B --> C[在 nginx 中定义 upstream]
C --> D[server 中通过 proxy_pass 指向 upstream]
D --> E[启用站点到 sites-enabled]
E --> F[执行 nginx -t]
F --> G{配置是否通过}
G -- 否 --> H[修正 upstream 或代理配置]
H --> F
G -- 是 --> I[reload nginx]
I --> J[完成]

1. 你要怎么写

最常见写法是:

  1. 先定义一个 upstream
  2. 把多个后端服务写进去
  3. server 里用 proxy_pass 指向这个 upstream

2. 一个最基础的负载均衡示例

假设你有两个后端服务:

  • 127.0.0.1:8081
  • 127.0.0.1:8082

可以这样写:

sudo vim /etc/nginx/sites-available/app.example.com

内容:

upstream app_backend {
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}

server {
listen 80;
listen [::]:80;
server_name app.example.com;

access_log /var/log/nginx/app.example.com.access.log;
error_log /var/log/nginx/app.example.com.error.log warn;

location / {
proxy_pass http://app_backend;
proxy_http_version 1.1;

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

3. 这是什么意思

  • upstream app_backend
    定义一个后端服务组
  • 里面的 server
    就是实际的多个后端地址
  • proxy_pass http://app_backend
    把请求交给这个服务组

默认情况下,Nginx 会按轮询方式把请求分给这些后端。

4. 常见增强写法

指定权重

upstream app_backend {
server 127.0.0.1:8081 weight=3;
server 127.0.0.1:8082 weight=1;
}

意思是:

  • 8081 分到更多请求
  • 8082 分到更少请求

后端临时不可用处理

upstream app_backend {
server 127.0.0.1:8081 max_fails=3 fail_timeout=30s;
server 127.0.0.1:8082 max_fails=3 fail_timeout=30s;
}

这表示:

  • 一段时间内连续失败达到阈值
  • Nginx 会暂时认为这个后端不可用

5. 写完了怎么检查和启用

sudo ln -s /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/app.example.com
sudo nginx -t
sudo systemctl reload nginx

6. 使用时要注意的事

  1. 后端服务最好只监听本机或内网地址
  2. upstream 名字要和 proxy_pass 对应
  3. 改完配置先 nginx -t
  4. 如果后端服务有会话状态,还要考虑会话保持,不然登录态之类可能有问题