干货篇 | Nginx 我还真不信你学不会(上)
Posted 咸鱼爱搞机
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了干货篇 | Nginx 我还真不信你学不会(上)相关的知识,希望对你有一定的参考价值。
今天,我们来聊一聊nginx——作为一个免费开源的、性能强大的、轻量级的、提供web服务和反向代理服务的中间件。它拥有如此强大的功能,以至于国内很多像淘宝,京东,百度,新浪,网易,腾讯等等这些知名大厂都在使用Nginx来提供网站服务
看到这里,你们是不是觉得我在吹牛,是不是像我说的那样都是用Nginx来提供网站服务废话不多说,直接上证据。
这里使用阿里云的服务器去查看京东和淘宝的网站。
我们使用如下命令,去访问要查询网站的服务器,并返回一些详细信息,像状态码,http协议版本号等等。
curl -i 网址
首先去访问马爸爸的淘宝网
curl -i www.taobao.com
如图所示,我们可以看到在我标记处那里显示着 Server:Tengine。这个 Tengine是个什么服务器,我们百度一下。
简介里说到,Tengine是在Nginx的基础上来进行二次开发的,也就是说它依然延续了Nginx的特性
我们再来访问一下不知妻美刘强东的京东网
curl -i www.jd.com
通过这两个例子,我们可以看到国内的一些知名大厂,它们的网站就是用了Nginx来提供网站服务,或者是在Nginx的基础上自已研发。
那么,什么是Nginx呢?
Nginx是由一位俄罗斯的工程师是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点使用C语言设计开发的。从2004年发布至今,凭借开源的力量, 已经接近成熟与完善并逐渐赶超当时的世界第一服务器Apache。
Nginx和Apache一样,都是一种可以来提供web服务(网站服务)的中间件,我们可以用Nginx或者Apache来搭建我们的网站服务器。
Nginx基于REST架构风格,以统一资源描述符(URI)或者统一资源定位符(URL)作为沟通依据,通过HTTP协议来提供各种网络服务。
由于以下这几点原因,Nginx成为了越来越多人的选择:
支持高并发,消耗内存小,性能好
具有多种功能:
静态资源web服务功能
负载均衡功能
网站缓存功能
动静分离功能
可以跨平台部署
基于事件驱动架构,使用异步网络IO模型:epoll模型
支持热部署:不停机更新配置文件或升级版本
采用模块化设计,有较好拓展性
Nginx除了是一款HTTP服务器之外,也可作为反向代理服务器。
前面我们提到,Nginx可作为反向代理服务器,那么什么是反向代理?
说到反向代理,我们先要了解什么是代理
所谓的代理,就相当于一个代表,这里会涉及到两个角色:被代理角色和目标角色。被代理角色通过代理来访问目标角色并完成一些任务的过程,就叫做代理操作过程。
举个例子:我们微信好友列表里是不是有很多微商,比如说卖手机的,你在他那里买了一台华为手机,他的背后是华为手机厂家在提供华为手机,那么那个卖手机的就相当于代理,而华为厂家就是被代理角色,你就是目标角色。
正向代理
说反向代理之前,我们先看看正向代理,正向代理其实是我们在生活中最常接触到的代理模式
比如说由于技术需要,我们不得已去访问国外的某些网站,但是你会发现你的浏览器根本访问不了。这时候我们就会想到采取翻qiang的操作来进行访问
翻qiang的方式主要是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,由代理服务器代替我们去访问国外的服务器,最后将访问到的数据传递给我们
可以说,正向代理模式屏蔽了客户端的具体信息
我一直秉承着 “NO PICTURE NO BB” 的精神,没有图的话怎么能加深理解呢?对吧,接下来上图:
总的来说,正向代理,它代理的是客户端,是一个位于客户端和原始服务器之间的服务器,为了从原始服务器获得数据,客户端需要向正向代理发送请求,再由正向代理向原始服务器转发请求并将获得的数据返回给客户端。
反向代理
明白了什么是正向代理,我们现在来讲讲什么是反向代理。
在过去,数据还不是很大的时候,单台服务器就能满足日常的访问需求。而如今,在大数据时代,单台服务器已经远远不能满足日益增长访问量了。
此时就出现了现在大家或多或少都能听到的一个名词:分布式。也就是指通过部署多台服务器形成集群来解决访问量过多的问题。
比如说一家银行的业务窗口只有一个,一天最多接待10个客户。现在一下子多了100个客户,银行在多开几个业务窗口就能解决这个问题了。
与此同时,我们还要考虑,一旦服务器多了起来,那么客户端来访问的时候,究竟如何将这条访问请求交给服务器集群中的哪台服务器呢?而谁又来负责将这条请求交给服务器集群中的某一台服务器呢?
反向代理就提供了一个解决方案:
如图所示:多个客户端给服务器发送请求,反向代理服务器(后面我们用Nginx服务器来代表反向代理服务器)收到之后,按照一定的规则将请求分发给后面的服务器来处理
此时我们发现,请求的来源也就是客户端是明确的,但是请求具体交给后端哪台服务器就不知道了。
总的来说,反向代理,代理的是服务端。访问者(客户端)并不知道自己访问的是一个代理。
反向代理的作用:
保证了内网的安全
通过反向代理来实现负载均衡
上述我们提到了负载均衡,那么什么是负载均衡?
我们知道,Nginx可以作为反向代理来实现负载均衡,那么什么是负载均衡?
上面提到的客户端发送请求给反向代理,反向代理收到的请求数量,就是我们说的负载量(负载)
反向代理服务器收到这些请求之后,会按照一定的规则来进行分发,这个规则是一种均衡规则
所以反向代理将这些请求转发到后端的服务器上的这个过程,称为负载均衡。
一般来讲,实现负载均衡的方式有硬件负载均衡和软件负载均衡
硬件负责均衡:
像F5负载均衡器,它长得跟个交换机似的。通俗点来讲就是将客户端的请求量通过F5负载到各个服务器,增加吞吐量。缺点就是造价昂贵,消费不起。
家境贫寒,告辞
软件负载均衡:
这个在公司里就比较常见,像LVS,Nginx,Apache都可以提供负载均衡的功能,本文我们就先讲Nginx。
最后,我们来总结一下
Nginx是一个高性能,而且轻量级的HTTP服务器和反向代理服务器;我们可以使用Nginx来部署web服务器;Nginx通过反向代理功能来实现负载均衡
正向代理屏蔽了客户端,它代理的是客户端。服务器只知道请求是正向代理服务器发过来的,它并不知道是哪台具体的客户端
反向代理屏蔽了服务端,它代理的是服务器。对于客户端来讲,它只需要访问代理服务器就能获取后端服务器的数据(客户端并不知道反向代理服务器的存在,它只认为它现在访问的是后端服务器)
你们以为这就完了?开玩笑,现在才刚刚开始
下篇文章我们来讲讲如何上手Nginx以及如何使用搭建自己的web网站以及实现Nginx负载均衡功能。
咱们下期见!
以上是关于干货篇 | Nginx 我还真不信你学不会(上)的主要内容,如果未能解决你的问题,请参考以下文章