前言

        最近笔者在做的一个微服务项目中需要使用到Nginx,而作者之前从未接触到这一方面的技术,所以接下来的内容,我将以一个初学者的角度,为大家呈现关于Nginx的学习内容。看完本篇内容,你将收获如下“财富”:


  • 了解什么是Nginx
  • 知晓Nginx的应用场景和具体可以做什么事情
  • 正向代理反向代理,从此不再傻傻分不清楚
  • 负载均衡动静分离,认知界限上升

零基础学Nginx【1】 | Nginx基础概念入门_服务器

Nginx简介

什么是Nginx

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


零基础学Nginx【1】 | Nginx基础概念入门_服务器_02


Nginx作为web服务器

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


更详细的内容可以参考:​​https://lnmp.org/nginx.html​


正向代理

        正向代理类似一个跳板机,代理访问外部资源。

        比如我们国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理服务器,请求发到代理服务器,代理服务器能够访问谷歌,这样由代理去谷歌取到返回数据,再返回给我们,这样我们就能访问谷歌了。


零基础学Nginx【1】 | Nginx基础概念入门_反向代理_03

        正向代理的用途:


  • 访问原来无法访问的资源,如google
  • 可以做缓存,加速访问资源
  • 对客户端访问授权,上网进行认证
  • 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

反向代理

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

零基础学Nginx【1】 | Nginx基础概念入门_反向代理_04

        反向代理的作用:


  • 保证内网的安全,阻止web攻击,大型网站,通常将反向代理作为公网访问地址,Web服务器是内网
  • 负载均衡,通过反向代理服务器来优化网站的负载

正向代理 VS 反向代理 总结

        正向代理即是客户端代理, 代理客户端, 服务端不知道实际发起请求的客户端。

        反向代理即是服务端代理, 代理服务端, 客户端不知道实际提供服务的服务端。

零基础学Nginx【1】 | Nginx基础概念入门_反向代理_05

负载均衡

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

零基础学Nginx【1】 | Nginx基础概念入门_反向代理_06

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

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

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

零基础学Nginx【1】 | Nginx基础概念入门_nginx_07

动静分离

        传统的一种部署方式,我们会将服务器中的动态资源(jsp,servlet等)和静态资源(html,css,js)部署到 tomcat 里面去。也就是说,每一次请求,不论是静态资源还是动态资源,都去请求 tomcat。这种就属于用单服务部署项目所有的内容。

零基础学Nginx【1】 | Nginx基础概念入门_服务器_08

        但这种方式的局限性也很明显,即每次客户端发起请求都会去请求tomcat,会给服务器造成很大的压力。那我们该怎么解决呢?

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

零基础学Nginx【1】 | Nginx基础概念入门_反向代理_09

彩蛋

        有幸收集过一份关于Nginx的面试专题,需要的朋友可以关注【猿人菌】后台回复“Nginx”进行获取。

零基础学Nginx【1】 | Nginx基础概念入门_服务器_10

小结

        本篇文章到这里就结束了,不知道小伙伴们都掌握得怎么样呢!下一期,我们要学习Nginx的安装和Nginx常用命令的使用,敬请期待!你知道的越多,你不知道的也越多,我是Alice,我们下一期见!

         一键三连,养成习惯~


文章持续更新,可以微信搜一搜「 猿人菌 」第一时间阅读,思维导图,大数据书籍,大数据高频面试题,海量一线大厂面经…期待您的关注!