问答题421/1053ngx_http_upstream_module的作用是什么?

难度:
2021-11-02 创建

参考答案:

ngx_http_upstream_module模块的作用是为Nginx提供反向代理和负载均衡功能,它允许Nginx将客户端请求转发到一个或多个上游服务器(upstream servers)处理,并将结果返回给客户端。该模块在Nginx作为反向代理服务器时起关键作用。


核心功能

  1. 反向代理
    将客户端的请求转发到后端服务器处理,比如应用服务器(如Tomcat、Flask)或数据库接口。

  2. 负载均衡
    实现多台后端服务器的负载均衡,支持多种策略,如轮询、最少连接等。

  3. 故障转移
    当某个上游服务器不可用时,自动将请求转发到其他可用服务器。

  4. 健康检查(部分功能需第三方模块支持)
    通过检测后端服务器的状态,动态管理上游服务器的可用性。


常见配置指令

ngx_http_upstream_module的核心配置是在http块中定义upstream块,然后在server块中引用。

1. 定义上游服务器组

upstream块中定义后端服务器组:

1upstream backend { 2 server 192.168.1.101:8080; # 单个后端 3 server 192.168.1.102:8080; # 另一个后端 4 server 192.168.1.103:8080; # 更多后端 5}

2. 负载均衡策略

默认使用**轮询(round-robin)**策略,支持以下负载均衡方法:

  • 轮询(默认):均匀分配到每个后端服务器。
  • 权重:设置服务器权重,流量分配比例与权重成正比。
    1upstream backend { 2 server 192.168.1.101 weight=3; 3 server 192.168.1.102 weight=1; 4}
  • 最少连接:优先将请求分配给当前连接最少的服务器(需添加least_conn指令)。
    1upstream backend { 2 least_conn; 3 server 192.168.1.101; 4 server 192.168.1.102; 5}
  • IP哈希:基于客户端IP分配固定的后端服务器,适合需要会话保持的场景。
    1upstream backend { 2 ip_hash; 3 server 192.168.1.101; 4 server 192.168.1.102; 5}

3. 引用上游组

server块中通过proxy_pass引用上游服务器:

1server { 2 listen 80; 3 location / { 4 proxy_pass http://backend; # 引用upstream块 5 } 6}

4. 故障转移和超时配置

通过参数配置健康检查和故障恢复:

1upstream backend { 2 server 192.168.1.101 max_fails=3 fail_timeout=30s; # 失败3次,30秒内标记不可用 3 server 192.168.1.102 max_fails=2 fail_timeout=20s; 4}

实际作用与优点

  1. 负载分担:在流量高峰时均衡请求,避免单台后端服务器压力过大。
  2. 高可用性:通过故障转移机制,保障服务稳定性。
  3. 灵活扩展:支持动态添加或移除后端服务器,方便扩展服务。
  4. 多场景适配:适用于静态资源代理、动态应用转发及其他多种后端系统。

最近更新时间:2024-12-23