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”开头的请求,认为这样的请求就是在请求后台接口,并将其转发到后端服务器上。