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…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙
Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...
CTF show 数学不及格
拿到题目先查一下壳,看一下信息 发现是一个ELF文件,64位的 用IDA Pro 64 打开这个文件 然后点击F5进行伪代码转换 可以看到有五个if判断,第一个argc ! 5这个判断并没有起太大作用,主要是下面四个if判断 根据题目…...
