赞
踩
情景:nginx在服务器1已,minio在服务器2, 业务系统在服务器3 服务器互通 , 生产环境中要尽可能的少让用户去申请ip和端口权限,所以对于使用S3预签名上传的功能要使用ngnix代理转发,这样用户就不需要去申请OSS的ip端口权限了。
流程:业务系统进行上传操作,后端返回给前端一个s3的预签名地址(默认预签名的ip和端口为minio的ip和minio的API端口,后端替换为ngnix所在服务器1的ip和ngnix监听的端口),前端去请求后端返回的预期签名地址并。
S3生成的预签名:
S3生成的预签名通常是OSS的ip和API端口,要使用ngnix转发S3生产的预签名地址,需要后端将s3生成的预签名需要修改ip和端口再传给前端,前端去请求这个ngnix代理的ip和端口
- URL preSignedUrl = amazonS3.generatePresignedUrl(request);
- String url = preSignedUrl.toString();
- String newIP = proxyIp;
- String newPort = proxyPort;
- String modifiedUrl = url.replace(preSignedUrl.getHost() + ":" + preSignedUrl.getPort(), newIP + ":" + newPort);
nginx配置:
其中:
location /bigfile {
proxy_pass http://127.0.0.1:8089/bigfile;
proxy_set_header Host 127.0.0.1:8089;
}
location /bigfile中的bigfile是存储桶名
proxy_pass http://minio所在的服务器ip:minio的API端口/存储桶名;
proxy_set_header Host minio所在的服务器ip:minio的API端口;
- server {
- listen 8089;
- server_name localhost;
- server_name_in_redirect off;
- client_max_body_size 200m;
-
- location /bigfile {
- proxy_pass http://127.0.0.1:8089/bigfile;
- proxy_set_header Host 127.0.0.1:8089;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Forwarded-Proto $scheme;
- #升级http1.1到 websocket协议
- proxy_http_version 1.1;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection $connection_upgrade;
-
- }
-
- }

参考:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。