Nginx核心功能(反向代理/负载均衡/动静分离)和搭建HA高可用

news2024/11/25 16:44:51

1. nginx的核心功能

1.1 nginx反向代理功能

正向代理

代理的为客户端,对于服务器不知道真实客户的信息。例如:翻墙软件。

请添加图片描述

反向代理

反向代理(Reverse Proxy)是一种服务器配置,它位于客户端和服务器之间,充当客户端请求的接收者和服务器响应的转发者。代理的为服务器端。对于客户来说不知道服务器的信息。例如: nginx

请添加图片描述


使用nginx反向代理

1. 修改nginx配置文件nginx.conf

请添加图片描述

2.启动nginx

/usr/nginx/sbin/nginx

3. 测试

需要放行端口号

请添加图片描述

1.2 nginx的负载均衡

负载均衡(Load Balance [4])其意思就是把请求分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

web项目必须搭建的为集群模式。

请添加图片描述

配置nginx完成负载均衡

1. 开启项目修改配置

web服务器项目至少搭建2台以上。192.168.138.188 8081 8082

nginx服务器

运行两个web工程项目

springboot项目

请添加图片描述

启动jar项目
java -jar xxx.jar
放行端口号

请添加图片描述

重新加载nginx配置

/usr/nginx/sbin/nginx -s reload

测试

运行192.168.138.188:83可以进入部署的两个项目,默认是轮询模式

请添加图片描述

负载均衡的策略

默认为轮询。

	#定义集群名称
	upstream qy174{
		#真实web服务器集群的信息(轮询)
		#server 172.16.7.110:8081;
		#server 172.16.7.151:8082;
	}

权重策略: 服务器硬件配置不同时。

	#定义集群名称
	upstream qy174{
		#权重策略 weight后的值是权重,权重越大访问频率越高
		server 172.16.7.110:8081 weight=2;
		server 172.16.7.151:8082 weight=1;
	}

ip_hash策略: 根据访问者客户的ip固定访问对应的web服务器。

	#定义集群名称
	upstream qy174{
		#真实web服务器集群的信息(轮询)
		#server 172.16.7.110:8081;
		#server 172.16.7.151:8082;
		ip_hash;
	}

花钱买第三方策略插件:

1.3 nginx动静分离

动:动态资源[接口] 静:静态资源 [css js image]。

分离: 之前我们把静态资源和动态资源全部放在web服务器下。 把静态资源放入nginx服务器下。动态资源web服务器下。

把静态资源放到nginx中

放在nginx安装目录

请添加图片描述

配置nginx

   server {
        listen       82;
        server_name  localhost; 
        location /{
         proxy_pass   http://192.168.138.188:8080;
        }
        #静态资源部署
        location ~ \.js|.css|.jpg$ {
            root static;
        }
   }

2. nginx的HA高可用的搭建

2.1 高可用的原理–keepalived

我们部署项目后开启nginx进行反向代理,如果只准备一个nginx,那么如果nginx宕机了,会导致用户无法访问项目,因此我们需要搭建nginx的高可用(即多部署几台nginx)。怎么做到当一个nginx宕机会自动切换到其他nginx,通过一个ip访问多台nginx的服务器ip,需要使用keepalived组件

请添加图片描述

2.2 搭建ha高可用

1. 安装keepalived

yum install -y keepalived
默认安装在/etc/keepalived下

2. 修改keepalived.conf配置文件

主节点

global_defs {
	notification_email {
	  acassen@firewall.loc
	  failover@firewall.loc
	  sysadmin@firewall.loc
	}
	notification_email_from Alexandre.Cassen@firewall.loc
	# ip的地址  这是nginx的IP地址
	smtp_ server 192.168.138.188
	smtp_connect_timeout 30
	router_id 192.168.138.188
}
# 执行脚本
vrrp_script chk_http_port {
	script "/usr/local/src/nginx_check.sh"
	interval 2  # 每2s执行一次该脚本
	weight -20  # keepalive宕机  权重-20 优先级
}

vrrp_instance VI_1 {
	state MASTER # 角色
	interface ens33 # 网卡名
	virtual_router_id 51 # id 保证主从相同
	priority 100  # 优先级 主节点大于从节点
	advert_int 1
	authentication {
		auth type PASS
		auth pass 1111
        }
	virtual_ipaddress { 
		192.168.138.50 # 虚拟ip. 使用逗号隔开 访问的IP
	}
	track_script {
		 chk_http_port # 追踪nginx脚本
	}
}

从节点

global_defs {
	notification_email {
	  acassen@firewall.loc
	  failover@firewall.loc
	  sysadmin@firewall.loc
	}
	notification_email_from Alexandre.Cassen@firewall.loc
	# ip的地址
	smtp_ server 192.168.138.189
	smtp_connect_timeout 30
	router_id 192.168.138.189
}
# 执行脚本
vrrp_script chk_http_port {
	script "/usr/local/src/nginx_check.sh"
	interval 2  # 每2s执行一次该脚本
	weight -20  # keepalive宕机  权重-20 优先级
}

vrrp_instance VI_1 {
	state BACKUP # 角色
	interface ens33 # 网卡名
	virtual_router_id 51 # id 保证主从相同
	priority 90  # 优先级 主节点大于从节点
	advert_int 1
	authentication {
		auth type PASS
		auth pass 1111
        }
	virtual_ipaddress { 
		192.168.138.50 # 虚拟ip. 使用逗号隔开
	}
	track_script {
		 chk_http_port # 追踪nginx脚本
	}
}

3. 编辑脚本

/usr/local/src/nginx_check.sh(路径是keepalived.conf配置文件中配置的执行脚本)

下面两个脚本任选一个就行

#!/bin/bash
# 检查是否开启nginx---统计nginx进程的个数
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
        pkill -9 keepalived
fi
A=`ps -C nginx --no-header |wc -l`        
if [ $A -eq 0 ];then    #如果nginx没有启动就启动nginx                        
      /app/nginx/sbin/nginx                #重启nginx
      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    #nginx重启失败,则停掉keepalived服务,进行VIP转移
              pkill keepalived                    
      fi
fi

4. 修改权限

#进入文件所在目录下
cd /usr/local/src
#修改权限
chmod 777  nginx_check.sh

5. 测试

#启动nginx
/usr/nginx/sbin/nginx
#启动keepalived
systemctl start|stop keepalived

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1952745.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入学习H264和H265

目录 前言 一 什么是H264/H265? H.264 (MPEG-4 AVC) H.265 (HEVC) 二 为什么要学习H264和H265? 1. 深入理解视频压缩原理 2. 硬件优化与集成 3. 调试与故障排除 4. 持续的技术更新 三 NAL(Network Abstraction Layer)详解…

飞牛爬虫FlyBullSpider 一款简单方便强大的爬虫,限时免费 特别适合小白!用它爬下Boss的2024年7月底Java岗位,分析一下程序员就业市场行情

一、下载安装FlyBullSpider 暂时支持Window,现在只在Win11上做过测试 1 百度 点击百度网盘 下载 链接:https://pan.baidu.com/s/1gSLKYuezaZgd8iqrXhk8Kg 提取码:Fly6 2 csdn https://download.csdn.net/download/fencer911/89584687 二、体验初…

UE5.4内容示例(2)StaticMeshes - 学习笔记

https://www.unrealengine.com/marketplace/zh-CN/product/content-examples 《内容示例》是学习UE5的基础示例,可以用此熟悉一遍UE5的功能 StaticMeshes案例 1.1 - 1.2 模型基础 模型有可移动、固定和静态的模式。可移动模式一般会加动画;固定模式&…

C++的STL简介(一)

目录 1.什么是STL 2.STL的版本 3.STL的六大组件 4.string类 4.1为什么学习string类? 4.2string常见接口 4.2.1默认构造 ​编辑 4.2.2析构函数 Element access: 4.2.3 [] 4.2.4迭代器 ​编辑 auto 4.2.4.1 begin和end 4.2.4.2.regin和rend Capacity: 4.2.5…

blender使用- 置换修改器

置换修改器 对于物体可以先做细分,然后添加置换修改器,添加贴图。再对贴图的参数进行修改,渲染想要的效果。 旋转模式下(按下s),z表示方向,0表示平整

MySQL查询执行(一):count执行慢

查询处理器 MySQL查询处理器是MySQL数据库服务器的组件,它负责执行SQL查询。查询处理器的主要任务是解析查询(把用户提交的SQL查询转换为可以被数据库引擎理解和执行的数据操作指令序列),生成查询计划,然后执行该计划。…

【C++】循环即热案例-猜数字

在 1~100 中选取一个随机数,玩家输入数字,判断输入的数字与这个随机数的大小并输出以作为提示,在猜对后提示猜测正确并退出游戏 (若想活得一个随机数需要用到一个 rand() 函数,例如题中要求则要写 rand()%1001 &#…

【QT】QT 窗口(菜单栏、工具栏、状态栏、浮动窗口、对话框)

Qt 窗口是通过 QMainWindow类来实现的。 QMainWindow 是一个为用户提供主窗口程序的类,继承自 QWidget 类,并且提供了⼀个预定义的布局。QMainWindow 包含一个菜单栏(Menu Bar)、多个工具栏(Tool Bars)、…

普乐蛙VR航天航空体验馆知识走廊VR体验带你登陆月球

VR航天航空设备是近年来随着虚拟现实(VR)技术的快速发展而兴起的一种新型设备,它结合了航天航空领域的专业知识与VR技术的沉浸式体验,为用户提供了前所未有的航天航空体验。以下是对VR航天航空设备的详细介绍: 一、设备…

时间复杂度与O(n)

文章目录 1 复杂度分析1.1 时间复杂度1.1.1 循环执行次数1.1.2 大O(n)表示法 1.2 空间复杂度 1 复杂度分析 1.1 时间复杂度 ​ 时间复杂度用来表示算法运行时间的长短,用来定性的描述程序的运行时间。要了解时间复杂度,我们需要先了解程序执行的次数。…

法律 | 法律人AI使用指南

原文:法律 | 法律人AI使用指南|法官|法院|文书|公司法_网易订阅 01 引言 过去半年多,我一直在尝试着用AI来辅助自己的各项法律工作,将AI融入自己的日常工作之中,并试图形成自身稳定的“法律AI”工作流。在此过程中,…

vuex学习day02-state状态、严格模式(strict)、mutations、辅助函数mapMutations、actions

4、state状态 (1)作用:提供共享数据 (2)步骤: 1)找到仓库,通过state提供共享数据 报错1?: 解决方式: 找到.eslintrc.js文件,添加一…

【React】项目的目录结构全面指南

文章目录 一、React 项目的基本目录结构1. node_modules2. public3. src4. App.js5. index.js6. .gitignore7. package.json8. README.md 二、React 项目的高级目录结构1. api2. hooks3. pages4. redux5. utils 三、最佳实践 在开发一个 React 项目时,良好的目录结构…

Flink笔记整理(五)

Flink笔记整理(五) 文章目录 Flink笔记整理(五)七、处理函数(最底层最常用最灵活)7.1基本处理函数(ProcessFunction)处理函数的功能和使用ProcessFunction解析 7.2按键分区处理函数&…

【初阶数据结构】9.二叉树(4)

文章目录 5.二叉树算法题5.1 单值二叉树5.2 相同的树5.3 另一棵树的子树5.4 二叉树遍历5.5 二叉树的构建及遍历 6.二叉树选择题 5.二叉树算法题 5.1 单值二叉树 点击链接做题 代码: /*** Definition for a binary tree node.* struct TreeNode {* int val;* …

鱼哥好书分享活动第27期:看完这篇《云原生安全》了解云原生环境安全攻防实战技巧!

鱼哥好书分享活动第27期:看完这篇《云原生安全》了解云原生安全攻防实战技巧! 主要内容:读者对象:本书目录:了解更多:赠书抽奖规则: 当前全球数字化的发展逐步进入深水区,云计算模式已经广泛应用…

用 apifox cli 命令行运行本地接口出现TypeError:Invalid IP address: undefined

用 apifox cli 命令行运行本地接口出现TypeError:Invalid IP address: undefined,客户端运行是通过的但命令行运行会报错 修改端口也是一样报错,地址修改为127.0.0.1会报错connect ECONNREFUSED 127.0.0.1:8080 解决方法:不用localhost&…

视觉SLAM第一讲

第一讲-预备知识 SLAM是什么? SLAM(Simultaneous Localization and Mapping)是同时定位与地图构建。 它是指搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己…

《Milvus Cloud向量数据库指南》——Milvus Cloud不同场景下的部署形态选型

不同场景下的部署形态选型 一般说选型肯定离不开阶段。用到向量数据库的应用基本有这么几个阶段: AI 应用的快速原型构建。比如你在做一个 AI 个人助手、一个小的搜索引擎原型、一个端到端的 RAG 原型,这类项目的迭代速度是很关键的,而且原型构建期不需要关心性能或者稳定性…

JVM 内存分析工具 Memory Analyzer Tool(MAT)入门(一)

一、打开 jvisualvm (VisualVM 是一款集成了 JDK 命令行工具和轻量级剖析功能的可视化工具。 设计用于开发和生产。) 打开 jvisualvm.exe 工具会出现如下一些监控指标 二、VisualVM可以根据需要安装不同的插件,每个插件的关注点都不同&#x…