[每周一更]-(第78期):Nginx负载均衡proxy_pass代理模块常用参数配置

在这里插入图片描述

0、负载均衡的策略

使用场景示例

# 定义要包含在负载均衡方案中的服务器。
# 最好使用服务器的私有IP以获得更好的性能和安全性。
http {upstream backend {server 10.1.0.101;server 10.1.0.102;server 10.1.0.103;}server{server_name game1.test.com;listen 80;location / {proxy_pass http://backend# 用户请求的时候HOST的值是game1.test.com, 那么代理服务会像后端传递请求的还是game1.test.comproxy_set_header Host $http_host;# 将$remote_addr的值放进变量X-Real-IP中,$remote_addr的值为客户端的ipproxy_set_header X-Real-IP $remote_addr;# 客户端通过代理服务访问后端服务, 后端服务通过该变量会记录真实客户端地址proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# nginx代理与后端服务器连接超时时间(代理连接超时)proxy_connect_timeout 10s;# nginx代理等待后端服务器的响应时间proxy_read_timeout 10s;# 后端服务器数据回传给nginx代理超时时间proxy_send_timeout 10s;# nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传,不是全部接收完再传给客户proxy_buffering on;# 设置nginx代理保存用户头信息的缓冲区大小proxy_buffer_size  8k;# proxy_buffers 缓冲区proxy_buffers 8 8k;# 状态标记proxy_next_upstream http_404  http_500  http_502  http_503  http_504  http_403;}}
}

0.1、内置策略

0.1.1、轮询策略
  • 该策略就是服务器将每个前端请求按顺序(时间顺序和排列次序)逐一分配到不同的后端服务器节点。如果后端服务器出现问题,即down掉,那么就会被自动剔除。

如下:

upstream backend {
server 10.1.0.101;
server 10.1.0.102;
server 10.1.0.103;
}
0.1.2、加权轮询策略
  • 该策略在基本的轮询策略基础上考虑各后端服务器节点接受请求的权重,指定各后端服务器节点被轮询到的机率,主要应用于后端服务器节点性能不均的情况。
  • 例如:通过直接配置weight来设置访问机率,weight的大小和访问比率成正比。
    下面三个服务器(如果不配置weight,则默认配置为weight=1),第一个的权重是1,第二个的权重是3,第三个的权重是5,那么这三个后端服务器被访问的比率是1:3:5,即server 10.1.0.103被访问的机率最高,server 10.1.0.102次之,server server 10.1.0.101访问的机率最小。

如下:

upstream backend {
server 10.1.0.101;
server 10.1.0.102  weight=3;
server 10.1.0.103  weight=5;
}
0.1.3、ip_hash策略
  • 该策略是将前端的访问IP进行hash操作,然后根据hash结果将请求分配到不同的后端服务器节点。这样会使得每个前端访问IP会固定访问一个后端服务器节点,好处是前端用户的session只在一个后端服务器节点上,不必考虑一个session存在多台服务器节点出现session贡献问题。
    例如:因为weight是内置,所以可以直接和其他策略配合使用。
upstream backend {
ip_hash;
server 10.1.0.101;
server 10.1.0.102  weight=3;
server 10.1.0.103  weight=5;
}
0.1.4、最少连接数
  • 基于最少连接的负载平衡是另一种简单的方法。顾名思义,此方法将请求定向到当时具有最少活动连接的服务器。对于请求有时可能需要更长时间才能完成的应用程序,它比循环法更有效。
upstream backend {
least_conn;
server 10.1.0.101;
server 10.1.0.102;
server 10.1.0.103;
}

0.2、扩展策略

0.2.1、url_hash策略
  • 该策略将前端请求的url地址进行hash操作,根据hash结果将请求定向到同一后端服务器节点上,后台服务器为缓存是比较有效。一般url_hash需要配合缓冲命中来使用。
upstream backend {server 10.1.0.101;server 10.1.0.102;server 10.1.0.103;hash $request_uri;hash_method crc32;
}
0.2.2、fair策略
  • 该策略请求转发到负载最小的后端服务器节点上。Nginx通过后端服务器节点对响应时间来判断负载情况,响应时间最短的节点负载就相对较轻,Nginx就会将前端请求转发到此后端服务器节点上。
upstream backend {server 10.1.0.101;server 10.1.0.102;server 10.1.0.103;fair;
}
0.2.3、Sticky策略
  • 该策略在多台服务器的环境下,为了确保一个客户端只和一台服务器通讯,它会保持长连接,并在结束会话后再次选择一个服务器,保证了压力均衡。
  • 注意:如果浏览器不支持cookie,那么sticky不生效,毕竟整个模块是给予cookie实现。Sticky模块和ip_hash模块不能够同时使用。
upstream backend {sticky;server 10.1.0.101;server 10.1.0.102;server 10.1.0.103;
}

upstream 参数说明

追加在upstream中server的ip配置后的参数:

  • 1.down:表示当前的server暂时不参与负载
  • 2.weight:默认为1.weight越大,负载的权重就越大。
  • 3.max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误
  • 4.fail_timeout:max_fails次失败后,暂停的时间。
  • 5.backup:其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
  • 6.keepalive:连接数(keepalive的值)指定了每个工作进程中保留的持续连接到nginx负载均衡器缓存的最大值。如果超过这个设置值的闲置进程想链接到nginx负载均衡器组,最先连接的将被关闭。
  • 7.location对URL进行匹配.可以进行重定向或者进行新的代理负载均衡

注:nginx支持同时设置多组的负载均衡,用来给不用的server来使用。

1、负载均衡实践

  • 1.1、Nginx要实现负载均衡需要用到proxy_pass代理模块配置
  • 1.2、Nginx负载均衡与Nginx代理不同地方在于,Nginx的一个location仅能代理一台服务器,而Nginx负载均衡则是将客户端请求代理转发至一组upstream虚拟服务池.

2、负载均衡配置模块(proxy_pass)

# ngx_http_upstream_module#语法
Syntax: upstream name { ... }
Default:    —
Context:    http#例子
upstream [连接池的名称] {[存放的IP]server [ip1]:[端口] [分发策略];server [ip2]:[端口] [分发策略];
}server {... ...location / {proxy_pass http://[连接池的名称] ;}
}

3、proxy_pass代理模块配置常用参数

3.1、添加发往后端服务器的请求头信息

语法:    proxy_set_header field value;
默认:    proxy_set_header Host $http_host;
proxy_set_header Connection close;
位置:    http, server, location# 用户请求的时候HOST的值是game1.test.com, 那么代理服务会像后端传递请求的还是game1.test.com
proxy_set_header Host $http_host;# 将$remote_addr的值放进变量X-Real-IP中,$remote_addr的值为客户端的ip
proxy_set_header X-Real-IP $remote_addr;# 客户端通过代理服务访问后端服务, 后端服务通过该变量会记录真实客户端地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

3.2、代理到后端的TCP连接、响应、返回等超时时间

#nginx代理与后端服务器连接超时时间(代理连接超时)
语法: proxy_connect_timeout time;
默认: proxy_connect_timeout 60s;
位置: http, server, location#nginx代理等待后端服务器的响应时间
语法:    proxy_read_timeout time;
默认:    proxy_read_timeout 60s;
位置:    http, server, location#后端服务器数据回传给nginx代理超时时间
语法: proxy_send_timeout time;
默认: proxy_send_timeout 60s;
位置: http, server, location

3.3、proxy_buffer代理缓冲区

#nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传, 不是全部接收完再传给客户端
语法: proxy_buffering on | off;
默认: proxy_buffering on;
位置: http, server, location#设置nginx代理保存用户头信息的缓冲区大小
语法: proxy_buffer_size size;
默认: proxy_buffer_size 4k|8k;
位置: http, server, location#proxy_buffers 缓冲区
语法: proxy_buffers number size;
默认: proxy_buffers 8 4k|8k;
位置: http, server, location

3.4、实际负载均衡项目项目的参数配置

upstream load {server 39.108.93.110:80;server 47.75.66.116:80;
}server {server_name load.ifanatic.cn;listen 80;location / {proxy_pass http://load;# 用户请求的时候HOST的值是game1.test.com, 那么代理服务会像后端传递请求的还是game1.test.comproxy_set_header Host $http_host;# 将$remote_addr的值放进变量X-Real-IP中,$remote_addr的值为客户端的ipproxy_set_header X-Real-IP $remote_addr;# 客户端通过代理服务访问后端服务, 后端服务通过该变量会记录真实客户端地址proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# nginx代理与后端服务器连接超时时间(代理连接超时)proxy_connect_timeout 10s;# nginx代理等待后端服务器的响应时间proxy_read_timeout 10s;# 后端服务器数据回传给nginx代理超时时间proxy_send_timeout 10s;# nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传, 不是全部接收完再传>给客户proxy_buffering on;# 设置nginx代理保存用户头信息的缓冲区大小proxy_buffer_size  8k;# proxy_buffers 缓冲区proxy_buffers 8 8k;# 状态标记proxy_next_upstream http_404  http_500  http_502  http_503  http_504  http_403  http_429;}
}

4、 查看常用配置参数

cat /etc/nginx/proxy_paramsproxy_set_header Host $http_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;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/294850.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java流浪动物保护系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web 流浪动物保护系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql…

Ubuntu 常用命令之 echo 命令用法介绍

📑Linux/Ubuntu 常用命令归类整理 echo 是一个在 Ubuntu 系统下常用的命令,主要用于在终端输出字符串或者变量。 echo 的基本语法 echo [option] [string]echo 命令的参数包括 -n:不输出结尾的换行符。-e:启用反斜杠转义字符。…

【mongoose】 Model.create() no longer accepts a callback 报错解决

在最新版的 mongoose 操作 MongoDB 数据库的时候,当我们插入一条数据时候,会报错 :Model.create() no longer accepts a callback,看了很多文章都说是,版本太高,都妥协选择了降低回旧版本,但我就…

服务器数据恢复-误操作导致xfs分区数据丢失的数据恢复案例

服务器数据恢复环境: 某品牌OceanStorT系列某型号存储MD1200磁盘柜,组建的raid5磁盘阵列。上层分配了1个lun,安装的linux操作系统,划分两个分区,分区一通过lvm进行扩容,分区二格式化为xfs文件系统。 服务器…

YZ系列工具之YZ03:高版本Excel的自定义菜单

我给VBA下的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套一部VBA手册,教程分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的…

搜索二叉树(超详解)

文章目录 前言查找搜索二叉树的结构insertfinderase递归版本Findinserterase 二叉树的拷贝问题搜索二叉树的应用Key模型Key/Value的模型 前言 普通二叉树其实意义不大, 如果用二叉树存储数据的话,还不如顺序表,链表这些。 搜索二叉树它的意义…

如何改善与 Next Paint (INP) 的交互

但谷歌也会关注访问者到达后你的网站体验有多好。 在过去的几年里,谷歌已经彻底改变了哪些页面体验信号被收集并用作排名因素。 在引入核心网络指标后,谷歌逐渐调整了它们的衡量方式,以便更好地反映真实的用户体验。 然而,随着…

12 Vue3中使用v-if指令实现条件渲染

概述 v-if指令主要用来实现条件渲染,在实际项目中使用得也非常多。 v-if通常会配合v-else-if、v-else指令一起使用,可以达到多个条件执行一个,两个条件执行一个,满足一个条件执行等多种场景。 下面,我们分别演示这三…

js显示实时时间

文章目录 一、效果二、思路三、最后 一、效果 用JS实现XXXX年XX月XX日 星期X XX时XX分XX秒 效果 效果 &#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>time</title><script t…

QTNet:Query-based Temporal Fusion with Explicit Motion for 3D Object Detection

参考代码&#xff1a;QTNet 动机和出发点 自动驾驶中时序信息对感知性能具有较大影响&#xff0c;如在感知稳定性维度上。对于常见的时序融合多是在feature的维度上做&#xff0c;这个维度的融合主要分为如下两个方案&#xff1a; 1&#xff09;BEV-based方案&#xff1a;将之…

nodejs+vue+ElementUi会员制停车场车位系统

总之&#xff0c;智能停车系统使停车场管理工作规范化&#xff0c;系统化&#xff0c;程序化&#xff0c;避免停车场管理的随意性&#xff0c;提高信息处理的速度和准确性&#xff0c;能够及时、准确、有效的查询和修改停车场情况。 三、任务&#xff1a;小组任务和个人任务 智…

CentOs 安装MySQL

1、拉取安装包 wget --no-check-certificate dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm 成功拉取 2、安装 yum install mysql-community-release-el6-5.noarch.rpm 过程中可能需要你同意一些东西&#xff0c;y 即可 然后稍微检查一下 yum repolist enabled…