探索Nginx的奥秘--从代理到负载均衡的艺术实践

文章目录

    • 🌺Nginx的引入🌺
    • 🌺深刻理解正向代理与反向代理🌺
      • 🌹Reverse proxy🌹
      • 🌹正向代理与反向代理的区别🌹
      • 🌹反向代理为什么叫反向代理🌹
      • 🌹负载均衡🌹
      • 🌹动静分离🌹
    • 🌺Nginx的安装🌺
        • ⭐Windows安装⭐
      • 🌹下载nginx🌹
      • 🌹检查nginx是否启动成功🌹
      • 🌹关闭nginx🌹
      • 🌹Linux下常用命令🌹
        • ⭐负载均衡⭐

⭐在分布式微服务架构中,服务是分布在不同主机、服务器上的。我们希望访问不同的服务,就需要一个代理服务器来为我们做请求转发,这个时候我们就引入了Nginx。⭐

🌺Nginx的引入🌺

我们在请求传统的单体项目时,常常是在低并发的情况下进行的。一个公司项目刚刚上线的时候,并发量小,用户使用的少,所以在低并发的情况下,一个jar包启动应用就够了,然后内部tomcat返回内容给用户。

img

但是慢慢的,使用公司平台的用户越来越多了,并发量慢慢增大了,这时候一台服务器满足不了我们的需求了。

img

于是我们横向扩展,又增加了服务器。这个时候几个项目启动在不同的服务器上,用户要访问,就需要增加一个代理服务器了,通过代理服务器来帮我们转发和处理请求。下图的服务器1就是代理服务器

img

我们希望这个代理服务器可以帮助我们接收用户的请求,然后将用户的请求按照规则帮我们转发到不同的服务器节点之上。这个过程用户是无感知的,用户并不知道是哪个服务器返回的结果,我们还希望他可以按照服务器的性能提供不同的权重选择。保证最佳体验!所以我们使用了Nginx。

还有一种情况就是,当我们的分布式微服务项目不同服务部署在不同主机下的时候,我们希望通过不同的路径访问不同的服务怎么来实现?

img

公司的项目不一定都部署在一台服务器上,对吧?通常情况下都会被拆分在不同主机上的,我们希望通过不同路径访问它们,而且我们为了分担服务器的访问压力,我们希望轮训访问这两台服务器。在访问服务器上的资源的时候,我们还希望静态资源和动态资源能够分开,这又怎么办?

所以整理一下我们的需求,我们的访问需求如下:

  • 需要代理服务器
  • 负载均衡
  • 动静分离

实现上面的需求可以用 网关服务,也可以使用 Nginx

使用Nginx还有一个好处就是可以使用 高可用集群 防止服务器宕机。

img

如上图,我们用两个Nginx服务器搭建了一个简单的集群,这个也叫双机热备。当其中一台Nginx宕机之后,仍能用另一台来工作,两台Nginx之间是用keeplived来监测心跳,从而确定主从设备之间是否宕机。

img

🌺深刻理解正向代理与反向代理🌺

正向代理反向代理Nginx的重要概念、功能。因为国内的砖家起名字的时候一开始说正向代理,反向代理。但是,从逻辑处理上来说有漏洞,就是一个必要的前提需要说明,正向和反向是基于什么来定方向的?就像坐标轴一样,原点是什么,定义右边是正,左边是负。

我们先看一下官网解释:

🌹Reverse proxy🌹

From Wikipedia, the free encyclopedia

img

A reverse proxy taking requests from the Internet and forwarding them to servers in an [internal network](https://www.zhihu.com/search?q=internal network&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra={“sourceType”%3A"answer"%2C"sourceId"%3A471185862}). Those making requests to the proxy may not be aware of the internal network.
In computer networks, a reverse proxy is a type of proxy server that retrieves resources on behalf of a client from one or more servers. These resources are then returned to the client, appearing as if they originated from the proxy server itself.[1] Unlike a forward proxy, which is an intermediary for its associated clients to contact any server, a reverse proxy is an intermediary for its associated servers to be contacted by any client.
Quite often, popular web servers use reverse-proxying functionality, shielding application frameworks of weaker HTTP capabilities.

重点是这句:

Unlike a forward proxy, which is an intermediary for its associated clients to contact any server, a reverse proxy is an intermediary for its associated servers to be contacted by any client。

翻译:正向代理是客户端和其他所有服务器(重点:所有)的代理者,而反向代理是客户端和所要代理的服务器之间的代理。

总结:一个对客户端负责,一个对所代理的服务器负责。一个,一个

我们配合下图来理解:

客户端这个时候想访问,但是因为国内原因不能访问,这个时候就用了代理服务器,代理服务器帮你访问服务器资源,拿到以后传给国内的你。这个时候代理服务器是在帮你去其他网络拿资源,整个时候整个网络的资源走向如下图,从外网服务器到代理服务器,最后到客户端,所以这个是 正向代理正向=代理服务器在帮你(客户端)=资源走向

在这里插入图片描述

img

那什么是 反向代理 呢?看下图:

客户端将请求发送到代理服务器,由代理服务器去选择目标服务器获取数 据后,返回给客户端,这种代理方式为反向代理

接下来我们就理解什么是 反向代理?

项目设计者, 不希望客户端直接访问目标 Web 服务器(比如目标 Web 服务器是集群, 如 果直接访问就会提供多个公网 IP), 而是希望提供一个统一的访问 IP, 这个是理解反向代理 的前提,即为什么要反向代理

img

  • 反向代理帮助的对象是目标 Web 服务器。

🌹正向代理与反向代理的区别🌹

当前面的内容理解后,对于正向代理和反向代理的区别就很好理解了。

最核心的不同在于代理的对象不同。

  • 正向代理是代理客户端
  • 反向代理是代理服务器。

而根据这核心的区别,我们也可以记住:代理哪端便可以隐藏哪端

也就是说:

  • 正向代理隐藏真实客户端
  • 反向代理隐藏真实服务端

🌹反向代理为什么叫反向代理🌹

从我们用户的角度来看:

  • 代理我们发出请求的客户端被称为正向代理
  • 而代理我们访问的服务器,则被称为反向代理

从代理结构的角度来看(代理服务器在两种代理中的作用均为收发请求与响应)

img

🌹负载均衡🌹

当客户端向反向代理服务器(比如 Nginx)发出请求,如果 Nginx 代理了多个 WEB 服务器(集群),Nginx 会将请求/负载分发到不同的服务器,也就是负载均衡。

这么做的好处就是分担服务器压力,提高并发效率。

img

🌹动静分离🌹

为了加快网站的解析速度,可以把动态资源和静态资源由不同的服务器来 解析,降低单个服务器的压力。

img

🌺Nginx的安装🌺

⭐Windows安装⭐

🌹下载nginx🌹

http://nginx.org/en/download.html 下载稳定版本。
以nginx/Windows-1.16.1为例,直接下载 nginx-1.16.1.zip。
下载后解压,解压后如下

img

###🌹启动nginx🌹

有很多种方法启动nginx

(1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过

(2)打开cmd命令窗口,切换到nginx解压目录下,输入命令 nginx.exe ,回车即可

🌹检查nginx是否启动成功🌹

直接在浏览器地址栏输入网址 http://localhost:80 回车,出现以下页面说明启动成功!

img

###🌹配置监听🌹

nginx的配置文件是conf目录下的nginx.conf,默认配置的nginx监听的端口为80,如果80端口被占用可以修改为未被占用的端口即可。

img

当我们修改了nginx的配置文件nginx.conf 时,不需要关闭nginx后重新启动nginx,只需要执行命令 nginx -s reload 即可让改动生效

🌹关闭nginx🌹

如果使用cmd命令窗口启动nginx, 关闭cmd窗口是不能结束nginx进程的,可使用两种方法关闭nginx

(1)输入nginx命令 nginx -s stop(快速停止nginx) 或 nginx -s quit(完整有序的停止nginx)

(2)使用taskkill taskkill /f /t /im nginx.exe

  1. taskkill是用来终止进程的,
  2. /f是强制终止 .
  3. /t终止指定的进程和任何由此启动的子进程。
  4. /im示指定的进程名称 .

🌹Linux下常用命令🌹

# 开启
service firewalld start
# 重启
service firewalld restart
# 关闭
service firewalld stop
# 查看防火墙规则
firewall-cmd --list-all
# 查询端口是否开放
firewall-cmd --query-port=8080/tcp
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload
# 参数解释
1、firwall-cmd:是Linux提供的操作firewall的一个工具;
2、--permanent:表示设置为持久;
3、--add-port:标识添加的端口;
⭐负载均衡⭐
upstream lb{server 127.0.0.1:8080 weight=1;server 127.0.0.1:8081 weight=1;
}
location / {proxy_pass http://lb;
}

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

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

相关文章

C#教程(三):字符串的各种用法

在C#中,字符串(string 类型)是一种常用的数据类型,用于存储和操作文本数据。以下是一些C#中字符串的常见用法 1、输出任意的字符串长度 代码 #region 输出任意的字符串长度 Console.WriteLine("请输入你心中想到的名字&…

Activiti工作流框架学习笔记(一)之通用数据表详细介绍

文/朱季谦 Activiti工作流引擎自带了一套数据库表,这里面有一个需要注意的地方: 低于5.6.4的MySQL版本不支持时间戳或毫秒级的日期。更糟糕的是,某些版本在尝试创建此类列时将引发异常,而其他版本则不会。执行自动创建/升级时&a…

C++ 二叉搜索树(BST)的实现(非递归版本与递归版本)与应用

C 二叉搜索树的实现与应用 一.二叉搜索树的特点二.我们要实现的大致框架三.Insert四.InOrder和Find1.InOrder2.Find 五.Erase六.Find,Insert,Erase的递归版本1.FindR2.InsertR3.EraseR 七.析构,拷贝构造,赋值运算符重载1.析构2.拷贝构造3.赋值运算重载 八.Key模型完整代码九.二…

2020年第九届数学建模国际赛小美赛D题石头剪刀游戏与合作解题全过程文档及程序

2020年第九届数学建模国际赛小美赛 D题 石头剪刀游戏与合作 原题再现: 小时候你可能至少玩过几次石头剪刀游戏。在这个游戏中,你几乎有三个选择,每一个都有一个项目要打败,一个项目输给。石头打败剪刀,剪刀剪纸和布覆…

yasaf永安视安防监控恢复案例

永安视(yasaf)一个小到连官网都没有的安防厂商,是国内众多品牌中的一个,可以说是小十八线,让人敬佩的是这么一个小厂也自行写了嵌入式方案,下边我们来看看这个恢复案例。 故障存储: WD500G 故障现象: 此安防设备在使用过程中被…

python/c++ Leetcode题解——1.两数之和

目录 方法1:枚举法 思路 Code 方法2:哈希表 思路 Code 方法1:枚举法 思路 最容易想到的方法是枚举数组中的每一个数 x,寻找数组中是否存在 target - x。 当我们使用遍历整个数组的方式寻找 target - x 时,需要注意到每一个位于 x 之前的元素都已…

【机器学习】应用KNN实现鸢尾花种类预测

目录 前言 一、K最近邻(KNN)介绍 二、鸢尾花数据集介绍 三、鸢尾花数据集可视化 四、鸢尾花数据分析 总结 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Fil…

07-抽象工厂

意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 适用性 在以下的情况可以选择使用抽象工厂模式: 一个系统要独立于它的产品的创建、组合和表示。一个系统要由多个产品系列中的一个来配置。要强调一系列相关的产品对象的…

Spring MVC 中的常用注解和用法

目录 一、什么是 Spring MVC 二、MVC定义 三、简述 SpringMVC 起到的作用有哪些? 四、注解 五、请求转发或请求重定向 一、什么是 Spring MVC Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web…

移动端Vant中的Calendar日历增加显示农历(节日、节气)功能

核心: 使用 js-calendar-converter 库实现 npm地址:js-calendar-converter 内部使用原生calendar.js, 中国农历(阴阳历)和西元阳历即公历互转JavaScript库,具体实现感兴趣的可自行查看其实现源码。 原日…

唱作歌手朱卫明的粤语版《兄弟情》:一曲深情唱尽人间真挚情感

朱卫明的粤语版《兄弟情》:一曲深情唱尽人间真挚情感 在音乐的广阔天地里,每种语言都有其独特的韵味和魅力。对于唱作音乐人朱卫明来说,他用普通话演唱的歌曲已经深入人心,但当他将《兄弟情》这首歌曲以粤语演绎时,更…

笔记 - 现代嵌入式芯片封装识读

0.引用: 配图、资料并非一处采集,我不太容易找到图片的原始链接。这里的图片仅作示例,无商业用途。如果涉及侵权,请随时联系。谢谢! PCB封装欣赏了解之旅(下篇)—— 常用集成电路_ufqfpn封装…

【C++】STL 容器 - string 字符串操作 ⑤ ( string 字符串查找 | find 函数查找字符串 | rfind 函数查找字符串 )

文章目录 一、string 字符查找 - find 函数查找字符串1、string 类 find 函数原型说明2、代码示例 - 字符串查找3、代码示例 - 统计字符串子串 二、string 字符查找 - rfind 函数查找字符串1、string 类 rfind 函数原型说明2、代码示例 - rfind 字符串查找 一、string 字符查找…

注册与回调

C 再谈谈注册(本质是建立映射)与回调 在之前的博文中, 我们探讨过映射的重要作用, 请直接看:http://blog.csdn.net/stpeace/article/details/39452203, 在那篇文章中, 我们是用STL中的map来做的, map建立的是key-value…

rk3568 RGMII KSZ8795 MAC TO MAC

RK3568与KSZ8795交换机芯片连接,直接MAC TO MAC方式,这样一下就扩展会4路网口,应该场合比较多,移植过程如下: 参考《Rockchip_Developer_Guide_Linux_MAC_TO_MAC_CN.pdf》 《rockchip RGMIImv88e6390 管理型交换机功…

【Spring】之Ioc和Aop快速了解

这里写目录标题 1.Spring框架是什么?简介:总结:Spring框架,可以理解为是一个管理者:管理整个分层架构(MVC)中的每一个对象;(每一个对象称之为bean) 2.Spring框…

太空旅行:计算机技术的崭新航程

太空旅行:计算机技术的崭新航程 一、引言 自古以来,人类就对浩渺的宇宙充满了无尽的好奇和渴望。随着科技的飞速发展,太空旅行已经从科幻小说中的构想变为现实。在这个过程中,计算机技术起到了不可或缺的作用。从阿波罗时代的初…

​FL Studio2024最新版本好不好用?有哪些新功能

FL Studio2024版是一款在国内非常受欢迎的多功能音频处理软件,我们可以通过这款软件来对多种不同格式的音频文件来进行编辑处理。而且FL Studio 2024版还为用户们准备了超多的音乐乐器伴奏,我们可以直接一键调取自己需要的音调。 FL Studio 2024版不仅拥…

HarmonyOS4.0从零开始的开发教程15HTTP数据请求

HarmonyOS(十三)HTTP数据请求 1 概述 日常生活中我们使用应用程序看新闻、发送消息等,都需要连接到互联网,从服务端获取数据。例如,新闻应用可以从新闻服务器中获取最新的热点新闻,从而给用户打造更加丰富…

MySQL进阶2 - 索引

MySQL进阶1 - 索引 1. 索引概述2. 索引结构2.1 二叉树2.2 B-Tree(多路平衡查找树)2.3 BTree2.4 Hash 3. 索引分类4. 索引语法5. SQL性能分析5.1 SQL执行频率5.2 慢查询日志5.3 profile5.4 explain执行计划5.3.1 EXPLAIN执行计划各字段含义: 6. 索引使…