LVS+Nginx高可用集群---Nginx进阶与实战
1.Nginx中解决跨域问题
两个站点的域名不一样,就会有一个跨域问题。
跨域问题:了解同源策略:协议,域名,端口号都相同,只要有一个不相同那么就是非同源。
CORS全称Cross-Origin Resource Sharing,意为跨域资源共享。当一个资源去访问另一个不同域名或者同域名不同端口的资源时,就会发出跨域请求。如果此时另一个资源不允许其进行跨域资源访问,那么访问就会遇到跨域问题。
跨域指的是浏览器不能执行其它网站的脚本。是由浏览器的同源策略造成的,是浏览器对JavaScript 施加的安全限制。

前端有跨域吗?有。请求资源跨域就有。记住同源策略问题。
Nginx跨域配置:
#允许跨域请求的域,*代表所有
add_header ‘Access-Control-Allow-Origin’ *;
#允许带上cookie请求
add_header ‘Access-Control-Allow-Credentials’ ‘true’;
#允许请求的方法,比如 GET/POST/PUT/DELETE
add_header ‘Access-Control-Allow-Methods’ *;
#允许请求的header
add_header ‘Access-Control-Allow-Headers’ *;

2.nginx中配置静态资源防盗链
Nginx配置信息:
#对源站点验证
valid_referers *.nly.com;
#非法引入会进入下方判断
if ($invalid_referer) {return 404;
}
解析:匹配上面的验证规则(域名为.nly.com)
匹配的话会继续往下加载location配置。
没有匹配的话,就会返回404
3.nginx的模块化设计解析

Nginx core:实现了底层的通信协议。也为其他的一些模块和nginx的进程内容提供一个运行时的环境(类似于JVM),协调其他模块。
Event module:epoll.操作操作系统层面的事件处理机制。
Phase handler:处理客户端一些请求,以及一些相应内容的响应,
Output filter:过滤器。过滤内容返回浏览器。类比gzip(压缩模块)
Upstream:反向代理模块
Load balancer:负载均衡器。实现集群,实现负载均衡的配置。
Extend module:第三方模块。
nginx-1.22.0安装包目录下的内容。

4.四层,七层DNS负载均衡
四层负载均衡:主要是基于ip和端口的负载均衡。原理是转发请求到后台的服务器。它是负责转发,并且会记录连接是由那个服务器处理的,后续这个连接的请求会由同一台去处理。 (相当于常连接)
F5硬件负载均衡:成本高,稳定不错。商业级别的负载均衡。
LVS四层负载均衡:linux内核负载均衡。主要是用来转发请求的。
Hapooxy四层负载均衡:灵活性高。
Nginx四层负载均衡。
七层负载均衡:是基于url和ip的负载均衡。基于应用层,针对于http协议的负载均衡。
Nginx七层负载均衡:
Haproxy七层负载均衡:灵活性高
Apache七层负载均衡:并发不如nginx。
四层多用LVS,七层多用nginx.
七层主要是针对http协议,适用于web服务器,比如tomcat,Apache,nginx。七层会处理请求,比如:压缩css,js等
四层主要是针对tcp/udp协议。主要运用于转发请求而不是处理。
DNS地域负载均衡:


5.JMet测试单节点与集群的并发异常率
Jmeter工具:测试网站性能,apache.
使用jmeter工具。注意点:如何使用jmeter?配置环境变量。安装时候需要修改哪些变量(注册表的信息,添加注册表对应位置的权限,创造对应的文件,然后修改了#server.rmi.ssl.disable=false 去掉注释 修改末尾的false–>true Jmeter)
测试单个tomcat运行:(用户即线程)
1.50个用户,100次请求–无异常
2.200个用户,100次请求–异常率高达18.51%。
集群测试:
测试结果对比:

区别在于平均值,异常率,以及吞吐量。
正常情况下,公司异常率有临界点。超过临界点,并发就认为已经封顶了。然后就需要做一些处理,例如,硬件配置的升级,扩容。
6.负载均衡
负载均衡值轮巡
Nginx访问多台服务器时,采用的是轮询的方式。
负载均衡之权重:
根据机械性能配置权重。数值越小,访问的频率越低。

7.upstream 指令
upstream 指令参数值-maxconns

max_conns:限制每台server的连接数,用于保护避免过载,可起到限流的作用
配置模板:设置为1,避免使用到共享内存
worker进程设置1个,便于测试观察成功的连接数
worker_processes 1;upstream tomcats {server 192.168.1.173:8080 max_conns=2;server 192.168.1.174:8080 max_conns=2;server 192.168.1.175:8080 max_conns=2;
}
测试:jmeter配置间隔时间为0.
当配置的连接数达到最大连接数(3*2=6),就无法处理请求了。
slow_start:将不健康的服务器变成健康的服务器

配置参考如下:
upstream tomcats {
server 192.168.1.173:8080 weight=6 slow_start=60s;
server 192.168.1.190:8080;
server 192.168.1.174:8080 weight=2;server 192.168.1.175:8080 weight=2;
}
down:用于标记服务结点不可用
配置模板:
upstream tomcats {
server 192.168.1.173:8080 down;
server 192.168.1.190:8080;
server 192.168.1.174:8080 weight=1;server 192.168.1.175:8080 weight=1;
}
Backup:表示当前服务器节点是备用机,只有在其他服务器都宕机以后,自己才会加入集群中,被用户访问到。
配置模板:
upstream tomcats {
server 192.168.1.173:8080 backup;
server 192.168.1.190:8080;
server 192.168.1.174:8080 weight=1;server 192.168.1.175:8080 weight=1;
}
max_fails:表示失败几次,则标记server已经宕机,剔除上游服务。
fail_timeout:表示失败的重试时间。


max_fails=2 fail_timeout=15s
则代表在15秒内请求某一server失败达到2次后,则认为该server已经挂了或者宕机了,随后再过15秒,这15秒内不会有新的请求到达刚刚挂掉的节点上,而是会请求到正常运作的server,15秒后会再有新请求尝试连接挂掉的server,如果还是失败,重复上一过程,直到恢复。
8.使用keepalived提高吞吐量
配置信息:
Keepalive:表示的是要保持的连接数(将一些链接作为常链接)
keepalived: 设置长连接处理的数量
proxy_http_version:设置长连接http版本为1.1
proxy_set_header:清除connection header 信息
官方模版:

自定义模板:

提升了吞吐量,以及接受跟传输的量(kb)
9.负载均衡原理-ip_hash;url hash 与least_conn
Ip_hash:可以保证用户访问可以请求到上游服务中固定的服务器,前提是用户ip没有发生改变(本质上是根据用户ip hash了以后,根据hash值再分配到一台特定的服务器里)
hash算法:

配置模板:
upstream tomcats {ip_hash;server 192.168.1.173:8080;server 192.168.1.174:8080 down;server 192.168.1.175:8080;
}
具体算法:
可以在/home/software/nginx-1.22.0/src/http/modules目录下看到算法。
当需要临时将一台服务器进行移除时,需要标记该台服务器为down.不能直接移除
当使用hash算法时,算法中使用的是ip地址的前三部分。举例:192.168.56.102 hash算法中使用的是192.168.56来进行计算的
一致性hash算法
hash算法带来的问题:后台服务器的节点的增多或者减少,缓存等问题可以会降低效率

一致性hash算法的高明之处在于:保证绝大多数的请求能访问到原来的计算机节点,仅仅只有一部分的请求会发生变化
(降低节点宕机或者新增节点时,对于用户的影响或者可以说缓存的影响)
负载均衡之url_hash:
原理:hash处理url,然后求模,计算index.(根据index去访问)

配置模板:
upstream tomcats {
# url hash
hash $request_uri;
# 最少连接数
# least_conn
server 192.168.1.173:8080;
server 192.168.1.174:8080;
server 192.168.1.175:8080;
}
server {
listen 80;
server_name www.tomcats.com;
location / {proxy_pass http://tomcats;
}
}
Url:使用www.nly.com/nginx-url-hash/account跟使用www.nly.com/nginx-url-hash/account/的结果不同
负载均衡:Least_conn:根据哪台服务器的连接数最少就请求哪一台。
10.Nginx 控制浏览器缓存
缓存:

浏览器缓存加速单个用户的访问。Nginx缓存,优化在内网的传输(提升所有访问到nginx端的用户;提升访问上游(upstream)服务器的速度;用户访问仍然会产生流量)。(内网请求到不同的服务器,会有带宽的损耗,所以会有请求以及响应的时间)
浏览器缓存,当status显示为304时,表示的是缓存.Expire限制的是过期时间。
通过设置expire定义过期时间。看cache-control选项:

expire设置模板:
location /files {alias /home/imooc;# expires 10s;设置过期时间# expires @22h30m;设置持续多久# expires -1h;距离现在时间的前一个小时已经失效了# expires epoch;表示no-cache# expires off;默认nginx中的expire处于关闭状态。浏览器端还是有默认的机制的expires max;最大时间,即永不过期
}
11.Nginx 反向代理缓存
配置模板:
# proxy_cache_path 设置缓存目录
# keys_zone 设置共享内存以及占用空间大小
# max_size 设置缓存大小
# inactive 超过此时间则被清理
# use_temp_path 临时目录,使用后会影响nginx性能
proxy_cache_path /usr/local/nginx/upstream_cache keys_zone=mycache:5m max_size=1g inactive=1m use_temp_path=off;location / {proxy_pass http://tomcats;# 启用缓存,和keys_zone一致proxy_cache mycache;# 针对200和304状态码缓存时间为8小时proxy_cache_valid 200 304 8h;
}
相关文章:
LVS+Nginx高可用集群---Nginx进阶与实战
1.Nginx中解决跨域问题 两个站点的域名不一样,就会有一个跨域问题。 跨域问题:了解同源策略:协议,域名,端口号都相同,只要有一个不相同那么就是非同源。 CORS全称Cross-Origin Resource Sharingÿ…...
Appium环境搭建,华为nova8鸿蒙系统(包括环境安装,环境配置)(一)
1.安装代码工具包 appium python client pip install appium-python-client 2.安装JDK 参考链接: antjmeterjenkins从0实现持续集成(Windows)-CSDN博客 3.下载并安卓SDK 下载地址:AndroidDevTools - Android开发工具 Android…...
【React】React18 Hooks 之 useReducer
目录 useReducer案例1:useReducer不带初始化函数案例2:useReducer带初始化函数注意事项1:dispatch函数不会改变正在运行的代码的状态注意事项2:获取dispatch函数触发后 JavaScript 变量的值注意事项3:触发了reducer&am…...
【cocos creator】2.4.x实现简单3d功能,点击选中,旋转,材质修改,透明材质
demo下载:(待审核) https://download.csdn.net/download/K86338236/89527924 const {ccclass, property } = cc._decorator;const enum box_color {NORMAL = 0,DASHED_LINE = 1,//虚线TRANSLUCENT = 2,//半透明 }@ccclass export default class main extends cc.Component {…...
Android EditText+ListPopupWindow实现可编辑的下拉列表
Android EditTextListPopupWindow实现可编辑的下拉列表 📖1. 可编辑的下拉列表✅步骤一:准备视图✅步骤二:封装显示方法✅步骤三:获取视图并监听 📖2. 扩展上下箭头✅步骤一:准备上下箭头icon图标✅步骤二&…...
dify/api/models/task.py文件中的数据表
源码位置:dify/api/models/task.py CeleryTask 表结构 字段英文名数据类型字段中文名字备注idIntegerID自增主键,任务ID序列task_idString任务ID唯一任务标识statusString状态默认值为 PENDINGresultPickleType结果可为空date_doneDateTime完成日期默认…...
hdu物联网硬件实验3 按键和中断
学院 班级 学号 姓名 日期 成绩 实验题目 按键和中断 实验目的 实现闪灯功能转换 硬件原理 无 关键代码及注释 /* Button Turns on and off a light emitting diode(LED) connected to digital pin 13, when pressing a pushbutton attached…...
pytorch通过 tensorboardX 调用 Tensorboard 进行可视化
示例 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader from torchvision import datasets, transformsfrom tensorboardX import SummaryWriter# 定义神经网络模型 class SimpleCNN(nn.Module):def __init__(self):…...
linux查看目录下的文件夹命令,find 查找某个目录,但是不包括这个目录本身?
linux查看目录下的文件夹命令,find 查找某个目录,但是不包括这个目录本身? Linux中查看目录下的文件夹的命令是使用ls命令。ls命令用于列出指定目录中的文件和文件夹。通过不同的选项可以实现显示详细信息、按照不同的排序方式以及使用不同的…...
单一设备上的 2 级自动驾驶:深入探究 Openpilot 的奥秘
Level 2 Autonomous Driving on a Single Device: Diving into the Devils of Openpilot 单一设备上的 2 级自动驾驶:深入探究 Openpilot 的奥秘 Abstract Equipped with a wide span of sensors, predominant autonomous driving solutions are becoming more m…...
向github远程仓库中push,要求使用token登录
Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. 如上,当向github远程仓库push时,输入github的用户名和密码出现如上错误,要求使用token登录,此时只需要用户…...
最全windows提权总结(建议收藏)
当以低权用户进去一个陌生的windows机器后,无论是提权还是后续做什么,第一步肯定要尽可能的搜集信息。知己知彼,才百战不殆。 常规信息搜集 systeminfo 查询系统信息hostname 主机名net user 查看用户信息netstat -ano|find "3389&quo…...
Could not find Chrome (ver.xxxxx). This can occur if either\n
文章目录 错误解决方法 错误 Could not find Chrome (ver. 119.0.6045.105). This can occur if either\n 1. you did not perform an installation before running the script (e.g. npx puppeteer browsers install chrome) or\n 2. your cache path is incorrectly configu…...
Conmi的正确答案——ESP32-C3开启安全下载模式
IDF版本:4.4.7 注意事项:一旦烧录“安全下载模式”,模组将无法被读取或清理,只能通过eclipse原项目烧录程序进行重新烧录,无法再烧录其他固件。 20240703110201——追加解法,暂时无法解安全下载模式 &…...
从零开始实现大语言模型(一):概述
1. 前言 大家好,我是何睿智。我现在在做大语言模型相关工作,我用业余时间写一个专栏,给大家讲讲如何从零开始实现大语言模型。 从零开始实现大语言模型是了解其原理及领域大语言模型实现路径的最好方法,没有之一。已有研究证明&…...
科普文本分类背后的数学原理——最新版《数学之美》第14、15章读书笔记
新闻分类,或广义上的文本分类,其核心任务是根据文本内容将相似文本聚合在同一类别中。在新闻领域,这意味着将报道划分为财经、体育、军事等不同主题。人类执行此任务时,通过阅读和理解新闻的主旨来进行归类。然而,作者…...
华为云生态和快速入门
华为云生态 新技术催生新物种,新物种推动新生态 数字技术催生各类运营商去重塑并颠覆各行业的商业模式 从业务层面看,企业始终如一的目标是业务增长和持续盈利,围绕这些目标衍生出提质、增效、降本、安全、创新和合规的业务诉求,…...
卷积神经网络——LeNet——FashionMNIST
目录 一、整体结构二、model.py三、model_train.py四、model_test.py GitHub地址 一、整体结构 二、model.py import torch from torch import nn from torchsummary import summaryclass LeNet(nn.Module):def __init__(self):super(LeNet,self).__init__()self.c1 nn.Conv…...
k8s-第十二节-DaemonSet
DaemonSet是什么? DaemonSet 是一个确保全部或者某些节点上必须运行一个 Pod的工作负载资源(守护进程),当有node(节点)加入集群时, 也会为他们新增一个 Pod。 下面是常用的使用案例: 可以用来部署以下进程的pod 集群守护进程,如Kured、node-problem-detector日志收集…...
Mysql-内置函数
一.什么是函数? 函数是指一段可以直接被另外一段程序调用的程序或代码。 mysql内置了很多的函数,我们只需要调用即可。 二.字符串函数 MySQL中内置了很多字符串函数: 三.根据需求完成以下SQL编写 由于业务需求变更,企业员工的工号,统一为5位数,目前不足5位数的全…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
