当前位置: 首页 > 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;}
}

相关文章:

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

目录 一&#xff0c;反向代理 1&#xff0c;环境准备 2&#xff0c;配置代理服务器 3&#xff0c;在物理机上一管理员身份打开文本编辑器&#xff0c;编辑C:\Windows\System32\drivers\etc目录下的hosts文件 4&#xff0c;访问测试 5&#xff0c;查看日志&#xff0c;并记…...

编程小窍门: 一个简单的go mutex的小例子

本期小窍门用到了两个组件 mutex 这个类似其他语言的互斥锁waitGroup 这个类似其他语言的信号量或者java的栅栏锁 示例如下 func TestDoSomething04(t *testing.T) {total : 0var wg sync.WaitGroup{}var mut sync.Mutex{} for i : 0; i < 5000; i {go func() {wg.Ad…...

【工作记录】mysql中实现分组统计的三种方式

前言 实际工作中对范围分组统计的需求还是相对普遍的&#xff0c;本文记录下在mysql中通过函数和sql完成分组统计的实现过程。 数据及期望 比如我们获取到了豆瓣电影top250&#xff0c;现在想知道各个分数段的电影总数. 表数据如下: 期望结果: 实现方案 主要思路是根据s…...

马来西亚的区块链和NFT市场调研

马来西亚的区块链和NFT市场调研 基本介绍 参考&#xff1a; https://zh.wikipedia.org/wiki/%E9%A9%AC%E6%9D%A5%E8%A5%BF%E4%BA%9A zz制度&#xff1a;联邦议会制 语言文字&#xff1a; 马来语 民族&#xff1a; 69.4%原住民&#xff08;土著&#xff09;&#xff0c;23.2%…...

[保研/考研机试] KY109 Zero-complexity Transposition 上海交通大学复试上机题 C++实现

描述&#xff1a; You are given a sequence of integer numbers. Zero-complexity transposition of the sequence is the reverse of this sequence. Your task is to write a program that prints zero-complexity transposition of the given sequence. 输入描述&#xf…...

Linux零基础快速入门到精通

一、操作系统概述 二、初始Linux Linux的诞生 Linux内核 Linux发行版 小结 三、虚拟机 认识虚拟机 虚拟化软件及安装 VMware Workstation 17 Pro安装教程https://blog.csdn.net/weixin_62332711/article/details/128695978 远程连接Linux系统 小结 扩展-虚拟机快照 …...

ARM02汇编指令

文章目录 一、keil软件介绍1.1 创建工程1.2 解析start.s文件(重点)1.3 乱码解决1.4 更换背景颜色1.5 C语言内存分布1.6 解析map.lds文件(重点)1.7 常见错误信息1.8 仿真 二、汇编三种符号2.1 汇编指令2.2 伪指令2.3 伪操作 三、汇编指令格式3.1 格式3.2 注意事项 四、数据操作指…...

从初学者到专家:Java方法的完整指南

目录 一.方法的概念及使用 1.1什么是方法 1.2方法的定义 1.3方法的调用 1.4实参和形参的关系 1.5没有返回值的方法 1.6方法的意义 二.方法重载 2.1方法重载的实现 2.2方法重载的意义 2.3方法签名 一.方法的概念及使用 1.1什么是方法 方法就是一个代码片段. 类似于 …...

【生成式AI】ProlificDreamer论文阅读

ProlificDreamer 论文阅读 Project指路&#xff1a;https://ml.cs.tsinghua.edu.cn/prolificdreamer/ 论文简介&#xff1a;截止2023/8/10&#xff0c;text-to-3D的baseline SOTA&#xff0c;提出了VSD优化方法 前置芝士:text-to-3D任务简介 text-to-3D Problem text-to-3D…...

C++元编程——模拟javascript异步执行

javascript有一个期约调用&#xff0c;就是利用内部的一种协程机制实现的类似并行的操作。以下是用ChatGPT搞出来的一块演示代码&#xff1a; // 异步任务 function asyncTask() {return new Promise((resolve, reject) > {setTimeout(() > {const randomNumber Math.f…...

【JavaEE】懒人的福音-MyBatis框架—复杂的操作-动态SQL

【JavaEE】MyBatis框架要点总结&#xff08;3&#xff09; 文章目录 【JavaEE】MyBatis框架要点总结&#xff08;3&#xff09;1. 多表查询1.1 映射表resultMap1.2 只有部分属性跨表查询1.2.1 依照常规去写代码1.2.2 用标签去实现接口 1.3 分多步的解决方案1.4 与多线程的结合 …...

Springboot 默认路径说明

Spring Boot基本上是Spring框架的扩展&#xff0c;它消除了设置Spring应用程序所需的样板配置&#xff0c;极大的方便了开发者&#xff0c;其默认识别路径如下&#xff1a; Spring Boot 作为Spring默认将 /** 所有访问映射到以下目录&#xff1a; 1、classpath:/static 用于加…...

springboot注册拦截器与返回统一标准响应格式

响应对象ResultVO package com.example.poi.utils;import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.io.Serializable;/*** A…...

卷王特斯拉又全网降价了,卷死车企们

哈喽,大家好,今天媒介盒子小编又来跟大家分享软文推广的干货知识了,本篇分享的主要内容是&#xff1a;特斯无孔不入的营销手段。 1、特斯拉Model Y降价 车企要打架 自2023 年 8 月 14 日起&#xff0c;Model Y 长续航版起售价从 31.39 万元调整为 29.99 万元&#xff0c;Mode…...

wiley:revision 流程

1 上传修改后的word文件 注意&#xff1a;包括没标注修改位置的word文件和标注了修改位置的word文件 2 上传response回复文件 Your Author Response should include relevant comments that you have copied from the decision letter, along with your comments detailing …...

【论文阅读】基于深度学习的时序预测——Pyraformer

系列文章链接 论文一&#xff1a;2020 Informer&#xff1a;长时序数据预测 论文二&#xff1a;2021 Autoformer&#xff1a;长序列数据预测 论文三&#xff1a;2022 FEDformer&#xff1a;长序列数据预测 论文四&#xff1a;2022 Non-Stationary Transformers&#xff1a;非平…...

玩转IndexedDB,比localStorage、cookie还要强大的网页端本地缓存

随着浏览器的功能不断增强&#xff0c;越来越多的网站开始考虑&#xff0c;将大量数据储存在客户端&#xff0c;这样可以减少从服务器获取数据&#xff0c;直接从本地获取数据。 现有的浏览器数据储存方案&#xff0c;都不适合储存大量数据&#xff1a;Cookie 的大小不超过 4K…...

RedisDesktopManager连不上redis问题解决(小白版)

常见问题就是 redis.conf配置文件 a.将port 127.0.0.1这一行注释掉 b.protected-mode保护模式改为no 这个可以看到很多博主都说了&#xff0c;相信都搜到这里来了你们都弄了&#xff0c;我就不详细说了 防火墙开放端口 我说明我自己的问题以及解决方法 1、执行telnet 虚拟…...

蓝帽杯 取证2022

网站取证 网站取证_1 下载附件 并解压 得到了一个文件以及一个压缩包 解压压缩包 用火绒查病毒 发现后门 打开文件路径之后 发现了一句话木马 解出flag 网站取证_2 让找数据库链接的明文密码 打开www文件找找 查看数据库配置文件/application/database.php&#xff08;CodeI…...

MyBatis and or使用列表控制or条件

背景&#xff1a;最近项目需要&#xff0c;师傅可以查找订单&#xff0c;而师傅是指定可以服务2到3个区域&#xff0c;故需要使用到and, or条件的组合&#xff0c;以下记一下代码。 最重要的代码是&#xff1a; 1、构建List<Consumer<LambdaQueryWrapper<T>>&g…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...

LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)

在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...

五子棋测试用例

一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏&#xff0c;有着深厚的文化底蕴。通过将五子棋制作成网页游戏&#xff0c;可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家&#xff0c;都可以通过网页五子棋感受到东方棋类…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...