nginx负载均衡二

news/发布时间2024/5/8 1:17:30

2.反向代理(负载均衡的重要参数)

2.反向代理(负载均衡的重要参数)# 转发http请求的,明确你的后端是运行在基于http协议上。proxy_pass  请求转发的目标地址;proxy_pass  http://127.0.0.1:8888;# 部署PHP网站
# 后端php-fpm此时配置文件/etc/php-fpm.d/www.conf
# 人家说该服务,是以fastcgi这个协议运行(http  > fastcgi > php-fpm)
fastcgi_pass  php-fpm运行的地址;
web-7 (nginx+php-fpm)fastcgi_pass  127.0.0.1:9000;这里的俩种协议配置语法,能看懂扣  1,看不懂 2;
请求转发的# 关于http协
# 你要记住,除了要吧请求转发过去,还得保留着客户端原始的信息数据
# 如何保留这个数据,也是基于不同的协议来设置的# 先看如下的转发参数,都是基于http协议来的,因为它是以proxy_pass开头的参数
# 和proxy_pass参数对应起来。 
# 你在做负载均衡转发参数的时候,如果不加这些参数,
# nginx代理机器,就会丢失client的信息
# 目标server也拿不到client的信息了
# 你公司的网站架构,是 
client  >  nginx机器    >    后端的机器
如果client的信息全部丢失,你无法再后端获取client的信息
你要在后端client做一些基于ip,基于用户身份的验证,那就全部没法验证了,因为http客户端信息丢失了。。。。
简单理解,就是 如 remote_addr那个信息,x_forwarder_for 参数,获取client真实ip真实ip 是 10.0.0.1  >  nginx代理 10.0.0.5  >   10.0.0.7proxy_pass 结合着用;proxy_set_header Host       $http_host; 
lb服务器将用户访问网站的hosts信息转发给后端节点
浏览器访问 域名的形式 ,  请求头部信息
host: 域名xxxx【这里的关于http协议的请求转发,以及客户端信息转发,参数能听懂的】
结合者proxy_pass  proxy_set_header  这些参数
能理解 扣 6  不懂 7 # nginx的代理转发参数,就是proxy_pass
# 四层转发
proxy_pass  ip:port;# 基于七层的,http协议转发
proxy_pass  http://ip:port; 【这两句话,看懂扣 1,不懂 2】proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for ;
将用户真实的ip传递给后端的节点其他的就是关于性能的参数,你可以不加,直接使用nginx默认的设置,也没问题,
关于性能的参数,不加,比你乱加,要稳定的多!这是线上的经验。proxy_connect_timeout 60s;
peoxy和server的连接超时,要求不超过75s;proxy_send_timeout 60s;
proxy等待server回传数据的超时时间proxy_read_timeout 60s;
proxy等待server响应的超时;proxy_buffering on | off;
把server返回的数据先放入缓冲区,然后再返回给client,一边收数据,一边传递,而不是全部接收完再传递。proxy_buffers  4 128k;
缓冲区的容量参数;

nginx四层负载均衡

四层是没有应用层协议的,基于ip:port找到目标的地址。

3.nginx可以同时实现
- 四层负载均衡,基于ip:port的转发,配置如下
# nginx配置文件
# 【无须关于http的请求参数了】[root@lb-5 /etc/nginx]#cat /etc/nginx/nginx.conf user  nginx;
worker_processes  auto;error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}# 四层基于stream{}这个模块即可,无须http协议相关的stream {upstream mysql_pool {# 目标机器,后端的ip:port  以及负载均衡的参数server 172.16.1.51:3306  max_fails=3 fail_timeout=30s;server 172.16.1.52:3306  max_fails=3 fail_timeout=30s;}# 定义虚拟主机,nginx最基本的功能,就是虚拟主机,得接收请求# 访问这个nginx代理机器的3306端口,请求就进入如下server {listen 0.0.0.0:3306;proxy_pass mysql_pool;}}# 描述下请求转发过程client 发出登录mysql请求
mysql -uroot -p -h10.0.0.5 -P3306
登录请求发给了代理服务器
↓
nginx四层代理服务器,请求轮询发给后端2个节点
↓ 
一次看到 51机器数据
一次看到52机器数据对于四层的转发,使用mysql的测试,用了它的3306默认端口
比如 比如数据库的redis,6379,四层转发,用法和这个一样,就是端口不同。

七层负载均衡配置(http)

主配置文件,如下的http协议的配置都应该在/etc/nginx/nginx.conf
# 打标签
http {xxxxx;include /etc/nginx/conf.d/*.conf;}[root@lb-5 ~]#cat  /etc/nginx/conf.d/proxy.conf 
# 定义一组服务器 nginx反向代理,请求转发给一组服务器
# client是不知道,本次请求,到底是 7 给你返回的,还是8返回的
# client 数据都是 nginx这个代理,发给他的
# 因此实现了反向代理+负载均衡的效果
# 这里的nginx七层反向代理负载均衡,看懂扣 6,不懂7 upstream  web-pools {server 172.16.1.7:8080;server 172.16.1.8:8080;
}server {listen 80;# 当你访问 #   http://wordpress.yuchaoit.cn:80/#   协议 http://        域名wordpress.yuchaoit.cn 端口80  #  path网页资源路径 /#  这个http 的url协议规范,看懂扣 1 不懂 2# http://wordpress.yuchaoit.cn:80/server_name wordpress.yuchaoit.cn;location / {proxy_pass http://web-pools;include /etc/nginx/proxy_params.conf;}
}才能协同工作。

负载均衡策略

rr轮询(round-robin)

# 编写地址池
upstream web-pool{# 默认这么写,就是轮训模式,没加任何其他的参数server 172.16.1.7;server 172.16.1.8;}# 以及转发参数
# 创建虚拟主机文件,实现代理转发功能
# 大伙能看懂,调试配置文件,解决错误问题的过程吗?
# 能 3  不能 4server {listen 22555;server_name _;location / {proxy_pass http://web-pool;include /etc/nginx/proxy_params;}
}

Weight(权重轮询)

upstream backend {
server 192.168.178.122 weight=1;
server 192.168.178.121 weight=2;
}

ip_hash

MD5sum 能够得到字符串的唯一值,对它进行哈希
你client每次来访问,得有client的ip地址
针对这个ip进行哈希算法,求值,nginx底层做的,得到一个唯一值
后续这个ip继续访问nginx,nginx就讲这个ip客户端的请求,固定的发给后端的一个节点。

upstream chaoge_backend {
ip_hash;
server 192.168.178.121;
server 192.168.178.122;}

url_hash

根据访问url的hash结果分配,同一个url固定发给一个后端节点。

学习查看linux的tcp连接情况(ss命令)

ss -an     或者netstat -an 
查看当前机器的所有socket连接情况(ip:port)的连接数有多少个
# -a 显示当前服务器,所有的socket#  -n, --numeric       don't resolve service names
# 只显示ip:port 而不是显示主机名,让你跟更清晰,ip地址是谁

netstat命令

[root@web-7 ~]#netstat -an |grep -i estab
Active Internet connections (servers and established)
tcp        0     52 10.0.0.7:22             10.0.0.1:53292          ESTABLISHED
tcp        0      0 10.0.0.7:22             10.0.0.1:58119          ESTABLISHED
Active UNIX domain sockets (servers and established)[root@web-7 ~]#ss -an |grep -i estab | grep '10.0.0.7:22'
tcp    ESTAB      0      52     10.0.0.7:22                 10.0.0.1:53292              
tcp    ESTAB      0      0      10.0.0.7:22  

负载均衡参数

backup参数

upstream web-pool{
# 默认是轮训算法
# 还可以针对每一个节点,设置不同的功能参数
# backup 被标记为backup参数的服务器,只有服务器池内的其他机器都无法访问了,才会使用该该机器。server 172.16.1.7;server 172.16.1.8 backup;
}


down参数

down
标记这个机器停止使用了。某个服务器,要停掉,但是也不能立即删除配置文件,down让它下线,不再接收负载均衡的请求。[root@lb-5 /etc/nginx/conf.d]#cat proxy-web.conf 
# 编写地址池
upstream web-pool{# 默认这么写,就是轮训模式,没加任何其他的参数server 172.16.1.7 down;server 172.16.1.8;
}[root@master-61 ~]#curl 10.0.0.5:22555
~~~~~~~~~~~web8
[root@master-61 ~]#curl 10.0.0.5:22555
~~~~~~~~~~~web8
[root@master-61 ~]#curl 10.0.0.5:22555
~~~~~~~~~~~web8
[root@master-61 ~]#curl 10.0.0.5:22555
~~~~~~~~~~~web8
[root@master-61 ~]#curl 10.0.0.5:22555
~~~~~~~~~~~web8

其他参数

max_failes
允许请求失败的次数,一般和fail_timeout结合用
nginx请求转发给某个节点,如果它故障,重试次数fail_timeout
经过max_failes失败后服务暂停的时间。
重试超时时间nginx新版本中,默认直接就是健康检查,且延迟很短,后端挂掉,立即请求转发给健康节点,在轮训实验中看过了。down
标记这个机器停止使用了。max_conns
限制最大接收的连接数。

图解四层负载均衡,七层负载均衡


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

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

相关文章

洛谷P1102 A-B数对

双指针做法:反过来,从后往前看也是一样的:#include <iostream> #include <stdio.h> #include <algorithm> #include <string> #include <cmath> #define For(i, j, n) for (int i = j; i <= n; ++i) using namespace std;const int N = 2e…

input子系统一

参考资料: 正点原子Linux设备驱动 韦东山第二期input子系统框架图:用户空间:用户空间可直接访问驱动节点,/dev/input/event0,1,2,也可以通过1tslib/libinput库来使用输入设备 输入系统事件层:处理核心层上报的输入事件,给用户层提供访问接口 输入系统核心层:承上启下…

nexus 代理 pypi

环境说明服务 ip 端口 备注nexus 192.168.80.129 (内网) 8081 内网地址无法访问外网nginx192.168.80.128 (内网) 192.168.174.126 (外网) 88 19000192.168.174.126 地址可以访问外网创建 Blob Stores创建 Repositories设置 proxyrepo 测试 # pip install xlrd -i http://192.16…

绕过JDK高版本限制进行JNDI注入

前面学过了log4j2的打法,但CVE2021属实是有点久远了,打NSS搜了道java,那道题有点意思,是绕过高版本的打一个ldap,然后二次打fastjson。 但是复现的时候,我配环境那里我始终有问题,感觉还是配少了😭😭😭 而且我需要收回前面乱配java环境改名字的blog说法,跑代码的…

代码审计[一] [0CTF 2016]piapiapia

代码审计[一] [0CTF 2016]piapiapia对着登录框一顿乱注,发现都没什么效果,于是转向目录爆破。 gobuster不知道为什么爆不了,只能用dirsearch来了 dirsearch -u [url] -s 1 -t 10爆到了一整个源码备份压缩包,下载后进行分析源码分析 index.php 对于html部分,可以见到是登录…

Yolov 体验

参考Yolov 中文文档 yolov8_wpf_example(简单搜索到的一个示例程序) 本文源码【下载】环境软件/系统 版本 说明Windows Windows 10 专业版 22H2 19045.4170Microsoft Visual Studio Microsoft Visual Studio Community 2022 (64 位) - 17.6.5Microsoft .Net SDK 8.0.101 手动…