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的问题。

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

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

相关文章

为什么说linux操作系统要比windows稳定?

为什么说linux操作系统要比windows稳定? 在开始前我分享下我的经历,刚入行时遇到一个好公司和师父,给了我机会,两年时间从3k薪资涨到18k的, 我师父给了一些linux学习方法和资料,让我不断提升自己&#xff…

【机器学习】欠拟合与过拟合

过拟合:模型在训练数据上表现良好对不可见数据的泛化能力差。 欠拟合:模型在训练数据和不可见数据上泛化能力都很差。 欠拟合常见解决办法: (1)增加新特征,可以考虑加入特征组合、高次特征,以…

Qt Design Studio+Pyside项目

Qt Design Studio设计出的项目结构有多个层级的目录,我们直接用类似Qt Creator工具的方式加载main.qml文件时会报错提示module "content" is not installed,将content加入importPath后还是报同样的错误。 Qt Design Studio生成的文件包含了.qm…

【Docker】数据持久化 挂载

Docker的镜像是只读的,但是容器是可写的,我们可以将数据写入到容器,不过一旦容器删除数据将会丢 失,那么有什么办法能将数据进行持久化存储呢? ——在宿主机上开辟一块地方,存储内容和docker容器的存储内…

CSS响应式设计学习

一. CSS响应式设计是一种使网站在不同设备上能够自适应的技术。我们可以通过以下步骤进行学习: 掌握CSS布局:多数情况下,响应式设计都需要一定程度的布局技巧。需要我们熟悉CSS中的布局属性,如display、position、float等。学习媒…

低代码平台:业务开发“加速器”

一、现状 低代码开发平台要让每个人,包括开发者和普通业务人员,都能够成为企业数字化过程中的主导者和构建者!让普通人更容易上手! 基于这一目标,应用需求多的云服务商成为低代码投资的主要来源。一家云服务商如谷歌云…

AJAX的原理(重点)

◆ XMLHttpRequest 什么是XMLHttpRequest? 定义: 关系:axios 内部采用 XMLHttpRequest 与服务器交互 注意:直白点说就是axios内部就是封装了XMLHttpRequest这个对象来实现发送异步请求的 使用 XMLHttpRequest 步骤&#xff1a…

C# 实现 gRPC 服务和调用

写在前面 gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架。 主要优点如下: 1.高性能轻量化。 2.协议优先的 API 定义模式,默认使用协议缓冲区,允许与语言无关的实现。 3.可用于多种语言的工具,以生成强类型服务器和客户…

项目解决方案:市小区高清视频监控平台联网整合设计方案(上)

目 录 一、项目需求 1.1业务需求 1.2技术需求 1.3 环境要求 1.3.1 硬件要求 1.3.2 技术服务要求 二、系统设计方案 2.1 视频监控平台基础功能设计 2.2 视频资源及联网设备编码与管理设计 2.2.1 全省现有联网视频资源属性 2.2.2 视频资源编码具体格…

Spring IoC容器(一)

IoC,Inversion of Control 控制反转,是一个过程。仅通过构造函数、工厂方法或在对象实例化后在对象实例上设置属性来定义其依赖关系。容器负责这些工作,这个过程从本质上来说是bean本身的反向,因此称为反向控制。 1 容器 负责实例化、配置及…

C语言入门(二)、每日Linux(三)——gcc命令,通过gcc命令熟悉C语言程序实现的过程

使用gcc编译C语言程序 C语言程序实现的过程gcc命令基础用法常用选项编译和汇编选项:优化选项:调试选项:链接选项:警告选项: 实验对于-o选项 通过gcc命令熟悉C语言程序的执行过程1.预处理2.编译阶段3.汇编阶段4.链接阶段…

牛客周赛round30D题讲解(公式推导)

写的时候题目理解错了(*/ω&#xff3c;*) 登录—专业IT笔试面试备考平台_牛客网 #include <bits/stdc.h>using ll long long;int main(){std::ios::sync_with_stdio(false);std::cin.tie(nullptr);ll x, y, l, r;std::cin >> x >> y >> l >>…

Day 34 | 贪心 1005.K次取反后最大化的数组和 、 134. 加油站、 135. 分发糖果

1005.K次取反后最大化的数组和 题目 文章讲解 视频讲解 思路&#xff1a;要按照绝对值大小进行排序&#xff0c;负数转换后还不到k个选择最小值不断反转 class Solution {public int largestSumAfterKNegations(int[] nums, int k) {nums IntStream.of(nums).boxed().sorte…

大白话解析LevelDB 4: 查找一个 Key

文章目录 查询一个 Key查找 Key 的入口: DBImpl::Get(const ReadOptions& options, const Slice& key, std::string* value)从 MemTable 中查找从 Immutable MemTable 中查找从 SST 中查找 查询一个 Key 查找 Key 的入口: DBImpl::Get(const ReadOptions& options…

Python爬虫---scrapy的post请求

爬虫文件&#xff1a; import scrapyclass TestpostSpider(scrapy.Spider):name "testpost"allowed_domains ["fanyi.baidu.com"]# post 请求如果没有参数&#xff0c;那么这个请求将没有任何意义&#xff0c;所以start_urls也没有用了&#xff0c;pars…

Mysql 索引优化

Mysql 索引优化 mysql如何选择使用索引。 select *from user where username a and password b如果useranme和password都是普通索引&#xff0c;那么他们会把2个索引都查出来&#xff0c;然后在把他们的交集拿出来 如果username是唯一索引&#xff0c;password是普通索引&…

探究React中的非受控组件:自由而简便的表单处理

探究React中的非受控组件&#xff1a;自由而简便的表单处理 在React中&#xff0c;我们常听到"受控组件"的概念&#xff0c;但同样存在一种自由度更高、处理简便的形式——非受控组件。本文将深入介绍非受控组件的使用&#xff0c;通过代码片段中的登录表单实例&…

Java 面试题之 IO(二)

字符流 文章目录 字符流Reader&#xff08;字符输入流&#xff09;Writer&#xff08;字符输出流&#xff09; 文章来自Java Guide 用于学习如有侵权&#xff0c;立即删除 不管是文件读写还是网络发送接收&#xff0c;信息的最小存储单元都是字节。 那为什么 I/O 流操作要分为字…

状态管理与导航守卫

为什么要用vuex&#xff1f; 进行统一的状态管理&#xff0c;解决不同组件共享数据的问题。 如何使用vuex&#xff1f; 1.安装引入 npm install vuex --save 2.注册到vue中 import Vue from vue import Vuex from vuexVue.use(Vuex)3.实例化vuex的store export default new Vue…

算法训练营总结

目录 收获思考感悟后续 收获 不知不觉&#xff0c;已经跟着训练营刷了两个月的题。 之前也跟着代码随想录刷了一大半&#xff0c;因为出差中断没有坚持下来&#xff0c;仅有的基础也扔下了不少。 而这两个月跟着训练营最大的收获就是坚持&#xff0c;不会的题硬啃几天也要搞…