1、网络部署情况
VUE前端项目Nginx部署在公司内网,端口7790
后台接口项目部署在公司内网,端口7022
minIO服务部署在公司内网,端口9000
公网IP设备将80端口映射到7790端口(具体映射方式不详),实现通过互联网访问系统。
2、遇到的问题
后台将图片的minIO共享路径,直接返回给前端,交给浏览器去请求。
例如:http://内网IP:9000/bucketname/imagename.png?XXXXXXX
浏览器能通过内网地址访问系统,一般情况下也能直接访问到minIO服务器,图片展示没问题。
当用户不在公司内网环境,用浏览器通过公网地址访问系统时,后台接口返回的图片地址,浏览器无法直接请求到。
3、问题解决方案
(1)前端修改图片请求地址,代码如下:
javascript
Vue.directive('minio-src', {
inserted: async function(el, binding) { //指令名称为:real-img
let imgURL = binding.value; //获取图片地址
if (imgURL) {
const protocol = window.location.protocol;
const host = window.location.host;
imgURL = imgURL.replaceAll(process.env.VUE_APP_MINIO_HOST,protocol+"//"+host+"/minio");
console.log("minio-url",imgURL);
el.setAttribute('src', imgURL);
}
}
})
其中process.env.VUE_APP_MINIO_HOST是获取前端项目的环境变量,配置代码如下:
javascript
VUE_APP_MINIO_HOST = "http://172.17.0.1:9000"
img标签使用自定义指令,代码如下:
html
<img v-minio-src="imagUrl"/>
(2)Nginx代理配置如下:
cpp
location /minio/ {
proxy_pass http://172.17.0.1:9000/;
}