干货篇 | Nginx 我还真不信你学不会(上)

Posted 咸鱼爱搞机

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了干货篇 | Nginx 我还真不信你学不会(上)相关的知识,希望对你有一定的参考价值。

1. 前言



今天,我们来聊一聊nginx——作为一个免费开源的、性能强大的、轻量级的、提供web服务和反向代理服务的中间件。它拥有如此强大的功能,以至于国内很多像淘宝,京东,百度,新浪,网易,腾讯等等这些知名大厂都在使用Nginx来提供网站服务


看到这里,你们是不是觉得我在吹牛,是不是像我说的那样都是用Nginx来提供网站服务废话不多说,直接上证据。


这里使用阿里云的服务器去查看京东和淘宝的网站。


我们使用如下命令,去访问要查询网站的服务器,并返回一些详细信息,像状态码,http协议版本号等等


curl -i 网址


首先去访问马爸爸的淘宝网


curl -i www.taobao.com


干货篇 | Nginx 我还真不信你学不会(上)



如图所示,我们可以看到在我标记处那里显示着 Server:Tengine。这个 Tengine是个什么服务器,我们百度一下。


干货篇 | Nginx 我还真不信你学不会(上)


简介里说到,Tengine是在Nginx的基础上来进行二次开发的,也就是说它依然延续了Nginx的特性


我们再来访问一下不知妻美刘强东的京东网


curl -i www.jd.com


干货篇 | Nginx 我还真不信你学不会(上)



通过这两个例子,我们可以看到国内的一些知名大厂,它们的网站就是用了Nginx来提供网站服务,或者是在Nginx的基础上自已研发。


那么,什么是Nginx呢?


干货篇 | Nginx 我还真不信你学不会(上)
2.初识Nginx


Nginx是由一位俄罗斯的工程师是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点使用C语言设计开发的。从2004年发布至今,凭借开源的力量, 已经接近成熟与完善并逐渐赶超当时的世界第一服务器Apache。


Nginx和Apache一样,都是一种可以来提供web服务(网站服务)的中间件,我们可以用Nginx或者Apache来搭建我们的网站服务器。


Nginx基于REST架构风格,以统一资源描述符(URI)或者统一资源定位符(URL)作为沟通依据,通过HTTP协议来提供各种网络服务。


由于以下这几点原因,Nginx成为了越来越多人的选择:

  • 支持高并发,消耗内存小,性能好

  • 具有多种功能:

    • 静态资源web服务功能

    • 负载均衡功能

    • 网站缓存功能

    • 动静分离功能

  • 可以跨平台部署

  • 基于事件驱动架构,使用异步网络IO模型:epoll模型

  • 支持热部署:不停机更新配置文件或升级版本

  • 采用模块化设计,有较好拓展性

干货篇 | Nginx 我还真不信你学不会(上)


Nginx除了是一款HTTP服务器之外,也可作为反向代理服务器。


干货篇 | Nginx 我还真不信你学不会(上)
3.关于代理


前面我们提到,Nginx可作为反向代理服务器,那么什么是反向代理?


说到反向代理,我们先要了解什么是代理


所谓的代理,就相当于一个代表,这里会涉及到两个角色:被代理角色和目标角色。被代理角色通过代理来访问目标角色并完成一些任务的过程,就叫做代理操作过程。


举个例子:我们微信好友列表里是不是有很多微商,比如说卖手机的,你在他那里买了一台华为手机,他的背后是华为手机厂家在提供华为手机,那么那个卖手机的就相当于代理,而华为厂家就是被代理角色,你就是目标角色。


正向代理


说反向代理之前,我们先看看正向代理,正向代理其实是我们在生活中最常接触到的代理模式


比如说由于技术需要,我们不得已去访问国外的某些网站,但是你会发现你的浏览器根本访问不了。这时候我们就会想到采取翻qiang的操作来进行访问


翻qiang的方式主要是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,由代理服务器代替我们去访问国外的服务器,最后将访问到的数据传递给我们



可以说,正向代理模式屏蔽了客户端的具体信息


我一直秉承着 “NO PICTURE NO BB” 的精神,没有图的话怎么能加深理解呢?对吧,接下来上图:


干货篇 | Nginx 我还真不信你学不会(上)


总的来说,正向代理,它代理的是客户端,是一个位于客户端和原始服务器之间的服务器,为了从原始服务器获得数据,客户端需要向正向代理发送请求,再由正向代理向原始服务器转发请求并将获得的数据返回给客户端。


反向代理


明白了什么是正向代理,我们现在来讲讲什么是反向代理。


在过去,数据还不是很大的时候,单台服务器就能满足日常的访问需求。而如今,在大数据时代,单台服务器已经远远不能满足日益增长访问量了。


此时就出现了现在大家或多或少都能听到的一个名词:分布式。也就是指通过部署多台服务器形成集群来解决访问量过多的问题。


比如说一家银行的业务窗口只有一个,一天最多接待10个客户。现在一下子多了100个客户,银行在多开几个业务窗口就能解决这个问题了。


与此同时,我们还要考虑,一旦服务器多了起来,那么客户端来访问的时候,究竟如何将这条访问请求交给服务器集群中的哪台服务器呢?而谁又来负责将这条请求交给服务器集群中的某一台服务器呢?


反向代理就提供了一个解决方案:


干货篇 | Nginx 我还真不信你学不会(上)


如图所示:多个客户端给服务器发送请求,反向代理服务器(后面我们用Nginx服务器来代表反向代理服务器)收到之后,按照一定的规则将请求分发给后面的服务器来处理


此时我们发现,请求的来源也就是客户端是明确的,但是请求具体交给后端哪台服务器就不知道了。


总的来说,反向代理,代理的是服务端。访问者(客户端)并不知道自己访问的是一个代理。


反向代理的作用:

  • 保证了内网的安全

  • 通过反向代理来实现负载均衡


上述我们提到了负载均衡,那么什么是负载均衡?


干货篇 | Nginx 我还真不信你学不会(上)
4.负载均衡



我们知道,Nginx可以作为反向代理来实现负载均衡,那么什么是负载均衡?


上面提到的客户端发送请求给反向代理,反向代理收到的请求数量,就是我们说的负载量(负载)


反向代理服务器收到这些请求之后,会按照一定的规则来进行分发,这个规则是一种均衡规则


所以反向代理将这些请求转发到后端的服务器上的这个过程,称为负载均衡。


一般来讲,实现负载均衡的方式有硬件负载均衡和软件负载均衡


硬件负责均衡:

像F5负载均衡器,它长得跟个交换机似的。通俗点来讲就是将客户端的请求量通过F5负载到各个服务器,增加吞吐量。缺点就是造价昂贵,消费不起。



   家境贫寒,告辞


软件负载均衡:

这个在公司里就比较常见,像LVS,Nginx,Apache都可以提供负载均衡的功能,本文我们就先讲Nginx。


5.总结


最后,我们来总结一下

  • Nginx是一个高性能,而且轻量级的HTTP服务器和反向代理服务器;我们可以使用Nginx来部署web服务器;Nginx通过反向代理功能来实现负载均衡

  • 正向代理屏蔽了客户端,它代理的是客户端。服务器只知道请求是正向代理服务器发过来的,它并不知道是哪台具体的客户端

  • 反向代理屏蔽了服务端,它代理的是服务器。对于客户端来讲,它只需要访问代理服务器就能获取后端服务器的数据(客户端并不知道反向代理服务器的存在,它只认为它现在访问的是后端服务器)


你们以为这就完了?开玩笑,现在才刚刚开始


下篇文章我们来讲讲如何上手Nginx以及如何使用搭建自己的web网站以及实现Nginx负载均衡功能。


咱们下期见!

以上是关于干货篇 | Nginx 我还真不信你学不会(上)的主要内容,如果未能解决你的问题,请参考以下文章

手把手教你实现MySQL读写分离+故障转移,不信你学不会!

Python万字博文教你玩透Beautiful Soup库,不信你学不会❤️建议收藏系列❤️

图解23种设计模式,不信你学不会!(建议收藏)

从头捋一遍Java项目中的五大设计原则,就不信你学不会!

图解23种设计模式,不信你学不会!(建议收藏)

超详细的标准工时制定方法,不信你学不会