🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 四、部署 ### 1. nginx配置反向代理 > 我们要在本地部署测试,所以后台的地址是127.0.0.1:22222 项目开发完成后需要部署到服务器,因为是前后端分离,所以前端的应用部署到nginx,后端的应用部署到自己对应的服务器,所以我们需要配置一下,把后端的服务器变成上游服务,nginx做反向代理服务器 > 反向代理:服务器根据客户端的请求,从其关系的一组或多组后端服务器上获取资源,然后将这些资源返回给客户端。 由于上游服务器(后台服务器)要处理非常复杂的逻辑,所以性能不怎么样,我们使用nginx作为反向代理服务器后,可以将请求按照负载均衡算法代理给多台上游服务器。配置如下: ![image-20190311112112788](https://ws4.sinaimg.cn/large/006tKfTcgy1g0you8fbg4j30r10c60vn.jpg) 以上配置是将所有的请求转发给上游服务器,但如果我们只想将动态请求转发给上游服务器,静态资源由nginx自己处理,就可以这样做: 判断是否是后台api(根据location的匹配规则),如果是的话,就进行转发 匹配规则看这里:https://stackoverflow.com/questions/5238377/nginx-location-priority ```nginx upstream local{ server 127.0.0.1:22222; #假设在本地部署 } server{ listen:80; server_name localhost; location ~ /api/ { #以`/api/`开头的uri就行转发,否则不转发 ~代表正则表达式匹配 proxy_set_header: Host $host; proxy_set_header: X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://local; } location / { #... alias index等配置 } } ``` **这里需要注意一个问题**:proxy_pass是转发请求的模块,当你访问`localhost:80/api/users/login`时,会被转发到`local`的地址,即`127.0.0.1:22222/api/users/login`,所以开发环境下访问后台接口的URI要写你部署到nginx的URI,而不是真正的后台地址(因为被转发了) 前端配置 ```js //apis/api.config.js //判断是否是生产环境 var isPro = process.env.NODE_ENV=== 'production' module.exports = { baseUrl: isPro ? 'http://localhost:80' : '/apis'//生产环境下的baseURl是nginx的hoost:port } ```