Nginx -Web服务器/反向代理/负载均衡
文章目录
- 一、web服务
- 1.1 nginx安装
- 1.2 配置文件
- 1.3 Nginx处理Web机制
- 二、反向代理
- 三、负载均衡
- 3.1 分类
- 3.2 负载相关配置文件
- 3.3 keepalive 提高吞吐量
- 3.4 配置浏览器缓存
- 附、JMeter性能测试工具
以赛促学内容,大概率感觉会使用nginx做web服务,特对nginx做总结归纳.
Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的。从2004年发布至今,凭借开源的力量,已经接近成熟与完善。Nginx功能丰富,可作为HTTP服务器,也可作为反向代理服务器,邮件服务器。
官网:http://nginx.org/ https://github.com/nginx/nginx.org
一、web服务
高可用 keepalived
1.1 nginx安装
# 查询
nginx -v #安装版本
dnf search nginx
#安装
dnf install nginx -y
# 查找配置文件
rpm -qa |grep nginx
rpm -qa |grep nginx
rpm -qc nginx-1.20.1-10.el9.x86_64
vim /etc/nginx/nginx.conf
#验证配置文件,也显示位置
nginx -t
......
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
......
#启动
systemctl enable --now nginx.service
systemctl status nginx.service
ss -ntlp |grep 80
安装验证
1.2 配置文件
#备份配置文件
mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
#重新配置文件
touch nginx.conf
vim nginx.conf
.........
# events 块用于配置连接处理的设置。它通常位于 http 块之外,
#但也可以放在 server 或 location 块内。不写会报错.
events {
}http {server {listen 80; #端口server_name localhost; #IP 域名root /usr/share/nginx/lih;# 根目录 不写则默认/usr/share/nginx/html;index haha.html;# 首页 不写则默认index}
}
.........
nginx -s reload # 重新加载配置文件,-s 发送命令.Nginx 会尝试平滑地重启工作进程.
nginx -t #用于检查 Nginx 配置文件的语法是否正确
配置中http-server中的location有更复杂的配置。可有正在表达式~
#无参数是匹配root/app中的index文件location /app {root /usr/share/nginx/lih;}
#~正则表达式,制访问6-9的文件,可将root路径提出。root /var/www/localhost;location ~ /files/file[6-9].file{ }
# 307 重新定向 访问temp自动到/app/haha.htmlroot /var/www/localhost; location /temp{return 307 /app/haha.html;}
# 精确匹配location =/temp{root /var/www/localhost;}
# 增加不同的服务端口89server {listen 89;server_name localhost;#默认#root /usr/share/nginx/html下的index.htmllocation /app {root /usr/share/nginx/lih2;# index默认是app里的index.html}}# 增加不同的服务端口90server {listen 90;server_name localhost;location /views {root /opt/RuoYi-Vue/ruoyi-ui/src;#程序文件index index.vue;# vue的文件架构还需研究下}#和上面效果一样 使用alias别名,隐去路径。location /static {alias /opt/RuoYi-Vue/ruoyi-ui/src/views;index index.vue;}}
1.3 Nginx处理Web机制
异步,多路复用。
配置文件中的events 块用于配置连接处理的设置。案例如下:
events {worker_connections 1024; # 默认每个工作进程允许的最大并发连接数multi_accept on; # 允许多个连接同时被接受use epoll; # 默认使用 epoll 事件模型
}
# epoll是Linux下的一种I/O复用技术,主要用于提高高并发服务器程序的性能。如图相对于传统事件处理,减少了进程。
#ss:专门用于显示套接字统计信息,包括TCP和UDP套接字的状态、端口号、连接状态等。
#优势在于可以更快地显示大量套接字连接的信息。
ss -ntlp |grep 80
#ps:提供进程的静态信息,包括进程ID (PID)、CPU和内存使用情况、状态、启动时间等。
#支持多种输出格式,如较详细的长格式(-l选项)或完整格式(-f选项)。
ps -ef |grep nginx
二、反向代理
server {listen 80;server_name localhost;location / {proxy_pass http://tomcats;# 需和upstream的名字一样}
}
# 配置上游服务器
upstream tomcats { server localhost:89;
}
三、负载均衡
3.1 分类
负载均衡是一种优化手段,用于在多个服务器之间均匀地分配工作负载,从而提高系统整体的性能和可靠性
载体维度分类硬件负载均衡:这种方案通常使用专用的硬件设备,如F5和A10,具有高性能和全面的功能,但成本较高且扩展性有限。
软件负载均衡:通过在标准服务器上运行的软件实现,例如Nginx、HAProxy和LVS。这些软件负载均衡器具有部署简单、成本低、灵活性高等优点。
网络通信分类 四层负载均衡:基于传输层的IP地址和端口进行请求转发,性能较好,通常用于处理大量网络流量。
七层负载均衡:基于应用层信息(如URL、HTTP头部等)进行决策,可以提供更细粒度的控制,常用于需要更智能路由的场景
类比
3.2 负载相关配置文件
http {# 反向代理服务server {listen 80;server_name localhost;location / {proxy_pass http://tomcats;# 需和upstream的名字一样}}# 配置上游服务器upstream tomcats { server localhost:89;server localhost:90;# ip_hash;#hash #hash算法分配,即每个ip机器对应固定# least_conn; #最少连接#hash $request_uri;#hash根据url算法#server localhost:89 weight =1;#默认为1#server localhost:90 weight= 5;}# 89端口服务server {listen 89;server_name localhost;root /usr/share/nginx/lih2;#更换根路径#index index.html;}#90端口服务server {listen 90;server_name localhost;#index index.html; 不写使用默认根路径和默认主文件}
}
分别显示89,90轮询服务,默认为weight=1平均轮询。
#nginx 做负载均衡的案例server {listen 80; #端口server_name localhost; #IP 域名location / {proxy_pass http://proxy;}}# 两个服务端口upstream proxy{server localhost:802;server localhost:803;}# 不要再加httpserver服务端口重复了# server {# listen 802;# server_name localhost;# }#server {# listen 803;# server_name localhost;#}
# 配置上游服务器
upstream tomcats {server localhost:89 weight =1;#默认为1server localhost:90 down;server localhost:91 backup;server localhost:92 fail_timeout=10#默认10s
}
3.3 keepalive 提高吞吐量
upstream tomcats {server localhost:90 ;keepalive 32;#32个线程,不用反复消失创建
}server {listen 80;server_name localhost;location / {proxy_pass http://tomcats;proxy_http_version 1.1;# keepalive相关,具体各位自行研究proxy_set_header Connection "";# keepalive相关,具体各位自行研究}
}
JMeter测试吞吐量为2倍
3.4 配置浏览器缓存
# 各自有空去研究吧
proxy_cache_path /...
附、JMeter性能测试工具
Meter是一种可以在不同协议或技术上执行负载测试,面向性能的业务(功能)测试,回归测试等的软件
官网:https://jmeter.apache.org/
教程文档参考:
https://blog.csdn.net/yaorongke/article/details/82799609
https://iowiki.com/jmeter/jmeter_quick_guide.html
相关文章:

Nginx -Web服务器/反向代理/负载均衡
文章目录 一、web服务1.1 nginx安装1.2 配置文件1.3 Nginx处理Web机制 二、反向代理三、负载均衡3.1 分类3.2 负载相关配置文件3.3 keepalive 提高吞吐量3.4 配置浏览器缓存 附、JMeter性能测试工具 以赛促学内容,大概率感觉会使用nginx做web服务,特对nginx做总结归纳. Nginx是…...

机器人三定律及伦理分析
全世界的机器人定律并没有一个统一的标准或体系,但是在科学文献中,最广为人知的是由科幻小说家阿西莫夫提出的“机器人三定律”。本文将以这些定律为基础,分析现有的机器人伦理和实际应用中的问题,给出若干实例,并对相…...

自动驾驶算法———车道检测(一)
“ 在本章中,我将指导您构建一个简单但有效的车道检测管道,并将其应用于Carla 模拟器中捕获的图像。管道将图像作为输入,并产生车道边界的数学模型作为输出。图像由行车记录仪(固定在车辆挡风玻璃后面的摄像头)捕获。…...

小程序自学教程
从0开始搭建微信小程序前后台 0、准备 如何安装?去CSDN搜索“xxx安装教程”即可。 (1)工具 IntelliJ IDEA(必选)——Java开发集成环境,可以前后端同时使用 Web Storm——web开发集成环境,主要…...

How do I format markdown chatgpt response in tkinter frame python?
题意:怎样在Tkinter框架中使用Python来格式化Markdown格式的ChatGPT响应? 问题背景: Chatgpt sometimes responds in markdown language. Sometimes the respond contains ** ** which means the text in between should be bold and ### te…...

vs2019 QT无法打开源文件QModbusTcpClient
vs2019无法打开源文件QModbusTcpClient 如果配置的msvc2019,则查找到Include目录 然后包含: #include <QtSerialBus/qmodbustcpclient.h>...

初识c++(命名空间,缺省参数,函数重载)
一、命名空间 1、namespace的意义 在C/C中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全 局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名 冲突…...

印尼Facebook直播网络需要达到什么要求?
在全球化浪潮的推动下,海外直播正受到企业、个人和机构的广泛关注和青睐。无论是用于营销、推广还是互动,海外直播为各种组织提供了更多机会和可能性。本文将探讨在进行印尼Facebook直播前,需要满足哪些网络条件以确保直播的质量和用户体验。…...

力扣题解(最长回文子串)
5. 最长回文子串 给你一个字符串 s,找到 s 中最长的 回文子串 。思路: 对于第i个字符,可能的回文子串构成方式有两种,一种是以i位置元素为中心元素,向着两边扩展,一种是以i位置和i1位置元素为中心…...

数据湖表格式 Hudi/Iceberg/DeltaLake/Paimon TPCDS 性能对比(Spark 引擎)
当前,业界流行的集中数据湖表格式 Hudi/Iceberg/DeltaLake,和最近出现并且在国内比较火的 Paimon。我们现在看到的很多是针对流处理场景的读写性能测试,那么本篇文章我们将回归到大数据最基础的场景,对海量数据的批处理查询。本文…...

脚本练习-每5分钟执行一次获取当前服务器的基本情况
设计一个shell程序,每5分钟执行一次获取当前服务器的基本情况(内存使用率,CPU负载,I/O,磁盘使用率),保存到120.20.20.20数据库上数据库帐号aaa密码bbb库名test表名host 创建一个名为server_stat…...

技术探索之kotlin浅谈
Kotlin是一种静态类型编程语言,它运行在Java虚拟机(JVM)上,可以与Java代码互操作。Kotlin由JetBrains开发,是一种现代、简洁且安全的编程语言。它在2011年首次亮相,2017年被谷歌宣布为Android官方开发语言。…...

机器学习之常用优化器
机器学习之常用优化器 1、SGD 优化器1.2、 SGD 的优缺点 2、 Adam 优化器2.1、设置 Adam 优化器2.2、使用 Adam 优化器的训练流程2.3、Adam 优化器的优缺点 3. AdamW 优化器3.1、示例3.2、训练过程3.3、AdamW 优化器的优点 1、SGD 优化器 在 PyTorch 中,设置 SGD 优…...

机器学习基本概念,Numpy,matplotlib和张量Tensor知识进一步学习
机器学习一些基本概念: 监督学习 监督学习是机器学习中最常见的形式之一,它涉及到使用带标签的数据集来训练模型。这意味着每条训练数据都包含输入特征和对应的输出标签。目标是让模型学会从输入到输出的映射,这样当给出新的未见过的输入时…...

博客前端项目学习day01
这里写自定义目录标题 登录创建项目配置环境变量,方便使用登录页面验证码登陆表单 在VScode上写前端,采用vue3。 登录 创建项目 检查node版本 node -v 创建一个新的项目 npm init vitelatest blog-front-admin 中间会弹出询问是否要安装包,…...

java Collections.synchronizedCollection方法介绍
Collections.synchronizedCollection 是 Java 中的一个实用方法,用于创建一个线程安全的集合。它通过包装现有的集合对象来实现线程安全,以确保在多线程环境中对集合的访问是安全的。 主要功能 线程安全:通过同步包装现有的集合,使得在多线程环境中对集合的所有访问(包括…...

力扣每日一题:3011. 判断一个数组是否可以变为有序
力扣官网:前往作答!!!! 今日份每日一题: 题目要求: 给你一个下标从 0 开始且全是 正 整数的数组 nums 。 一次 操作 中,如果两个 相邻 元素在二进制下数位为 1 的数目 相同 &…...

ubuntu 上vscode +cmake的debug调试配置方法
在ubuntu配置pcl点云库以及opencv库的时候,需要在CMakeLists.txt中加入相应的代码。配置完成后,无法调试,与在windows上体验vs studio差别有点大。 找了好多调试debug配置方法,最终能用的有几种,但是有一种特别好用&a…...

使用Redis实现签到功能:Java示例解析
使用Redis实现签到功能:Java示例解析 在本博客中,我们将讨论一个使用Redis实现的签到功能的Java示例。该示例包括两个主要方法:sign()和signCount(),分别用于用户签到和计算用户当月的签到次数。 1. 签到方法:sign()…...

tableau标靶图,甘特图与瀑布图绘制 - 9
标靶图,甘特图与瀑布图 1. 标靶图绘制1.1 筛选器筛选日期1.2 条形图绘制1.3 编辑参考线1.4 设置参考线1.5 设置参考区间1.6 四分位设置1.7 其他标靶图结果显示 2.甘特图绘制2.1 选择列属性2.2 选择列属性2.3 创建新字段2.4 设置天数大小及颜色 3. 瀑布图绘制3.1 she…...

双向链表专题
在之前的单链表专题中,了解的单链表的结构是如何实现的,以及学习了如何实现单链表得各个功能。单链表虽然也能实现数据的增、删、查、改等功能,但是要找到尾节点或者是要找到指定位置之前的节点时,还是需要遍历链表,这…...

SpringCoud组件
一、使用SpringCloudAlibaba <dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2023.0.1.0</version><…...

向量的定义和解释
这是一个向量: 向量具有大小(大小)和方向: 线的长度显示其大小,箭头指向方向。 在这里玩一个: 我们可以通过将它们从头到尾连接来添加两个向量: 无论我们添加它们的顺序如何,我们都…...

IoTDB 集群高效管理:一键启停功能介绍
如何快速启动、停止 IoTDB 集群节点的功能详解! 在部署 IoTDB 集群时,对于基础的单机模式,启动过程相对简单,仅需执行 start-standalone 脚本来启动 1 个 ConfigNode 节点和 1 个 DataNode 节点。然而,对于更高级的分布…...

一个spring boot项目的启动过程分析
1、web.xml 定义入口类 <context-param><param-name>contextConfigLocation</param-name><param-value>com.baosight.ApplicationBoot</param-value> </context-param> 2、主入口类: ApplicationBoot,SpringBoot项目的mian函数 SpringBo…...

智驭未来:人工智能与目标检测的深度交融
在科技日新月异的今天,人工智能(AI)如同一股不可阻挡的浪潮,正以前所未有的速度重塑着我们的世界。在众多AI应用领域中,目标检测以其独特的魅力和广泛的应用前景,成为了连接现实与智能世界的桥梁。本文旨在…...

01MFC建立单个文件类型——画线
文章目录 选择模式初始化文件作用解析各初始化文件解析 类导向创建鼠标按键按下抬起操作函数添加一个变量记录起始位置注意事项代码实现效果图 虚实/颜色线 选择模式 初始化文件作用解析 运行: 各初始化文件解析 MFC(Microsoft Foundation Classes&am…...

免杀中用到的工具
🟢 绝大部分无法直接生成免杀木马,开发、测试免杀时会用到。 工具简称 概述 工具来源 下载路径 x64dbg 中文版安装程序(Jan 6 2024).exe 52pojie hellshell 官方的加密或混淆shellcode github Releases ORCA / HellShell GitLab hellshe…...

[vite] Pre-transform error: Cannot find package pnpm路径过长导致运行报错
下了套vue3的代码,执行pnpm install初始化,使用vite启动,启动后访问就会报错 报错信息 ERROR 16:40:53 [vite] Pre-transform error: Cannot find package E:\work\VSCodeProjectWork\jeecg\xxxxxxxxx-next\xxxxxxxxx-next-jeecgBoot-vue3\…...

Promise总结
Promise.then() 的返回值仍然是 Promise 对象 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>D…...