nginx中的upstream使用

本文详细介绍了Nginx中upstream模块的使用方法,包括如何设置负载均衡策略,如down、weight、max_fails、fail_timeout和backup等参数的具体含义及应用场景,帮助读者更好地理解和应用Nginx的负载均衡功能。

转载:https://blog.youkuaiyun.com/a12345678n/article/details/80179910

 

背景:最开始来公司的时候,由于公司已经上云,使用的是SLB了,所以慢慢的就没使用upstream了,但是线下还是有一些项目还是在使用这个,为了防止忘记就记录了一下,upstream的基本使用

upstream admin{
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup
}

在需要使用负载均衡的server中增加
proxy_pass http://admin/;

每个设备的状态设置为:
1、down表示当前的server暂时不参与负载
2、weight 默认为1.weight越大,负载的权重就越大,那么该服务器被访问到的几率就越大
3、max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4、fail_timeout:max_fails次失败后,暂停的时间。
5、backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

例子:
server 192.168.1.11 max_fails=3 fail_timeout=30s; 这表示,如果服务器192.168.1.11在30秒内出现了3次错误,那么就认为这个服务器工作不正常,从而在接下来的30秒内nginx不再去访问这个服务器。
————————————————
版权声明:本文为优快云博主「东孤熊猫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/a12345678n/article/details/80179910

### Nginx Upstream 配置及用法 Nginx 的 `upstream` 模块主要用于实现负载均衡和高可用性,通过合理的配置可以显著提升系统的性能和稳定性。以下是关于 Nginx `upstream` 的详细说明。 #### 1. 基础概念 `upstream` 是 Nginx 中的一个模块,允许用户定义一组后端服务器,并将其作为一个逻辑单元进行调用。这使得前端请求可以根据预设策略分发到同的后端服务器上[^1]。 #### 2. 配置语法 在 Nginx 配置文件中,`upstream` 的基本结构如下: ```nginx upstream backend { server address[:port]; } ``` 其中: - `backend` 是自定义的名称,供后续 `proxy_pass` 或其他指令引用。 - `address[:port]` 表示后端服务器的 IP 地址或域名以及可选的端口号。 #### 3. 负载均衡算法 Nginx 提供多种内置的负载均衡算法,默认情况下采用轮询方式(Round Robin)。除此之外,还可以通过特定参数启用其他算法[^4]。 ##### (1)轮询模式 默认模式下,每次请求按顺序依次转发给列表中的每一台服务器。 ##### (2)加权轮询 (`weight`) 为每台服务器指定权重值,权重越高则分配更多请求。 ```nginx upstream backend { server 10.0.0.11:8080 weight=3; server 10.0.0.11:6060 weight=1; } ``` 此处,第一台服务器接收三倍于第二台服务器的流量[^3]。 ##### (3)基于客户端 IP 的哈希分布 (`ip_hash`) 此方法确保来自同一客户端的所有请求都被发送至固定的某一台服务器。 ```nginx upstream backend { ip_hash; server 10.0.0.11:8080; server 10.0.0.11:6060; } ``` 注意:当使用 `ip_hash` 时无法同时设置 `backup` 属性[^4]。 #### 4. 后端服务器状态控制 除了简单的地址声明外,还支持更精细的状态管理选项[^4]: | 参数 | 描述 | |------------|----------------------------------------------------------------------| | `down` | 手动禁用该服务器参与调度 | | `backup` | 只有主服务器全部失效时才激活 | | `max_conns`| 设置单个连接的最大数量 | | `max_fails`| 定义连续失败次数阈值 | | `fail_timeout`| 失败后的等待恢复时间 | 例如: ```nginx upstream backend { server 10.0.0.11:8080 max_fails=3 fail_timeout=30s; server 10.0.0.11:6060 backup; } ``` 以上片段表明第一个实例最多容忍三次错误,在三十秒内再接受新任务;而第二个仅作为备用方案存在[^4]。 #### 5. 流量分割依据条件 (Map) 有时需要根据同维度动态调整目标池子,则可通过 `map` 结合定制化规则达成目的[^2]。 ```nginx http { map $request_uri $target_group { default tomcat_pool_a; ~*/api/v2/ tomcat_pool_b; } upstream tomcat_pool_a {...}; upstream tomcat_pool_b {...}; server { location / { proxy_pass http://$target_group; } } } ``` 这里展示了如何利用 URI 特征划分两组独立的服务集合[^2]。 --- ### 示例代码展示 下面给出一个完整的例子来演示实际应用场景下的综合运用情况: ```nginx # 定义上游资源池 upstream app_servers { least_conn; # 使用最少连接数算法代替传统轮循机制 server 192.168.1.101:8080 max_conns=100 slow_start=30s; server 192.168.1.102:8080 max_fails=2 fail_timeout=10s; } server { listen 80; location /application { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://app_servers/; } } ``` 上述脚本实现了对两个应用程序副本间的智能分流操作[^4]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值