Ubuntu 22.04安装Nginx负载均衡

君衍.

  • 一、编译安装Nginx
  • 二、轮询算法实现负载均衡
  • 三、加权轮询算法实现负载均衡
  • 四、ip_hash实现负载均衡

一、编译安装Nginx

这里我们先将环境准备好,我使用的是Ubuntu22.04操作系统:
在这里插入图片描述
这个是我刚安装好的,所以首先我们进行保存快照防止安装过程出错,同时我已经讲镜像源进行了更新。
在这里插入图片描述
好的,下面我们首先开始安装Nginx:

1、安装依赖

sudo apt install libgd-dev

在这里插入图片描述

2、下载nginx

wget http://nginx.org/download/nginx-1.22.1.tar.gz

在这里插入图片描述

3、解压nginx

tar -zvxf nginx-1.22.1.tar.gz

在这里插入图片描述

4、安装GCC

sudo apt install gcc

在这里插入图片描述

5、安装pcre库

PCRE库支持正则表达式。如果我们在配置文件nginx.conf中使用了正则表达式,那么在编译Nginx时就必须把PCRE库编译进Nginx,因为Nginx的HTTP模块需要靠它来解析正则表达式。另外,pcre-devel是使用PCRE做二次开发时所需要的开发库,包括头文件等,这也是编译Nginx所必须使用的。

sudo apt install libpcre3 libpcre3-dev

在这里插入图片描述

6、安装SSL库

如果服务器不只是要支持HTTP,还需要在更安全的SSL协议上传输HTTP,那么需要拥有OpenSSL。另外,如果我们想使用MD5、SHA1等散列函数,那么也需要安装它。

sudo apt-get install openssl libssl-dev

在这里插入图片描述

7、编译安装

编译

cd nginx-1.22.1

编译并指定安装位置,执行安装之后会创建指定文件夹/www/env/nginx

./configure --prefix=/www/env/nginx \
--with-pcre \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-http_auth_request_module \
--with-http_image_filter_module \
--with-http_slice_module \
--with-mail \
--with-threads \
--with-file-aio \
--with-stream \
--with-mail_ssl_module \
--with-stream_ssl_module 

在这里插入图片描述
安装

make && make install

在这里插入图片描述
至此,等待半分钟安装成功。
在这里插入图片描述
到这里我们在Ubuntu22.04下安装Nginx已经安装成功,这里我补充下,由于使用用户安装时,出现了权限不够的错误,所以我后面使用root登录重新进行安装了(其实只要在前面sudo加上就行)。
在这里插入图片描述
我们打开nginx,并检验nginx状态,查看防火墙并将其关闭。

systemctl status nginx
systemctl status ufw
systemctl stop ufw
systemctl status ufw

在这里插入图片描述
然后查看自身IP地址并进行访问:
在这里插入图片描述
这里使用浏览器访问查看nginx是否成功开启:
在这里插入图片描述
这里我们模拟Nginx的负载均衡效果,我这里又克隆了两台Ubuntu来方便查看。

二、轮询算法实现负载均衡

首先这里环境如下:

客户端本机
代理服务器192.168.217.152
后端服务器1192.168.217.153
后端服务器2192.168.217.154

所以主机都已安装Nginx。

首先要启用负载均衡,就需要在Nginx配置文件中定义后端服务器列表。同时指定负载均衡的代理服务器。

好的,下面我们进行配置:

192.168.217.152代理服务器

  • 1、找到/etc/nginx/sites-available/default文件进行配置
upstream nginx_web{
   server 192.168.217.153;
   server 192.168.217.154;
}

在这里插入图片描述

# 并在location部分加入:
server {
    location / {
        root   html;
        index  index.html index.htm index.jsp index.ftl;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://nginx_web;
    }
}

在这里插入图片描述
然后我们保存并退出。

  • 2、重新加载配置文件
nginx -s reload
  • 3、192.168.217.153后端服务器配置

找到/var/www/html/index.nginx-debian.html文件进行修改,由于我是克隆了之前的Ubuntu,所以这里使用的中间件是Nginx,然后我们进行修改。
在这里插入图片描述
同理,另一台后端服务器也进行界面修改,方面我们之后查看轮询算法。到这里我们即可配置完毕,下面我们来查看效果:
在这里插入图片描述

在这里插入图片描述

至此我们可以看到轮询算法即为每个请求按时间顺序逐一分配到不同的后端服务器上,如果某台服务器死机,自动提出故障系统,使用户访问不受影响。

三、加权轮询算法实现负载均衡

我们在之前复现轮询算法实现负载均衡上进行操作,所以我们这下只需修改主配置文件的upstream部分即可。
代理服务器:
192.168.217.152

upstream nginx_web{
   server 192.168.217.153 weight=1;
   server 192.168.217.154 weight=2;
}

在这里插入图片描述
同样的,重新加载:nginx -s reload
继续进行测试,这里我们会发现一轮以内两次访问192.168.217.154,一次访问192.168.217.153。

至此,我们加权轮询算法复现完毕,加权轮询算法即为:weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。或者仅仅为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

四、ip_hash实现负载均衡

同样的,我们在之前复现加权轮询算法实现负载均衡上进行操作,所以我们这下只需修改主配置文件的upstream部分即可。
代理服务器:
192.168.217.152

upstream nginx_web{
   ip_hash;
   server 192.168.217.153:80;
   server 192.168.217.154:80;
}

在这里插入图片描述
同样的,重新加载:nginx -s reload
继续进行测试,我们会发现它固定访问了192.168.217.153这台服务器。

至此,ip_hash实现负载均衡实现完毕,每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题。每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

金融OCR领域实习日志(二)——四种OCR模型效果测试(附图)

文章目录 四种模型ocr效果简单测试模型场景1.paddle框架下PP-OCRv31.1.效果如下:1.2.总结 2.paddle框架下ppocr_server_v22.1.效果如下2.2.总结 3.CnOCR3.1.效果如下3.2.总结 4.TesseractOCR4.1.效果如下4.2.总结 5.后续想法 四种模型ocr效果简单测试 模型 PP-OCR…

文件操作---C++

文件操作目录 1.文本文件1.1写文件1.2读文件1.2.1第一种方式:流输入方式1.2.2第二种方式:getline成员函数1.2.3第三种方式:getline全局函数1.2.4第四种方式:按一个一个字符读取 2.二进制文件2.1写文件2.2读文件 程序运行时产生的数…

【C++进阶】STL容器--list使用迭代器问题分析

目录 前言 1. list的基本使用 1.1 list构造函数 1.2 list迭代器 1.3 list capacity 1.4 list元素访问 1.5 list 修改操作 insert erase swap resize clear 2. list失效迭代器问题 3. list使用算法库函数问题 总结 前言 list(链表)在C中非常重要…

分享7种SQL的进阶用法

分享7种SQL的进阶用法 前言 还只会使用SQL进行简单的insert、update、detele吗?本文给大家带来7种SQL的进阶用法,让大家在平常工作中使用SQL简化复杂的代码逻辑。 1.自定义排序(ORDER BY FIELD) 在MySQL中ORDER BY排序除了可以…

vue模拟聊天页面列表:滚动到底部,滚动到顶部触发加载更多

先看下效果&#xff1a; 代码&#xff1a; <template><div><div style"text-align: center"><button click"scrollTop">滚动到顶部</button><button click"scrollBottom">滚动到底部</button></d…

GitHub Copilot 与 ChatGPT:哪种工具更适合软件开发?

GitHub Copilot 与 ChatGPT&#xff1a;哪种工具更适合软件开发&#xff1f; 比较 ChatGPT 与 GitHub Copilot编程语言功能性定制化训练数据上下文准确性 ChatGPT 与 GitHub Copilot&#xff1a;哪个更适合软件开发&#xff1f;常见问题解答&#xff1a; 不断发展的编程世界正在…

基数排序算法

1. 排序算法分类 十种常见排序算法可以分为两大类&#xff1a; 比较类排序&#xff1a; 通过比较来决定元素间的相对次序&#xff0c;由于其时间复杂度不能突破O(nlogn)&#xff0c;因此也称为非线性时间比较类排序。比较类排序算法包括&#xff1a;插入排序、希尔排序、选择…

matlab绘图杂谈-stem函数和plot函数

出发点 今天在论文中看到一副这样的图&#xff0c;它既有曲线&#xff0c;又有点&#xff0c;并且对两者都添加了图例。三条曲线应该是用plot函数绘制的&#xff0c;而target哪个绿色的圆圈&#xff0c;我的理解是用stem函数绘制的。它只是1个点&#xff0c;并且没有竖线&…

Ps:可选颜色

可选颜色 Selective Color命令可以按指定的颜色&#xff08;范围&#xff09;进行单独的调整&#xff0c;且不会影响图像中的其他颜色。 Ps菜单&#xff1a;图像/调整/可选颜色 Adjustments/Selective Color Ps菜单&#xff1a;图层/新建调整图层/可选颜色 New Adjustment Laye…

Qt 基于海康相机 的视频标绘

需求&#xff1a; 基于 视频 进行 标注&#xff0c;从而进行测量。 曾经搞在线教育时&#xff0c;尝试在视频上进行文字或者图形的绘制&#xff0c;但是发现利用Qt widget 传sdk 句柄的方式&#xff0c;只能使用窗口叠加的方式&#xff08;Qt 基于海康相机的视频绘图_海康相…

【WPF.NET开发】WPF 中的 Layout

本文内容 元素边界框布局系统测量和排列子元素面板元素和自定义布局行为布局性能注意事项子像素渲染和布局舍入 本主题介绍 Windows Presentation Foundation (WPF) 布局系统。 了解布局计算发生的方式和时间对于在 WPF 中创建用户界面非常重要。 1、元素边界框 在 WPF 中构…

React中使用LazyBuilder实现页面懒加载方法一

前言&#xff1a; 在一个表格中&#xff0c;需要展示100条数据&#xff0c;当每条数据里面需要承载的内容很多&#xff0c;需要渲染的元素也很多的时候&#xff0c;容易造成页面加载的速度很慢&#xff0c;不能给用户提供很好的体验时&#xff0c;懒加载是优化页面加载速度的方…

算法基础之树状数组

文章目录 树状数组 树状数组 树状数组能解决的最关键的问题就是能够 O ( log ⁡ n ) O(\log n) O(logn)内&#xff0c;给某个位置上的数&#xff0c;加上一个数&#xff0c;或者求前缀和 他和前缀和数组的区别就是&#xff0c;树状数组支持修改原数组的内容&#xff0c;而前缀…

前端学习之——react篇(渲染列表)

你将依赖 JavaScript 的特性&#xff0c;例如 for 循环 和 array 的 map() 函数 来渲染组件列表。 假设你有一个产品数组&#xff1a; const products [{ title: Cabbage, id: 1 },{ title: Garlic, id: 2 },{ title: Apple, id: 3 }, ]; 在你的组件中&#xff0c;使用 map…

视频尺寸魔方:分层遮掩3D扩散模型在视频尺寸延展的应用

▐ 摘要 视频延展(Video Outpainting)是对视频的边界进行扩展的任务。与图像延展不同&#xff0c;视频延展需要考虑到填充区域的时序一致性&#xff0c;这使得问题更具挑战性。在本文中&#xff0c;我们介绍了一个新颖的基于扩散模型的视频尺寸延展方法——分层遮掩3D扩散模型(…

linux conda 配置 stable video diffusion

安装教程 1 下载仓库源码 git clone https://github.com/Stability-AI/generative-models.git2 创建conda环境 conda create -n svd python3.10 conda activate svd3 安装pytorch gpu cuda和cudnn请参考其他链接配置&#xff0c;使用 conda 或者 pip 安装 pytorch # 使用c…

Linux 驱动开发基础知识——编写LED驱动程序(三)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…

Vue开发之proxy代理的配置(附带uniapp代理配置)

vue 1.在vue.config.js中添加 devServer 属性中配置 proxy 属性 module.exports {productionSourceMap: false,publicPath: /,devServer: {port: 8085,proxy: {/api/admin: {target: http://10.58.104.70:6111,changeOrigin: true,pathRewrite: {/api/: /}},/api: {target: …

NIO-Channel详解

NIO-Channel详解 1.Channel概述 Channel即通道&#xff0c;表示打开IO设备的连接&#xff0c;⽐如打开到⽂件、Socket套接字的连接。在使⽤NIO时&#xff0c;必须要获取⽤于连接IO设备的通道以及⽤于容纳数据的缓冲区。通过操作缓冲区&#xff0c;实现对数据的处理。也就是说…

从源头到成品:精酿啤酒原料的完整追踪

对于追求品质的Fendi Club啤酒来说&#xff0c;从源头到成品的完整原料追踪是确保其品质的关键。这种追踪不仅涉及原料的采购&#xff0c;还包括其在生产过程中的处理和产品的质量控制。下面&#xff0c;我们将详细探讨Fendi Club啤酒如何实现从源头到成品的完整原料追踪。 首先…