Nginx学习之路---nginx概述和基本概念

最近跟着尚硅谷的谷粒学院在学习Nginx相关方面的课程,开个博客来记录一下。


Nginx的概述

Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能力强,事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好,*使用 nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl、php等。但是不支持 java。Java 程序只能通过与 tomcat 配合完成。Nginx 专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率 ,能经受高负载的考验,有报告表明能支持高
达 50,000 个并发连接数。

以下找到一个网站,针对Nginx的性能介绍会更加详细,各位感兴趣的话可以前去参考以下:

https://lnmp.org/nginx.html

比如介绍到了Nginx的热部署,稳定性等等:

Nginx学习之路---nginx概述和基本概念

Nginx的一些基本概念

正向代理


正向代理: 如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。

Nginx学习之路---nginx概述和基本概念

举一个例子,我们平时不能直接访问谷歌搜索页面,因为网会被禁止。但是这个时候我们可以通过一个代理的服务器,我们去访问这个代理的服务器,由这个代理的服务器去帮我们访问谷歌搜索页面获取数据返回。

我们只需要在请求端配置以下代理服务器的地址即可。再换个通俗的例子,就是平时我们在上班或者上学,没事时不能出去玩。这时有一位朋友去国外了,可以去找ta帮忙代购。我们通过ta去可以买到国外的东西,ta就相当于上文的代理服务器,这种模式也称为“正向代理”。(前提是不要太重的东西,不然ta会杀了你)

反向代理


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

打个比方,我们去餐厅点菜,一般都是跟服务员点的吧?不会去直接跟厨师点,虽然负责做菜的就是厨师。但是一般餐厅都会有专门的服务员来负责点菜,然后知道客户的要点菜,再告诉后面的厨师,厨师做出来后,在返回给顾客。

反向代理就是这个理,就像是一个路由转发。浏览器无需知道真实服务器的ip或域名地址,只需要知道这个反向代理的服务器地址,然后去请求,由这个反向代理服务器进行服务转发。

Nginx学习之路---nginx概述和基本概念

它和上文讲的正向代理有个主要区别:

  • 反向代理无需任何配置,只需要知道反向代理的服务器地址即可,就像是你不用找厨师,你也无需知道厨师是谁,你只要知道你去找服务员点菜就可以了。

负载均衡


客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据进行交互,服务器处理完毕后,再将结果返回给客户端。

这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是比较适合的,成本也低。但是随着信息数量的不断增长,访问量和数据量的飞速增长,以及系统业务的复杂度增加,这种架构会造成服务器相应客户端的请求日益缓慢,并发量特别大的时候,还容易造成服务器直接崩溃。很明显这是由于服务器性能的瓶颈造成的问题,那么如何解决这种情况呢?

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

上面的分析我们去掉了增加服务器物理配置来解决问题的办法,也就是说纵向解决问题的办法行不通了,那么横向增加服务器的数量呢?这时候集群的概念产生了,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡

这个概念介绍了太多次了,再拿个例子吧。

古代我们需要拉一些货物,那么拉货物的驴要好吧。可是随着货物增多,现在有两种方案,一是换成一批强壮的驴,二是再加一批驴。这个不难选吧,毕竟驴(人)多才好办事。

软件开发也是一样,随着服务器实例的增多,我们的上文讲到的反向代理服务器就要决定请求要转发到哪一个实例上,这一过程就是负载均衡.

动静分离


最后一个概念了。

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

Nginx学习之路---nginx概述和基本概念

就是将动态资源(jsp、servlet)与静态资源(html、css、js)访问请求分离,不同的服务器处理不同的资源。这样可以尽量让一个服务器职责单一

以上有些大段是直接copy学习资料的,但后面加以自己的语言,希望能帮助到一些朋友更好的理解。感谢观看????