Vue项目采用整站部署,不使用接口所在站点的二级目录或一级目录
目录结构
/webroot/ ├─ api.app.com/ │ ├─ public_html/ │ │ ├─ uploads/ │ │ └─ web.conf │ ├─ certs/ │ ├─ logs/ │ └─ rebots.txt └─ wechat.app.com/ ├─ public_html/ │ ├─ uploads/ <-- link │ └─ index.html ├─ certs/ ├─ logs/ └─ rebots.txt
webpack dev server
/config/index.js:12
// ...
module.exports = {
dev: {
// ...
proxyTable: {
'/api': {
target: 'http://apiServer',
changeOrigin: true,
pathRewrite: {
'^/api': ''
}
},
'/uploads': {
target: 'http://apiServer',
changeOrigin: true,
pathRewrite: {
'^/uploads': 'uploads'
}
}
}
// ....
}
};
// ...
Vue 接口调用
在接口地址前添加“/api”
export const user = {
login: params => {
return service
.post('/api/Sys/SysUser/LoginV2', params)
.then(res => res.data);
},
password: params => {
return service
.post('/api/Sys/SysUser/UpdatePwd', params)
.then(res => res.data);
}
};
export default {
user
};
Nginx
server {
listen 80;
server_name wechat.app.com;
location / {
root /webroot/wechat.app.com/public_html;
}
location /api {
proxy_pass http://apiServer/;
}
location /uploads {
proxy_pass http://apiServer/;
}
}
Apache
<VirtualHost *:80>
ServerName wechat.app.com
DocumentRoot "/webroot/wechat.app.com/public_html"
<Directory "/webroot/wechat.app.com/public_html">
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>
ProxyRequests off
<Proxy *>
Order allow,deny
Allow from all
</Proxy>
<Location /api>
ProxyPass http://apiServer
ProxyPassReverse http://apiServer
</Location>
<Location /uploads>
ProxyPass http://apiServer
ProxyPassReverse http://apiServer
</Location>
</VirtualHost>
IIS
需要安装ARR(支持IIS7-10,内置 Rewrite)后开启 proxy。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="api" stopProcessing="true">
<match url="^api/(.*)" />
<action type="Rewrite" url="http://apiServer/{R:1}" />
</rule>
<rule name="uploads">
<match url="^uploads/(.*)" />
<action type="Rewrite" url="http://apiServer/{R:0}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
补充
uploads 因为是文件可以使用链接而不使用代理:
ln -s /webroot/api.app.com/public_html/uploads uploads mklink /d /j uploads E:\webroot\api.app.com\public_html\uploads