nginx反向代理及负载均衡的实现
目录
1.nginx反向代理
2.nginx负载均衡
3.nginx反向代理及负载均衡实现
nginx反向代理
4台主机都需要的操作:
两台服务器操作:
两台主机服务器进行测试;
nginx负载均衡配置
4.nginx配置其他参数
多虚拟机访问
后端服务器日志中需要记录客户端真实ip
nginx设置不同的url访问不同页面,可以实现动静分离
在代理主机上设置:
在web服务器上:
测试:
5.nginx的upstream其他参数
backup:
down:
1.nginx反向代理
原理:客户端向反向代理服务器发送请求,反向代理服务器将请求发送给相应服务器,然后服务器收到并将响应返回给反向代理服务器,由反向代理服务器将响应返回给客户端。
优点:1.可以有效防止对服务器的恶意攻击。2.减少服务器的压力。3.提高访问速度。
2.nginx负载均衡
负载均衡:防止一台服务器宕机之后,业务出现阻断。
优点:减少服务器压力,解决某时刻高并发。
3.nginx反向代理及负载均衡实现
nginx反向代理
配置准备4台主机,并在5台主机,4台上都安装nginx,另外一台客户端
4台主机都需要的操作:
检查防火墙与selinux
1.安装epel扩展源
yum install -y epel-release2.安装nginx
yum install -y nginx
两台服务器操作:
配置虚拟主机
1.vim /etc/nginx/conf.d/vhost.conf
server {listen 80;server_name bbs.yunjisuan.com;location / {root /usr/share/nginx/html/bbs;index index.html index.htm;}
access_log /usr/share/nginx/html/www/logs/access_www.log main; 这两个日志目录需要自己创建
}
server {listen 80;server_name www.yunjisuan.com;location / {root /usr/share/nginx/html/www;index index.html index.htm;}
access_log /usr/share/nginx/html/bbs/logs/access_bbs.log main;
}2.配置网页页面
mkdir -pv /usr/share/nginx/html/{bbs,www}
切到不同目录配置页面即可
echo "this is $HOSTNAME bbs" > index.html3.重启nginx服务
两台主机服务器进行测试;
curl -H host:bbs.yunjisuan.com 192.168.27.12
curl -H host:bbs.yunjisuan.com 192.168.27.122
curl -H host:bbs.yunjisuan.com 192.168.27.123
curl -H host:www.yunjisuan.com 192.168.27.123
curl -H host:www.yunjisuan.com 192.168.27.122
nginx负载均衡配置
负载均衡需要在两台不是服务器的主机上操作
负载均衡的关键段是upstream(定义转发池)porxy_pass (指定转发)
两台主机:
1.编写额外配置文件
[root@lb01 ~]# more /etc/nginx/conf.d/vhosts.conf
upstream www_server_pools {server 192.168.27.122:80 weight=2; 定义转发找这两个服务器server 192.168.27.123:80 weight=1;
}
server {listen 80;server_name www.yunjisuan.com;location / {proxy_pass http://www_server_pools; 当访问网址时,转发到这个转发池
}
}
server {listen 80;server_name bbs.yunjisuan.com;location / {proxy_pass http://www_server_pools;}
}
2.重新启动
3.在客户端配置hosts解析文件
vim /etc/hosts
代理主机 www.yunjisuan.com bbs.yunjisuan.com
4.客户端进行测试
for ((i=1;i<=10;i++));do curl http://bbs.yunjisuan.com; done
4.nginx配置其他参数
多虚拟机访问
当配置好负载均衡后,访问bbs可能出现的页面还是www,是因为没有找到对应的请求头部信息。
配置:
1.在代理主机上配置
[root@lb01 ~]# more /etc/nginx/conf.d/vhosts.conf
upstream www_server_pools {server 192.168.27.122:80 weight=2;server 192.168.27.123:80 weight=1;
}
server {listen 80;server_name www.yunjisuan.com;location / {proxy_pass http://www_server_pools;proxy_set_header Host $host; 定义这一行}
}
server {listen 80;server_name bbs.yunjisuan.com;location / {proxy_pass http://www_server_pools;proxy_set_header Host $host;}
}
后端服务器日志中需要记录客户端真实ip
默认不会再服务器中记录客户端真实ip,只会记录代理主机,所以开启相应参数,记录客户端真实ip。
在代理主机进行操作
[root@lb01 ~]# more /etc/nginx/conf.d/vhosts.conf
upstream www_server_pools {server 192.168.27.122:80 weight=2;server 192.168.27.123:80 weight=1;
}
server {listen 80;server_name www.yunjisuan.com;location / {proxy_pass http://www_server_pools;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $remote_addr;
}
}
server {listen 80;server_name bbs.yunjisuan.com;location / {proxy_pass http://www_server_pools;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $remote_addr;}
}重启并测试
nginx设置不同的url访问不同页面,可以实现动静分离
在代理主机上设置:
vim /etc/nginx/conf.d/vhosts.conf
upstream static_pools { 定义不同的转发池server 192.168.27.122:80;
}
upstream active_pools {server 192.168.27.123:80;
}
server {listen 80;server_name www.yunjisuan.com;location /static/ {proxy_pass http://static_pools;proxy_set_header Host $host;
}location /active/ {proxy_pass http://active_pools;proxy_set_header Host $host;}}重启
在web服务器上:
两台服务器都可以操作
1.将之前的虚拟主机停到改一下后缀名称
2.配置不同页面
cd /usr/share/nginx/html/
mkdir static
cd static/
echo "this is static" > index.html
cd ..
mkdir active
echo "this is active" > index.html重启
测试:
curl http://www.yunjisuan.com/active/
curl http://www.yunjisuan.com/static/ 一定要带最后面的/
5.nginx的upstream其他参数
backup:
当所有服务器宕机之后,会去寻找配置了backup的页面
upstream www_server_pools {server 192.168.27.122:80 weight=2;server 192.168.27.123:80 weight=1;server 192.168.27.120:80 backup;
}
down:
配置之后,会将会话保持:
upstream www_server_pools {ip_hash;server 192.168.27.122:80 weight=2;server 192.168.27.123:80 weight=1;}
注意:backup和ip_hash不可以同时使用。
相关文章:
nginx反向代理及负载均衡的实现
目录 1.nginx反向代理 2.nginx负载均衡 3.nginx反向代理及负载均衡实现 nginx反向代理 4台主机都需要的操作: 两台服务器操作: 两台主机服务器进行测试; nginx负载均衡配置 4.nginx配置其他参数 多虚拟机访问 后端服务器日志中需要…...
Tomcat部署SpringBoot项目
1.修改打包方式 pom.xml 里 加上 <packaging>war</packaging>2.移除内嵌的Tomcat <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope…...
Oracle笔记--dblink
概述 1、database link是定义一个数据库到另一个数据库的路径的对象,database link允许你查询远程表及执行远程程序。在任何分布式环境里,database都是必要的。另外要注意的是database link是单向的连接。 2、在创建database link的时候,Ora…...

Mapbox加载天地图CGCS2000矢量瓦片地图
1.背景 最近在做天地图的项目,要基于MapBox添加CGCS2000矢量切片数据,但是 Mapbox 只支持web 墨卡托(3857)坐标系的数据。Github有专业用户修改了mapbox-gl的相关代码,支持CGCS2000的切片数据加载,并且修改…...

day3 STM32 GPIO口介绍
GPIO接口简介 通用输入输出接口GPIO是嵌入式系统、单片机开发过程最常用的接口,用户可以通过编程灵活的对接口进行控制,实现对电路板上LED、数码管、按键等常用设备控制驱动,也可以作为串口的数据收发管脚,或AD的接口等复用功能使…...
【ElasticSearch】ElasticSearch 内存设置原则
由于ES构建基于lucene,而lucene设计强大之处在于lucene能够很好的利用操作系统内存来缓存索引数据,以提供快速的查询性能。lucene的索引文件segements是存储在单文件中的,并且不可变,对于OS来说,能够很友好地将索引文件保持在cach…...

VUE+ElementUI的表单验证二选一必填项,并且满足条件后清除表单验证提示
上代码 <el-form-item label"出库单号" prop"ecode" ref"ecode" :rules"rules.ecode"><el-input v-model"queryParams.ecode" placeholder"出库单号和出库箱号至少填写一项" clearable style"width…...

NLP 时事和见解【2023】
一、说明 AI的新闻当然不是即时的,但作为趋势和苗头,我们不得不做出自己的决定。比如,一些软件的支持是否持续,哪些现成的软件将不再使用,等等。 图片来自中途 以下是NLPlanet为您选择的有关NLP和AI的每周文章&#x…...

Windows 环境下 Python3 离线安装 cryptography 失败
发布Flask Web项目时,报错缺少Cryptography,于是尝试重新安装该库,但本机没有网络,只支持手动离线安装,尝试了pip、setup.py两种方式安装,结果都报错。。最后使用将安装包拷贝至本机(在其他电脑上安装的sit…...

年轻代频繁GC ParNew导致http变慢
背景介绍 某日下午大约四点多,接到合作方消息,线上环境,我这边维护的某http服务突然大量超时(对方超时时间设置为300ms),我迅速到鹰眼平台开启采样,发现该服务平均QPS到了120左右,平…...

在.NET 6.0中自定义接口路由
在本文中,我们将讨论ASP.NET Core中的新路由。我们将了解什么是接口(endpoints)路由,它是如何工作的,它在哪里使用,以及如何创建自己的路由。 本文主题: 探索接口路由创建自定义接口创建更复杂的接口 名词定义&#…...
Kotlin读写分离CopyOnWriteArrayList
Kotlin读写分离CopyOnWriteArrayList 基于读写分离思想Copy-On-Write(COW)设计的线程安全ArrayList变体,读读共享、写写互斥、读写互斥、写读互斥。读时直接读,不用加锁同步,线程安全。写/删/修改数据时复制一个副本,在新的List副…...

centos自动同步北京时间
1、安装ntpdate服务 yum -y install ntpdate 2、加入自动任务计划 查找ntpdate的路径: which ntpdate 复制这个路径。 编辑自动任务计划并加入ntpdate: crontab -e # 每小时第30分钟同步AD域控时间 30 * * * * /usr/sbin/ntpdate -u 192.168.2.8 > …...

element-ui表格跨页多选实现
前言 在我们日常项目开发中,经常会有表格跨页多选的需求,接下来让我们用 el-table 示例一步步来实现这个需求。 动手开发 在线体验 https://codesandbox.io/s/priceless-mcclintock-4cp7x3?file/src/App.vue 常规版本 本部分只写了一些重点代码,心急的彦祖可以直接看 性…...

线性代数(三) 线性方程组向量空间
前言 如何利用行列式,矩阵求解线性方程组。 线性方程组的相关概念 用矩阵方程表示 齐次线性方程组:Ax0;非齐次线性方程组:Axb. 可以理解 齐次线性方程组 是特殊的 非齐次线性方程组 如何判断线性方程组的解 其中R(A)表示矩阵A的…...
学习跨度级交互以提取方面情感三元组
方面情感三元组 方面情感三元组(Aspect Sentiment Triplet)是一种在情感分析中使用的结构,它包含三个部分:方面目标(Aspect Target)、情感(Sentiment)和对应的观点词(Op…...

那些年的Xposed开发经验记录
把之前写的Xposed相关文章合并到一块,方便查阅 目录 多进程App的Hook问题XposedHelper中的静态变量demo的AndroidManifest.xml的测试核心代码结论限制handleLoadPackage被单个进程多次执行的问题 多dex Hook问题为应用增加权限利用Xposed删除权限参考 Hook框架集锦…...

android studio内存分析之Memory profiler的使用
目录 Android Studio中内存分析工具Memory profiler的使用1. 打开Memory Profiler2. 工具使用3. 内存选项说明4. 内存性能分析器概览5. 内存计算方式6. 查看内存分配7. 捕获java/kotlin方式查看内存分配8. 堆转储文件导入和导出 内存性能分析器中的泄漏检测 Android Studio中内…...

Qt下载慢/无法下载解决方式
文章目录 一. Qt在线安装下载二. 安装方式 一. Qt在线安装下载 官网下载:https://www.qt.io/download清华源下载:https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/online_installers/ 二. 安装方式 进入下载好的目录 在目录栏输入CMD&…...

【UE4 RTS】04-Camera Pan
前言 本篇实现了CameraPawn的旋转功能。 效果 步骤 1. 打开项目设置,添加两个操作映射 2. 打开玩家控制器“RTS_PlayerController_BP”,新建一个浮点型变量,命名为“PanSpeed” 在事件图表中添加如下节点 此时运行游戏可以发现当鼠标移动…...

铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...