nginx 配置里upstream的作用是什么
在 Nginx 配置中,upstream 块的作用是定义一组后端服务器(上游服务器),用于实现负载均衡和反向代理。通过 upstream,Nginx 可以将客户端请求分发到多个后端服务器,提高应用的可用性、性能和容错能力。
核心作用
1.负载均衡
将客户端请求均匀分配到多个后端服务器,避免单点压力过大。例如:
nginx
upstream backend_servers {
server 192.168.1.100:8080;
server 192.168.1.101:8080;
}
Nginx 会根据负载均衡算法(如轮询、IP 哈希、权重等)选择一个后端服务器处理请求。
2.反向代理
upstream 通常与 proxy_pass 指令配合使用,将请求转发到后端服务器:
nginx
server {
listen 80;
location / {
proxy_pass http://backend_servers; # 转发到 upstream 定义的服务器组
}
}
3.健康检查
Nginx 会自动检测后端服务器的健康状态,当某个服务器不可用时,自动将其从负载均衡池中移除。例如:
nginx
upstream backend_servers {
server 192.168.1.100:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.101:8080 max_fails=3 fail_timeout=30s;
}
- max_fails:允许的最大失败次数(默认 1 次)。
- fail_timeout:失败后暂停的时间(默认 10 秒)。
负载均衡算法
upstream 支持多种负载均衡算法,通过 ip_hash、least_conn 等指令指定:
nginx
upstream backend_servers {
ip_hash; # 基于客户端IP的哈希算法,确保同一客户端始终访问同一服务器
server 192.168.1.100:8080;
server 192.168.1.101:8080;
}
常用算法:
- 轮询(默认):按顺序轮流分发请求。
- weight:加权轮询,根据服务器性能分配权重。
- ip_hash:基于客户端 IP 哈希,保证会话一致性。
- least_conn:转发给当前连接数最少的服务器。
应用场景
- 高可用架构:通过多台服务器冗余部署,避免单点故障。
- 水平扩展:增加服务器数量提升整体处理能力。
- 动静分离:静态资源由 Nginx 直接处理,动态请求转发给后端应用服务器。
示例配置
nginx
# 定义上游服务器组
upstream app_servers {
server app1.example.com weight=5; # 权重为5
server app2.example.com; # 默认权重为1
server app3.example.com backup; # 备份服务器,仅当其他服务器全部不可用时才会启用
}
# 反向代理配置
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://app_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}