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;}
}

二,负载均衡

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,实现配置简单的负载均衡

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.mzph.cn/news/28667.shtml

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

相关文章

【100天精通python】Day30:使用python操作数据库_数据库基础入门

专栏导读 专栏订阅地址&#xff1a;https://blog.csdn.net/qq_35831906/category_12375510.html 1 数据库基础知识介绍 1.1 什么是数据库&#xff1f; 数据库是一个结构化存储和组织数据的集合&#xff0c;它可以被有效地访问、管理和更新。数据库的目的是为了提供一种可靠的…

React 脚手架

1.React 定义 React 脚手架&#xff08;React boilerplate&#xff09;是一种预先设置好的、可以快速启动 React 项目的工具。脚手架已经包含了 React、Webpack、Babel、ESLint、Jest 等一些常用的工具和库&#xff0c;并已经配置好了这些工具的参数&#xff0c;可以直接使用和…

vim的使用

vim文本编辑器 vim介绍命令模式光标移动选中内容复制内容粘贴内容删除撤销/恢复字符转换 编辑模式末行模式保存/退出查找行号显示文件切换 扩展 vim介绍 vim是Linux自带的文本编辑器&#xff0c;具有命令模式、编辑模式、末行模式三种模式。 模式间的切换&#xff1a; 命令模…

让三驾马车奔腾:华为如何推动空间智能化发展?

上个月&#xff0c;国务院常务会议审议通过了《关于促进家居消费的若干措施》&#xff0c;其中明确提出了“推动单品智能向全屋智能发展创新培育智能消费”“开展数字家庭建设试点”等推动全屋智能拼配发展的建议与方案。 可以说&#xff0c;以整屋为单位的空间智能品类&#x…

基于Java+SpringBoot+Vue的时间管理系统设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

数据链路层概述

数据传输过程如下&#xff1a; 数据包按上述过程传输&#xff0c;详见&#xff08;计算机网络概述三&#xff09;。在分析数据链路层时可以假象成其沿着水平传播。 这三段链路层的传播方式可能会有所不同。 基本概念&#xff1a; 链路&#xff1a;指一个节点到相邻节点的一段物…

influxDB

文章目录 版本2.0 数据结构Organization 组织Bucket 存储桶Measurementtagfieldtimestamp retention policy (RP) 保留策略Point 一条数据Series 一组数据 写入gzip压缩 查询FluxInfluxQL 官网 https://docs.influxdata.com/v1.8 中文翻译文档 https://influxdb-v1-docs-cn.cno…

MFC第二十九天 CView类的分支(以及其派生类的功能)、MFC六大关键技术

文章目录 CView类的分支CEditViewCHtmlViewMainFrm.h CMainFrame 类的接口CMainView .h CListCtrl与CListView的创建原理 CTreeViewCTreeCtrl类简介CTreeCtrl类的原理以及常用功能 MFC六大关键技术视图和带分割栏的框架开发与消息路由CLeftView.cppCRightView.hCRightView.cppC…

在Vue里,将当前窗口截图,并将数据base64转为png格式传给服务器

目录 前言 1、将当前窗口截图&#xff0c;并将数据存储下来 2、定义将base64转png的方法 3、完整代码 总结 前言 记录来源于需求 1、将当前窗口截图&#xff0c;并将数据存储下来 export default { data() {return {image: // 存储数据} }mounted() {setTimeout(() >…

Flink多流处理之connect拼接流

Flink中的拼接流connect的使用其实非常简单,就是leftStream.connect(rightStream)的方式,但是有一点我们需要清楚,使用connect后并不是将两个流给串联起来了,而是将左流和右流建立一个联系,作为一个大的流,并且这个大的流可以使用相同的逻辑处理leftStream和rightStream,也可以…

Python基础算法训练——函数与递归(51~55)

Python基础算法训练——函数与递归(51~55)51. 回文平方数 【题目描述】 回文数是指从左向右念和从右向左念都一样的数。如 12321 就是一个典型的回文数。 给定一个进制 B(2≤B≤20,由十进制表示),输出所有的大于等于 1 小于等于 300(十进制下)且它的平方用 B 进制表示时是…

java 合并两个List<String>

在 Java 中合并两个 List<String> 可以使用 addAll 方法或者使用 Stream 的 concat 方法。以下是两种常见的实现方法&#xff1a;1. 使用 addAll 方法&#xff1a; java List<String> list1 new ArrayList<>(Arrays.asList("A", "B", &…

《学习笔记》NC文件提取前-了解NC文件基本属性信息

NC文件提取前-了解NC文件基本属性信息 NetCDF是一组软件库和独立于机器的数据格式&#xff0c;支持创建、访问和共享面向阵列的科学数据。 在NC文件提取前&#xff0c;我们需要了解NC文件的基本信息&#xff1a;比如属性、维度、变量以及每个变量的基本情况。了解这些信息方便…

【golang】工作区与GOPATH

在学习go语言时&#xff0c;我们会从官网下载go语言的二进制包&#xff0c;然后解压并安装到某个目录&#xff0c;最后会配置环境变量&#xff0c;通过输入命令go version来验证是否安装成功。 配置了path环境后&#xff0c;我们还需要再配置3个环境变量&#xff0c;GOROOT、G…

完美的分布式监控系统——Prometheus(普罗米修斯)与优雅的开源可视化平台——Grafana(格鲁夫娜)

一、基本概念 1、之间的关系 prometheus与grafana之间是相辅相成的关系。作为完美的分布式监控系统的Prometheus&#xff0c;就想布加迪威龙一样示例和动力强劲。在猛的车也少不了仪表盘来观察。于是优雅的可视化平台Grafana出现了。 简而言之Grafana作为可视化的平台&#xff…

在excel调用SAP函数执行SAP数据查找或提交

1、下载插件 2、安装插件 3、执行函数 3.1 第一步 通过SAPRegister连接SAP服务器 var reg SAPRegister("10.10.14.15", "00", "mes", "AQ123456", "800") 需要改为实际的连接信息 "10.10.14.15" 为SAP服务器I…

嘉楠勘智k230开发板上手记录(三)--K230_RVV实战

按照K230_RVV实战.md操作 在k230_sdk目录下运行&#xff0c;Makefile里默认的toolchain路径是在/opt下的&#xff0c;需要拷贝过去 cp -r toolchain /opt/ make rt-smart-apps 进入目录 src/big/rt-smart 运行脚本 source smart-env.sh riscv64 配置环境变量 source smart-e…

随着野火的增加,甲烷排放也会增加

2020 年对加利福尼亚州造成严重破坏的野火使大气中充满了强效温室气体。 2020 年&#xff0c;溪火烧毁了北加州的内华达山脉。图片来源&#xff1a;Zachary Cava/Flickr&#xff0c;CC BY-NC-SA 2.0 2020 年&#xff0c;在高温和干旱的推动下&#xff0c;加州野火烧毁了超过160…

Verilog求log10和log2近似

Verilog求log10和log2近似 Verilog求10对数近似方法&#xff0c;整数部分用位置index代替&#xff0c;小数部分用查找表实现 参考&#xff1a; Verilog写一个对数计算模块Log2(x) FPGA实现对数log2和10*log10

56从零开始学Java之与字符串相关的正则表达式

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在上一篇文章中&#xff0c;壹哥给大家介绍了String字符串及其各种常用API方法&#xff0c;接下来壹哥…