当前位置: 首页 > news >正文

web集群学习:基于nginx的反向代理和负载均衡

目录

一,反向代理

1,环境准备

2,配置代理服务器

3,在物理机上一管理员身份打开文本编辑器,编辑C:\Windows\System32\drivers\etc目录下的hosts文件

4,访问测试

5,查看日志,并记录客户端真实ip地址

二,负载均衡

1,upstream模块

2,实现配置简单的负载均衡

3,实现backup功能

4,实现地址会话保持(hash)


一,反向代理

1,环境准备

硬件:两台web服务器充当后端服务器,一台代理服务器

web1:192.168.150.13

web2:192.168.150.14

代理:192.168.150.12

配置用于测试的两台Web服务

cd /usr/share/nginx/html/
echo "web test page,`hostname -I`." > index.html 
systemctl restart nginx

2,配置代理服务器

cd /etc/ngnix/conf.d/
vim vhost.conf
server {listen    80;server_name    web1.openlab.cn;location / {proxy_pass http://192.168.150.13;}
}server {listen    80;server_name    web2.openlab.cn;location / {proxy_pass http://192.168.150.14;}
}

重启nginx

systemctl restart nginx

3,在物理机上一管理员身份打开文本编辑器,编辑C:\Windows\System32\drivers\etc目录下的hosts文件

192.168.150.12    web1.openlab.cn    web2.openlab.cn

4,访问测试

在浏览器输入请求:web1.openlab.cn或web2.openlab.cn会被反向代理服务器转到后端Web服务器192.168.150.13或192.168.150.14中进行处理

5,查看日志,并记录客户端真实ip地址

tail /var/log/nginx/access.log

完成了反向代理WWW服务后,发现一个问题,节点服务器对应的WWW虚拟主机的访问日志的第一个 字段记录的并不是客户端的IP,而是反向代理服务器的IP,最后一个字段也是“-”!

nginx负载均衡相关重要参数

proxy_pass http://server_pools通过proxy_pass功能把用户的清求转向到反向代理定义的upstream服务器池
proxy_set_header Host $host  在代理向后端服务器发送的 http请求头中加入 host字段信息,用于当后端 服务器配置有多个虚拟主机时,可以识别代理的是哪个虚拟主机。这是节点 服务器多虚拟主机时的关键配置
proxy_set_header X-Forwarded-For $remote_addr        

在代理向后端服务器发送的 http请求头中加入 X-Forward-For字段信息, 用于后端服务器程序、日志等接收记录真实用户的 IP ,而不是代理服务器的 IP这是反向代理时,节点服务器获取用户真实 IP的必要功能配置

如何在日志文件记录客户端真实ip地址

添加 proxy_set_header X-Forwarded-For $remote_addr;     //默认行首

添加 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   //默认行尾   

server {listen    80;server_name    web1.openlab.cn;location / {proxy_pass http://192.168.150.13;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}server {listen    80;server_name    web2.openlab.cn;location / {proxy_pass http://192.168.150.14;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}

proxy_set_header Host $host;//在代理向后端服务器发送的 http请求头中加入 host字段信息,用于当后端 服务器配置有多个虚拟主机时,可以识别代理的是哪个虚拟主机。这是节点 服务器多虚拟主机时的关键配置

二,负载均衡

1,upstream模块

server 10.0.10.8:80负载均衡后面的RS配置,可以是IP或域名,如果端口不写,默认是80端口。 高并发场景下, IP可换成域名,通过 DNS做负载均衡。
weigth=1代表服务器的权重,默认值是1。权重数字越大表示接受的请求比例越大。
max_fails=3Nginx尝试连接后端主机失败的次数,这个值是配合 proxy_next_upstream、fastcgi_next_upstream和 memcached_next_upstream 这三个参数来使用的。当nginx接收后端服务 器返回这三个参数定义的状态码时,会将这个请求转发给正常工作的后端服 务器,例如404、502、503、 Max_fails的默认值是1 ;企业场景下建议2-3 次。如京东1次,蓝汛10次,根据业务需求去配置
fail_timeout=10s在max_fails定义的失败次数后,距离下次检查的间隔时间,默认是10s ;如果 max_fails是5 ,它就检测5次,如果5次都是502,那么,它就会根据 fail_timeout的值,等待10s再去检查,还是只检查一次,如果持续502,在不 重新加载 Nginx配置的情况下,每隔10s都只检查一次。常规业务2~3秒比较 合理,比如京东3秒,蓝汛3秒,可根据业务需求去配置。
backup热备配置(RS节点的高可用),当前面激活的RS都失败后会自动启用热备RS 这标志看这个服务器作为备份服务器,若主服务器全部宕机了,就会向它转 发请求。注意:当负载调度算法为ip_hash时,后端服务器在负载均衡调度中 的状态不能是weight和backup。
down这标志着服务器永远不可用,这个参数可配合ip_hash使用;类似与注释。

2,实现配置简单的负载均衡

模块说明:

ngx_http_proxy_module:proxy 代理模块, 用于把请求后拋给服务器节点或 upstream 服务器池

ngx_http_upstream_module:负载均衡模块, 可以实现网站的负载均衡功能及节点的健康检査

upstream web_pools {server 192.168.150.13 weight=2;server 192.168.150.14 weight=1;
}server {listen    80;server_name    web1.openlab.cn;location / {proxy_pass http://web_pools;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}

去本地/etc/hosts文件添加域名解析并重启nginx服务

192.168.150.12        web1.openlab.cn

客户端测试:for ((i=1;i<=10;i++)); do curl web1.openlab.cn; done

3,实现backup功能

upstream web_pools {server 192.168.150.13 weight=2;server 192.168.150.14 weight=1;server 192.168.150.11 backup;
}server {listen    80;server_name    web1.openlab.cn;location / {proxy_pass http://web_pools;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}

4,实现地址会话保持(hash)

upstream web_pools {ip_hashserver 192.168.150.13 weight=2;server 192.168.150.14 weight=1;#server 192.168.150.11 backup;
}server {listen    80;server_name    web1.openlab.cn;location / {proxy_pass http://web_pools;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}

http://www.lryc.cn/news/123561.html

相关文章:

  • 编程小窍门: 一个简单的go mutex的小例子
  • 【工作记录】mysql中实现分组统计的三种方式
  • 马来西亚的区块链和NFT市场调研
  • [保研/考研机试] KY109 Zero-complexity Transposition 上海交通大学复试上机题 C++实现
  • Linux零基础快速入门到精通
  • ARM02汇编指令
  • 从初学者到专家:Java方法的完整指南
  • 【生成式AI】ProlificDreamer论文阅读
  • C++元编程——模拟javascript异步执行
  • 【JavaEE】懒人的福音-MyBatis框架—复杂的操作-动态SQL
  • Springboot 默认路径说明
  • springboot注册拦截器与返回统一标准响应格式
  • 卷王特斯拉又全网降价了,卷死车企们
  • wiley:revision 流程
  • 【论文阅读】基于深度学习的时序预测——Pyraformer
  • 玩转IndexedDB,比localStorage、cookie还要强大的网页端本地缓存
  • RedisDesktopManager连不上redis问题解决(小白版)
  • 蓝帽杯 取证2022
  • MyBatis and or使用列表控制or条件
  • C语言刷题训练【第11天】
  • 正则表达式的使用
  • PHP 求解两字符串所有公共子序列及最长公共子序列 支持多字节字符串
  • linux内核bitmap之setbit汇编实现
  • Golang设计模式
  • leetcode151. 反转字符串中的单词
  • 【BASH】回顾与知识点梳理(十七)
  • 时序预测-Informer简介
  • 2023牛客第七场补题报告C F L M
  • Android使用kotlin+协程+room数据库的简单应用
  • Kubernetes pod调度约束[亲和性 污点] 生命阶段 排障手段