Nginx三大核心功能

news2025/1/4 15:52:15

一、反向代理🍉

(1)什么是正向代理🥝

概念
正向代理是一个位于客户端和目标服务器之间的代理服务器(中间服务器)。为了从目标服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转发请求,将获得的内容返回给客户端。正向代理的情况下,客户端必须要进行一些特殊的设置才能使用。

正向代理: 代理的客户端,对于服务器来说不知道真实的客户。

当出现多个请求客户端时,是这样的:
在这里插入图片描述
总结一下,用最简单粗暴的说法:「正向代理」指一对一或多对一,Server 不知道请求的 Client 都是哪些人。

(2)什么是反向代理 🥝

反向代理恰好跟正向代理相反。同时反向代理一般是负载均衡的一个原理。按照上面所说,正向代理是一对一或多对一,那么反向代理就是一对多,画图说明:
在这里插入图片描述
什么场景会用到呢?拿打客服电话举个例子:有天不小心 QQ 被盗,你气急败坏的打电话给客户热线,你打的这个电话是总线,最终会分配给具体某位客服 MM 来处理。这个时候总线就是我们的「反向代理」,它的作用体现在当有 100 个人同时打进总线的时候,能够合理的分配空闲的客服 MM 来对接,这也是负载均衡的概念。大部分访问量大的网站,如百度,都会做负载均衡,其中反向代理服务器起着至关重要的角色。所以你也可以猜测反向服务器对应高并发的能力也必须很强(这就是为什么 Node 会作为一个反向代理服务器的后台语言之一)。

反向代理隐藏了真实的服务端,当我们请求 http://www.baidu.com 的时候,就像拨打 QQ 客服热线一样,背后可能有成千上万台服务器为我们服务,但具体是哪一台,你不知道,也不需要知道,你只需要知道反向代理服务器是谁就好了,http://www.baidu.com 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去。

在这里插入图片描述
当然,除了一对多,还有多对多(很多用户同时访问同一个网站):

在这里插入图片描述
最后总结

两者的区别在于代理的对象不一样:正向代理代理的对象是客户端,反向代理代理的对象是服务端。

(3) 在Nginx上实现反向代理🥝

1.准备:🍓

搞一台真实服务器----tomcat项目。----搞一个springboot项目并放入linux服务器系统

在这里插入图片描述

2.运行springboot项目🍓

//java -jar 项目名
java -jar qy165-demo01.jar

在这里插入图片描述

3.在另一个窗口配置nginx来代理上面springboot真实项目服务。🍓

在这里插入图片描述
在这里插入图片描述

 server{
        listen  82;
        server_name localhost;
        location /{
          # http://被代理的服务器IP和Port 端口号
          proxy_pass http://192.168.179.129:8080;     
        }
    }

在这里插入图片描述

4.重新加载nginx配置文件🍓

先启动nginx

//进到nginx脚本命令目录下
 cd /usr/soft/nginx/sbin
 //执行nginx
 ./nginx

在这里插入图片描述
关闭防火墙

//关闭防火墙
systemctl stop firewalld
//查询防火墙状态
systemctl status firewalld
//查询tomcat状态  防止端口冲突
ps -ef |grep tomcat

在这里插入图片描述
刷新Nginx配置文件

//刷新Nginx 配置文件
./nginx -s reload

在这里插入图片描述

5.浏览器访问nginx🍓

在这里插入图片描述

二、负载均衡🍉

(1)什么是负载均衡🥝

负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
在这里插入图片描述

(2)在Nginx上实现负载均衡🥝

1.准备🍓

启动两台虚拟机确保虚拟机ip不一样

在这里插入图片描述

2.启动两个springboot项目🍓

//java -jar 项目名
java -jar qy165-demo01.jar
java -jar qy165-demo02.jar

在这里插入图片描述

3.在另一个窗口配置nginx负载均衡🍓

#upstream表示为真实集群服务器
upstream qu165{
    server 192.168.223.147:8080;
    server 192.168.223.167:8080;
    }
server {
    listen 82;
    server_name localhost;
    location /{
      # http://被代理的服务器IP和Port端口号
      proxy_pass http://qy165;
      }

在这里插入图片描述

4. nginx重新加载配置文件🍓

//在sbin目录下刷新Nginx 配置文件
./nginx -s reload

在这里插入图片描述

5.浏览器访问nginx🍓

在这里插入图片描述

(3) 负载均衡策略🥝

在这里插入图片描述

在这里插入图片描述

  • 四层负载均衡四层负载均衡工作在OSI模型的传输层,由于在传输层,只有TCP/UDP协议,这两种协议中除了包含源IP、目标IP以外,还包含源端口号及目的端口号。四层负载均衡服务器在接受到客户端请求后,以后通过修改数据包的地址信息(IP+端口号)将流量转发到应用服务器。
  • 七层负载均衡七层负载均衡工作在OSI模型的应用层,应用层协议较多,常用http、radius、dns等。七层负载就可以基于这些协议来负载。这些应用层协议中会包含很多有意义的内容。比如同一个Web服务器的负载均衡,除了根据IP加端口进行负载外,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。

常见负载均衡算法

轮询(Round Robin)
请求到达后,将客户端发送到负载均衡器的请求依次轮流地转发给服务集群的某个节点。

优点:实现简单,每个集群节点平均分担所有的请求。

缺点:当集群中服务器硬件配置不同、性能差别大时,无法区别对待。引出下面的算法。

随机(Random)
随机选取集群中的某个节点来处理该请求,由概率论的知识可知,随着请求量的变大,随机算法会逐渐演变为轮询算法,即集群各个节点会处理差不多数量的请求。

优点:简单使用,不需要额外的配置和算法。

缺点:随机数的特点是在数据量大到一定量时才能保证均衡,所以如果请求量有限的话,可能会达不到均衡负载的要求。

加权
加权算法主要是根据集群的节点对应机器的性能的差异,给每个节点设置一个权重值,其中性能好的机器节点设置一个较大的权重值,而性能差的机器节点则设置一个较小的权重值。权重大的节点能够被更多的选中。它是和随机、轮训一起使用的。

优点:可以根据机器的具体情况,分配不同的负载,达到能者多劳。

缺点:需要额外管理加权系数。

最小连接数
主要是根据集群的每个节点的当前连接数来决定将请求转发给哪个节点,即每次都将请求转发给当前存在最少并发连接的节点。

优点:可以根据集群节点的负载情况来进行请求的动态分发,即机器性能好,处理请求快,积压请求少的节点分配更多的请求。避免某个节点因为处理超过自身所能承受的请求量而导致宕机或者响应过慢。

hash
将对请求的IP地址或者URL计算一个哈希值,然后与集群节点的数量进行取模来决定将请求分发给哪个集群节点。它不是真正意义上的负载均衡,在某些意义上也是一个单点服务。

优点:实现简单

缺点:如果某个节点挂了,会使得一部分流量不可用。

负载均衡分类

  1. 硬件负载均衡
    常见的硬件有比较昂贵的F5和Array等商用的负载均衡器,它的优点简单,有专业的人负责;缺点就是 贵 如果你是土豪,可以考虑,但是对于规模较小的网络服务来说暂时还没有需要使用。

  2. 软件负载均衡
    目前使用最广泛的三种负载均衡软件Nginx/LVS/HAProxy,他们都是开源免费的负载均衡软件,这些都是通过软件级别来实现,所以费用较低。足以见得,搞软件的是多么不值钱!

  3. 成熟的架构
    负载均衡业界早已有成熟的架构,比较常用的有LVS+Keepalived、Nginx+Keepalived、HAProxy+Keepalived。

在这里插入图片描述

Nginx的负载均衡支持:

  • rr:轮叫,轮流分配到后端服务器;
  • wrr:权重轮叫,根据后端服务器负载情况来分配;
  • lc:最小连接,分配已建立连接最少的服务器上;
  • wlc:权重最小连接,根据后端服务器处理能力来分配。

Nginx优点:

1.简单:安装和配置比较简单、测试也简单
2.稳定:单机一般能支撑几万次的并发量
3.轻量:能ping通就就能进行负载功能
4.易用:明确的错误码、超时提醒
5.强大:负载均衡、反向代理、WEB容器等功能

Nginx缺点:

1.仅能支持http、https和Email协议
2.对后端服务器的健康检查, 只支持通过端口来检测,不支持通过url来检测

roundrobin:轮询,轮流分配到后端服务器;
static-rr:根据后端服务器性能分配;
leastconn:最小连接者优先处理;
source:根据请求源IP,与Nginx的IP_Hash类似。

默认使用轮询策略

权重策略:----合适服务器的配置不同,被访问的频率不同。

在这里插入图片描述
ip_hash: ----根据客户端的ip分配相应真实服务器。

在这里插入图片描述

三、动静分离🍉

(1) 什么是动静分离🥝

在Web开发中,通常来说,动态资源其实就是指那些后台资源,而静态资源就是指HTML,JavaScript,CSS,img等文件。
动静分离,说白了,就是将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用服务器的请求。后台应用服务器只负责动态数据请求。

优势:分担负载,减轻web服务器的压力,适用于大负载。静态资源放置cdn,同时还可以通过配置缓存到客户浏览器中,这样极大减轻web服务器的压力。

劣势:网络环境不佳时,ajax回应很慢,导致页面出现空白,出错处理会不好看。不利于网站SEO(搜索引擎优化),增加了开发复杂度。

把静态资源【css,js,img】交于nginx来处理,而动态资源[接口,jsp]还是有真实服务器处理
好处: 当修改静态资源时,无需对每个真实服务器的静态资源做修改,只需要修改nginx一处的静态资源。

(2) 在Nginx上实现动静分离🥝

1.准备🍓

准备一个springboot项目
在这里插入图片描述
在这里插入图片描述

项目启动效果
在这里插入图片描述

2.nginx 配置静态文件路径🍓

  server{
        listen  82;
        server_name localhost;
        location /{
          # http://被代理的服务器IP和Port 端口号
          proxy_pass http://192.168.179.129:8080;
           
        }

        #配置静态资源如果你访问的资源以.jpg .css等结尾的 则找static目录下的资源
        location ~\.jpg|.css|.js|.png|.jpeg|.gif$ {
             root static;
             }
    }

在这里插入图片描述

3. nginx重新加载配置文件🍓

//在sbin目录下刷新Nginx 配置文件
./nginx -s reload

在这里插入图片描述

4.将需要用的静态文件拉到nginx中🍓

需要先在nginx目录中创建static目录

在这里插入图片描述

5.运行springboot项目🍓

将jar包拉到Linux中
在这里插入图片描述
启动项目

//启动静态分离springboot项目
 java -jar Nginx-0.0.1-SNAPSHOT.jar 

在这里插入图片描述

6.浏览器访问nginx🍓

在这里插入图片描述

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

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

相关文章

Lion:闭源大语言模型的对抗蒸馏

Lion:闭源大语言模型的对抗蒸馏 Lion,由香港科技大学提出的针对闭源大语言模型的对抗蒸馏框架,成功将 ChatGPT 的知识转移到了参数量 7B的 LLaMA 模型(命名为 Lion),在只有 70k训练数据的情况下&#xff0…

白嫖一份小白到进阶网络安全学习宝典【建议收藏】

前言 想学网络安全但是无从下手的小白看过来,非常系统的学习资料,无数小白看了这份资料都已经成功入门,涵盖多个网络安全知识点,我愿称之为网络安全自学宝典。 一、概念性知识 1、了解什么是网络安全 2、清楚法律法规 3、网络安…

【ElatsticSearch】ES索引库与文档的增删改查

文章目录 一、操作索引库1、mapping映射属性2、索引库的CRUD 二、文档操作1、新增文档2、查询文档3、删除文档4、修改文档5、注意点 一、操作索引库 1、mapping映射属性 mapping是对索引库中文档的约束,常见的mapping属性包括: type:字段数…

【计算机视觉 | 图像分割】arxiv 计算机视觉关于图像分割的学术速递(7 月 4 日论文合集)

文章目录 一、分割|语义相关(18篇)1.1 TomatoDIFF: On-plant Tomato Segmentation with Denoising Diffusion Models1.2 CGAM: Click-Guided Attention Module for Interactive Pathology Image Segmentation via Backpropagating Refinement1.3 RefSAM: Efficiently Adapting …

Python实现通过GUI界面提交参数,来启动python脚本

前言 本文是该专栏的第30篇,后面会持续分享python的各种干货知识,值得关注。 假设现在有如下需求,用python写一个GUI界面,在该GUI界面上输入参数信息,然后再点击GUI界面上的提交按钮,启动并执行对应的python脚本。换言之,在GUI界面上输入的参数信息传递给对应的python脚…

图像处理常用算法(基础)

同图像灰度不同,边界处一般会有明显的边缘,利用此特征可以分割图像。需要说明的是:边缘和物体间的边界并不等同,边缘指的是图像中像素的值有突变的地方,而物体间的边界指的是现实场景中的存在于物体之间的边界。有可能有边缘的地方并非边界,也有可能边界的地方并无边缘,…

【动态规划算法练习】day14

文章目录 一、97. 交错字符串1.题目简介2.解题思路3.代码4.运行结果 二、712. 两个字符串的最小ASCII删除和1.题目简介2.解题思路3.代码4.运行结果 三、718. 最长重复子数组1.题目简介2.解题思路3.代码4.运行结果 总结 一、97. 交错字符串 1.题目简介 97. 交错字符串 给定三个…

嵌入式如何面试10家公司,拿到9个offer的?

又快到一年一度的秋招季,不少同学私信学长吐苦水,明明在各大招聘网站上海投了那么多家公司,收到的面试通知却屈指可数,好不容易拿到面试机会,却在一面就扑街...... 很多同学能力还行,但是经验谈不上很出彩&…

【IMX6ULL驱动开发学习】15.IMX6ULL驱动开发问题记录(sleep被kill_fasync打断)

发现问题的契机: 学习异步通知的时候,自己实现一个功能:按键控制蜂鸣器,同时LED灯在闪烁 结果:LED好像也同时被按键控制了 最后调试结果发现: 应用层的sleep被驱动层的kill_fasync打断,所以sle…

GB/T 3596-2008 购买线材时,判断线材标称直径和载流的方法

文章目录 GB/T 3596-2008 购买线材时,判断线材标称直径和载流的方法概述笔记老国标 - 判断线材标称直径的方法END GB/T 3596-2008 购买线材时,判断线材标称直径和载流的方法 概述 在淘宝上买线材, 买了RV1.5/RV1.0各买了4种颜色(红/黑/黄绿/蓝). 看到评论区, 有人留言, 说线径…

【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(7 月 3 日论文合集)

文章目录 一、检测相关(9篇)1.1 Federated Ensemble YOLOv5 - A Better Generalized Object Detection Algorithm1.2 Zero-shot Nuclei Detection via Visual-Language Pre-trained Models1.3 Federated Object Detection for Quality Inspection in Shared Production1.4 Comp…

Raw Socket 之网络层数据获取

目录 简介正常使用tcpdump程序与分析报文理解参考 简介 针对网络包,我们一般的发送接收直接使用的是应用层,此时无法分辨接收为广播包还是单播包,为了能够分辨出接收到的是否为广播包,需要接收数据链路层的数据或者网络层的数据。…

ct.js笔记-加载字体时字体名不能包含中文

这个和Qt很像,在开发过程中尽量避免使用中文。如下: 这个AaJH中文,在加载时: this.nickNameLabel new PIXI.Text(Your text here, ct.styles.get(AaJH中文)); this.addChild(this.nickNameLabel);this.nickNameLabel.x 30; thi…

UE5接入在线直播视频源,如hls(m3u8)格式

文章目录 1.实现目标2.实现过程2.1 VlcMedia插件重编译2.2 UE5接入在线直播2.3 创建材质3.参考资料1.实现目标 通过重编译VlcMedia插件,以支持在线直播视频在UE5中的播放,GIF动图如下: 2.实现过程 本文主要包括插件的重编译、在线直播视频的接入,以及材质的创建三个部分。…

基于Java办公用品管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

atomic原子操作

当一个程序中的两个线程同时向这个程序里的全局变量增加数时会发生什么? 理论上来说,应该是200000,但是最后结果不是200000。 这是多个线程同时操作一个全局变量引起的错误。 要解决这个错误,用互斥锁即可: 这样就可以…

【计算机视觉】DETR 系列的最新综述!

论文地址: https://arxiv.org/pdf/2306.04670.pdf项目地址: https://github.com/mindgarage-shan/trans_object_detection_surveyTransformer在自然语言处理(NLP)中的惊人表现,让研究人员很兴奋地探索它们在计算机视觉任务中的应用。与其他…

Spark | 性能调优原理与步骤 | 案例讲解

🔥 跟着梁哥打卡一波spark的性能调优~ 文章目录 1、Spark调优原理与步骤2、Spark任务UI监控3、Spark调优案例3.1、资源配置优化3.2、利用缓存减少重复计算3.3、数据倾斜调优3.4、broadcastmap代替join3.5、reduceByKey/aggregateByKey代替groupByKey 1、…

为什么门店需要店务管理系统?店务管理系统的重要性有哪些?

随着经济市场的回暖,实体行业特别是门店都需要更好的营销手段以留住客户、转化客户,因此需要一个好的工具来完成对于店铺经营数据的实时了解和管理,这就需要用到店务经营管理系统。如蚓链数字化店务管理系统具备股东营销系统、收银系统及进销…

Linux5.12 rsync 远程同步

文章目录 计算机系统5G云计算第四章 LINUX rsync 远程同步一、rsync概述二、配置 rsync 服务1.配置rsync源服务器2.发起端 三、发起端配置 rsyncinotify1.修改rsync源服务器配置文件2.调整 inotify 内核参数3.安装 inotify-tools4.在另外一个终端编写触发式同步脚本 计算机系统…