一样东西的诞生通常都是为了解决某些问题,对于 Nginx 而言,也是如此。
比如,你出于无聊写了一个小网站,部署到 tomcat 之后可以正常访问了,好开心。 这时候你的网站用户非常少,不会存在高并发的情况,这时候一个 jar 包启动应用就足够了,然后内部的 tomcat 返回内容给用户。
但是后来,你的这个小网站因为内容很诱人逐步的火了,用户越来越多,并发量也慢慢增大,此时一台服务器已经满足不了网站的需求了。
你不能眼睁睁的看着你的“孩子”被压垮呀,于是乎,一咬牙又花钱加了几台服务器。
但是问题来了,服务器多了,比如用户1先通过的服务器1登录了,但是后来的请求又到了服务器2上,又是没登录的,这显然是不行的。 所以这时候需要一台代理服务器,帮我们转发和处理请求。于是乎,Nginx 登场了。
一、什么是Nginx
Nginx(engine x)是一个高性能的 http 和反向代理 web 服务器,同时也可以提供 IMAP/POP3/SMTP 邮件服务。
其特点是占用内存少,并发能力强,运行还很文档,几乎可以做到7x24 不间断运行,即使运行数个月也不需要重启。而且,还能在服务不间断的情况下进行软件版本的升级。
Nginx代码完全用C语言编写,官方数据测试表明能够支持高达50000个并发连接数的响应。
你一看 Nginx 这也太好了,赶紧给你的应用加上。
二、反向代理
既然叫反向代理,那么正向代理是什么?
「正向代理」 比如你想访问 Google 查一些技术问题,但是发现你根本上不去,因为有墙。后来你经过了百度的搜索,找到了一个XX浏览器插件,可以给你当梯子,好爬上去看看外面的世界。 这个插件就是正向代理了,你知道它的作用并且主动使用它做达成目的。
「反向代理」 与正向代理不同,正向代理用户是有感知的。而反向代理,对用户来说是无感知的,反向代理服务器介于用户和目标服务器之间,对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。
上面给小网站加了个Nginx,利用的就是反向代理。
三、负载均衡
现在有好几台服务器了,也有代理服务器了。但是因为你预算有限,后加的几台服务器配置有高有底,这时候如果能让配置高的服务器多承担点压力,让配置低的少承担点压力就好了。
Nginx的负载均衡就可以完成这样的需求。
1. 轮询
轮询,就是让过来的请求依次访问服务器。
2. 加权轮询
加权轮询,可以根据不同的权重来分发各服务器上的请求数量。
3. iphash
iphash 对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,这样就解决了 session 不共享的问题。
四、动静分离
你的小网站里有些请求是需要后台处理的,但是有些请求是不需要的,比如 css、html、jpg、js等文件,这些统称为「静态文件」。
Nginx可以根据一定规则把不变的资源和经常变的资源区分开,做好了拆分之后,我们就可以根据静态资源的特点将其做缓存操作,从而提高资源响应的速度。
OK,通过动静分离,你的小网站响应速度也上去了,用户体验更好了,你终于送了口气。