自己个人的经验总结:
当其他技术配置检查多次都无误,但就是不行的时候,要考虑低级错误的可能:
比如本次 就是 之前 存储桶 的名字改过,但是只改了代码里 获取预签名url的,上传的没有改
导致的结果就是url根本是错的,因为存储桶里没有那个图片对象,它们都在旧的存储桶里
---------------------------------------------------------------------------------------------------------------------
需求:
javaSpring项目 与Minio部署在同一台服务器
外网只开放了一个端口比如18888映射到内网8888,此端口自然默认是给前端项目
Minio上传设置的Endpoint为服务器内网地址如 192.168.0.3:9000,自然获取 预签名url 返回的也是192开头的链接,在内网可以显示图片,到外网不行
尝试用nginx进行转发,假设筒名称为bk1,则链接必然在端口号后为/bk1/,所以设置
server {
listen 8888;
server_name localhost;
client_max_body_size 3000m;
#必须 防止请求头丢失
underscores_in_headers on;location / {
root /home/webapp/dist;
index index.html;
}location /donghai7s/ {
proxy_read_timeout 600s;proxy_pass http://127.0.0.1:9000; # 注意这里,我们代理到本机的19000端口,即MinIO服务
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
这样是不行的,因为预签名url会校验请求头,完全相同才可以,这里转发后为http://127.0.0.1:9000,与设置的Endpoint 192.168.0.3:9000不同,所以要改成一致的.
第二:返回的url因为是内网ip,不能直接用,需要改成外网
灵活的方式就是从前端获取项目ip和端口,进行替换:
如果只是简单项目,不涉及其他ip和端口,也可以后端返回之前替换
其他参考文章:
Nginx代理minIO图片路径实现公网图片访问_minio图片访问-CSDN博客
minio图片展示(minio图片上传地址为内网,展示时为外网)_minio 图片-CSDN博客