# 四、部署
### 1. nginx配置反向代理
> 我們要在本地部署測試,所以后臺的地址是127.0.0.1:22222
項目開發完成后需要部署到服務器,因為是前后端分離,所以前端的應用部署到nginx,后端的應用部署到自己對應的服務器,所以我們需要配置一下,把后端的服務器變成上游服務,nginx做反向代理服務器
> 反向代理:服務器根據客戶端的請求,從其關系的一組或多組后端服務器上獲取資源,然后將這些資源返回給客戶端。
由于上游服務器(后臺服務器)要處理非常復雜的邏輯,所以性能不怎么樣,我們使用nginx作為反向代理服務器后,可以將請求按照負載均衡算法代理給多臺上游服務器。配置如下:

以上配置是將所有的請求轉發給上游服務器,但如果我們只想將動態請求轉發給上游服務器,靜態資源由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
}
```