1. nginx概述
nginx是一款轻量级的、自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP/POP3/SMTP代理服务器;nginx可以作为一个HTTP服务器进行网站的发布处理,另外nginx可以作为反向代理进行负载均衡的实现。
其特点就是占用内存少,并发能力强。
轻量级:
1. 从代码角度看:实现代码时,代码设计耦合性较低
2. 占用内存:占用内存特别的少
2. 代理
在学习Nginx时,有一个非常重要的概念,就是代理。
何为代理:代理其实就是一个中介,A和B本来可以直连,中间插入一个C,C就是中介。刚开始的时候,代理多数是帮助内网client访问外网server用的(比如HTTP代理),从内到外。后来出现了反向代理,"反向"这个词在这儿的意思其实是指方向相反,即代理将来自外网client的请求forward到内网server,从外到内。
在实际的web项目中,我们希望是下图所示这样的过程来直观的处理业务:
然而现实中,这个通道并不是畅通的,这里我们就用到了一个代理的概念,利用Nginx来平衡两者之间的业务需求,就是我们常说的Nginx反向代理服务器。入下图所示:
最近在网上看到一些例子,通俗易懂的理解了何为正向代理和反向代理。
2.1正向代理:
例:甲找乙借钱,而乙不认识甲,所以不借。甲得知丙是乙的朋友,所有甲又找到丙帮忙,最后丙从乙从借的钱来交给甲。
这里的丙就是一个代理,也是正向代理,因为在这个过程中,乙(相当于服务器端)不知道甲(相当于客户端)的身份,而甲也得到了自己想要的结果。
我们常说的代理也就是只正向代理,正向代理的过程,它隐藏了真实的请求客户端,服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求。
2.2反向代理:
例:以订外卖为例,你在订外卖的时候会拿手机APP查找下单,然后骑手会进行接单,到你指定的店家进行取单配送。在此整个过程中,存在很多的骑手,但是最终是谁接的单配送的快递,我们是不知道的,我们也不会关心他是谁,我们关心的是我们收到的外卖是否正确即可。
这里的手机APP就相当于反向代理,客户就相当于客户端,快递员相当于服务端。客户不知道谁给处理的业务,但是最后得到了自己想要的结果。
反向代理隐藏了真实的服务端,当我们请求 www.baidu.com 的时候,背后可能有成千上万台服务器为我们服务,但具体是哪一台,你不知道,也不需要知道,你只需要知道反向代理服务器是谁就好了,www.baidu.com 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去。Nginx就是性能非常好的反向代理服务器,用来做负载均衡。
下图是以张在网上截的图,很现象的展示了正向代理和反向代理的工作原理。