上一个章节,我们学习了负载均衡的理论知识,那么是不是把应用部署多套,前面挂一个负载均衡的软件或硬件就可以应对高并发了?其实还有很多问题需要考虑。比如: 1. 当一台服务器挂掉,请求如何转发到其他正常的服务器上? 2. 挂掉的服务器,怎么才能不再访问? 3. 如何保证负载均衡的高可用性? 等等等等... 让我们带着这些问题,实战学习一下 Nginx 的配置和使用。 1. 前置概念
在正式介绍 Nginx 之前,首先让我们先了解一下概念。
1. 中间件
干 IT 太累了,我准备辞职开了个烧烤摊,卖羊肉串;
卖羊肉串首先就得有羊肉,于是我就联系了很多养殖场,我又是一个比较负责任的人,为了保证羊肉的质量,我就去考察了一家又一家养殖场,同时我也是个“小气”的人,所以我考察过程中,和对方谈判、比价,最终选了一个养殖场作为我的羊肉供应商,为我提供羊肉。
经营了一阵子,这个养殖场提供的羊肉质量没有以前好了,那么我就重新考察、谈判、比价,如此反复,我投入了大量的时间和精力。
于是我找到了一个信得过的代理公司,约定要羊肉的质量和数量,谈好价钱,以后我只找代理商拿货,具体代理商找的哪家养殖场我不去过问,甚至代理商可以送货上门。
在这个例子里面,卖烧烤就是业务,我的烧烤摊是业务端,养殖场是底层,而 这个信得过的代理公司,就是中间件。
2. 正向代理和反向代理
正向代理:我住在北京,但是想回老家买套房,但是我没办法亲自回老家考察,于是我就派我的管家回老家考察;管家就是正向代理服务器;正向代理服务器代表了客户端,在正向代理的过程中,服务端只和代理服务器打交道(房东只和我的管家谈),并不知道真正的客户端是谁。
反向代理:我住在北京,但是想回老家买套房,但是我没办法亲自回老家考察,于是我打个电话联系了老家的房屋中介去办这件事儿;房屋中介就是反向代理;这里的反向代理,代表的是房东,在反向代理的过程中,客户端只和反向代理服务器打交道,并不知道真正的服务端是谁。
当然,我的管家也可以联系我老家的房屋中介,那么架构图就会变成:
2. Nginx 的概念了解完上面的几个概念,那么 Nginx 的概念理解起来就简单很多了:
Nginx 就是一个开源的、高性能的、可靠的 Http 中间件; 它经常被用作 Http 代理、反向代理、负载均衡等等,当然它也能做正向代理,但是实际很少有这么用的。
3. 最简单的 Nginx 使用示例本章节项目的代码:chapter3
Step 1. 部署多套环境我们将章节 1 中的项目 chapter1 复制出来一份,改名为 chapter3,表示是第 3 章节的项目,同时修改:
1. pom.xml 中的 artifactId 修改为 chapter3
2. application.yml 中的 server.port 修改成 8089
这样我们分别启动 chapter1 和 chapter3,这样就相当于把相同的项目部署了两套,端口分别是 8088 和 8089 。
Step 2. 下载 Nginx我们可以在 Nginx 的官网 下载我们所需的版本,因为我使用 windows 环境开发,所以我在这里就选择了 nginx/Windows-1.14.2 这个版本。
下载完成解压缩,不需要额外的安装,可以直接使用。
Step 3. 配置 Nginx进入 nginx-1.14.2\conf 目录下,用文本编辑器打开 nginx.conf,对配置文件进行如下修改:
1. 在 http 中增加 upstream,并配置两台环境的地址;
2. 在 http.server.location 中增加 proxy_pass 的配置;
完整配置文件请参考:nginx.conf
Step 4. 启动 Nginx我们可以直接双击 nginx-1.14.2 目录下的 nginx.exe 启动;也可以通过 cmd 命令打开控制台,进入 nginx-1.14.2 目录执行如下命令启动 Nginx:
start nginx //启动 Nginx ;启动后可能一闪而过,我们可以看一下任务管理器是否有名字叫做 nginx.exe 的进程 nginx.exe -s stop //停止 Nginx nginx.exe -s quit //停止 Nginx Step 5. 测试 Nginx让我们测试一下 Nginx 是否配置并启动成功,打开浏览器输入: