Nginx 是一个很强大的高性能Web和反向代理服务器。
下面,我们将借助 nginx 实现前后端分离。

前期准备

  • 下载 nginx 安装包(windows 下就是一个压缩包),解压到任意位置都行;
  • 切换命令行至 nginx.exe 目录下,启动 nginx,start nginx
  • 浏览器打开 localhost,如果看到 nginx 的启动页,证明启动成功。

前后端分离

问题

当下的开发模式是后端提供数据接口,前端进行数据展示。前后端之间的桥梁就是ajax.
前端开发通常是借助于一个 node 服务器,我们假设它的主机名加端口是:http://localhost:8080.
后端接口通常是在 tomcat 服务器上,这里我们使用 koa + koa-router 创建后台接口,地址为:http://localhost:3001.
此时,前端通过 ajax 调用后台接口时,由于浏览器的同源策略会请求失败。

解决思路

使用 nginx 作为前后端中间的反向代理服务器。前端不是直接发送请求给后端,而是发给 nginx 服务器。nginx 服务器再去请求真正的接口地址(浏览器有跨域限制,服务器没有)。nginx 服务器获取到接口数据之后再将数据发送给前端(同时要设置add_header 'Access-Control-Allow-Origin' '*';)。
而上述转发的过程,对于前后端而言是没有感知的,它们并不知道 nginx 这个中间人干了什么,这就是反向代理的好处。

相关代码实现

前端

前端借助 axios 这个库来发送 ajax 请求:

后端

后端是有 koa + koa-router 提供接口:

nginx 配置

我们约定好接口的命名都要以”/apis”开头,nginx 会拦截以”/apis”开头的请求,认为这样的请求就是在请求后台接口,并将其转发到后端服务器上。

nginx 更多能力

开启 gzip 压缩

02-14 02:03