• 初识 Nginx - 概念篇 - 细节狂魔


    前言

    本文的内容均来自于B站up主“尚硅谷”的教程视频
    博主的博客,你可以理解为是博主在做笔记,方便复习。
    希望也可以帮到你们。

    另外,Nginx 是 学习SpringCloud 的前置条件,所以还是非常有必要学习一下的。


    正文 - Nginx简介

    1、什么是Nginx?

    Nginx
    HTTP反向代理web服务器

    Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
    Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,公开版本1.19.6发布于2020年12月15日。
    其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。
    2022年01月25日,nginx 1.21.6发布。
    Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。

    这可以说是后端必学知识。
    无论小厂,中厂,大厂,都在使用 Nginx。


    2、Nginx 作为 web 服务器

    Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议 的动态语言,比如: Perl,PHP等。
    但是不支持 Java,Java 程序只能通过 Tomcat 配合完成。
    Nginx 专为性能优化而开发,性能是其最重要的考量,实际上非常注重效率,能经受高负载的考验,有报告表明能支持高达 50,000 个并发链接数。
    在这里插入图片描述


    3、反向代理

    3.1 正向代理

    在讲解反向代理之前,我们需要先了解 正向代理 是什么意思。

    Nginx 不仅可以做反向代理,实现负载均衡还能用作正向代理来进行上网等功能。

    正向代理,如果把局域网外的 internet 想象成一个巨大的资源库,则局域网中的客户端要访问 internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。
    说白了,就是要通过 “中介【代理服务器】”来访问 internet。
    在这里插入图片描述
    在了解完 正向代理之后,我们再来看看反向代理。


    3.2、反向代理

    反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目录服务器获取数据后,再返回给客户端,此时反向代理服务器 和 目标服务器 对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实的服务器 IP 地址。
    在这里插入图片描述

    正向代理 与反向代理的区别:
    正向代理,就好像 中间人,作为 另外两人【客户端 和 目标服务器】之间的沟通的桥梁,并且这两个人“相互认识”。【客户端知道它是和那个目标服务器交互】
    反向代理,就好像是 谍战片的中间人,负责将上级的命令 传递给 下级人员。并且,下级人员只认识 中间人,不知道上级是谁。【客户端只知道代理服务器的地址,不知道目标服务器的地址,安全性增强】
    两者之间的关系有点类似于:转发 和 重定向 之间的关系。


    4、负载均衡

    客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕后,再将结果返回给客户端。在这里插入图片描述
    这种架构模式对于早期的系统相对单一并发请求相对较少的情况下是比较适合的,成本也低随着信息数量的不断增长,访问量和数据量的飞速增长,以及系统业务的复杂度增加,这种架构会造成服务器响应客户端请求的速度日益缓慢,并发量特别大的时候,还容易造成服务器的直接崩溃,很明显这是由于服务器的性能的瓶颈造成的问题,那么如何解决这种情况呢?

    我们首先想到的可能是升级服务器的配置,比如提高 CPU 执行频率,加大内存提高机器的物理性能来解决此问题,但是我们知道 摩尔定律 的日益失效,硬件的性能提升已经不能满足日益提升的需求了。
    最明显的一个例子:
    天猫双十一的当天,某个热销商品的瞬时访问量是极其庞大的,那么类似上面的系统架构,将机器都增加到现有的顶级物理配置,都是不能够满足需求的,那么怎么办呢?

    通过上面的分析,我们排除掉了 增加服务器的物理配置 来解决问题的方法,也就是说纵向解决问题的方法行不通了,那么横向增加服务器的数据量呢?
    这时候集群的概念产生了,单个服务器解决不了,我们就增加服务器的数量,然后将请求分发到各个服务器上,简单来说就是将请求“分流”了,请求的压力由多个服务器共同承担,从而减轻了单个服务器的压力。

    这就是负载均衡,将压力分摊给多个服务器,由多个服务器共同承担访问压力,这样就避免了 单个服务器 发生 过载而崩溃的情况了。
    在这里插入图片描述


    5、动静分离

    为了加快网站的解析速度,可以把动态页面和静态页面交由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。
    在这里插入图片描述


    6、高可用

    简单来说,就是配置了两台(或更多)的nginx服务器,当主服务器宕机时,就会自动切换到备用服务器,从而保证项目的持续运行。
    【有点像 Redis 中的 主从复制 】

  • 相关阅读:
    2.6 场效应管放大电路
    慢日志查询
    FigDraw 19. SCI文章中绘图之坡度图(Slope Chart)
    【Redis底层解析】跳跃表
    2010年09月06日 Go生态洞察:Go语言荣获2010年度Bossie奖
    队列题目:设计循环双端队列
    html[Attributes Style]什么意思
    Redis原理:动态字符串SDS
    计算机毕业设计(附源码)python职业高中智慧教学系统
    js中导入引用外部js
  • 原文地址:https://blog.csdn.net/DarkAndGrey/article/details/127716863