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

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目录 然后包含&#xff1a; #include <QtSerialBus/qmodbustcpclient.h>...

初识c++(命名空间,缺省参数,函数重载)

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

印尼Facebook直播网络需要达到什么要求?

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

力扣题解(最长回文子串)

5. 最长回文子串 给你一个字符串 s&#xff0c;找到 s 中最长的 回文子串 。思路&#xff1a; 对于第i个字符&#xff0c;可能的回文子串构成方式有两种&#xff0c;一种是以i位置元素为中心元素&#xff0c;向着两边扩展&#xff0c;一种是以i位置和i1位置元素为中心&#xf…...

数据湖表格式 Hudi/Iceberg/DeltaLake/Paimon TPCDS 性能对比(Spark 引擎)

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

脚本练习-每5分钟执行一次获取当前服务器的基本情况

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

技术探索之kotlin浅谈

Kotlin是一种静态类型编程语言&#xff0c;它运行在Java虚拟机&#xff08;JVM&#xff09;上&#xff0c;可以与Java代码互操作。Kotlin由JetBrains开发&#xff0c;是一种现代、简洁且安全的编程语言。它在2011年首次亮相&#xff0c;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 中&#xff0c;设置 SGD 优…...

机器学习基本概念,Numpy,matplotlib和张量Tensor知识进一步学习

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

博客前端项目学习day01

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

java Collections.synchronizedCollection方法介绍

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

力扣每日一题:3011. 判断一个数组是否可以变为有序

力扣官网&#xff1a;前往作答&#xff01;&#xff01;&#xff01;&#xff01; 今日份每日一题&#xff1a; 题目要求&#xff1a; 给你一个下标从 0 开始且全是 正 整数的数组 nums 。 一次 操作 中&#xff0c;如果两个 相邻 元素在二进制下数位为 1 的数目 相同 &…...

ubuntu 上vscode +cmake的debug调试配置方法

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

使用Redis实现签到功能:Java示例解析

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

tableau标靶图,甘特图与瀑布图绘制 - 9

标靶图&#xff0c;甘特图与瀑布图 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…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言&#xff1a;我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM&#xff08;Java Virtual Machine&#xff09;让"一次编写&#xff0c;到处运行"成为可能。这个软件层面的虚拟化让我着迷&#xff0c;但直到后来接触VMware和Doc…...

【Pandas】pandas DataFrame dropna

Pandas2.2 DataFrame Missing data handling 方法描述DataFrame.fillna([value, method, axis, …])用于填充 DataFrame 中的缺失值&#xff08;NaN&#xff09;DataFrame.backfill(*[, axis, inplace, …])用于**使用后向填充&#xff08;即“下一个有效观测值”&#xff09…...