如何安全访问oss资源?

打印 上一主题 下一主题

主题 575|帖子 575|积分 1725

一、媒介

我们在公司项目或者个人项目中肯定会利用到oss来存储资源文件,oss的利用方便了我们在项目中存储和访问资源,但是无论是阿里云oss还是腾讯云oss都是需要按流量和访问量举行计费的,如果我们直接将oss的地点暴露在公网上,答应用户随意访问,可能会出现被恶意刷流量的情况,导致项目标费用变高,并且有可能被别人当作资源库进利用用(也就是我们常说的盗链)。
所以我们为了安全的利用oss资源,就必须将公网oss地点给隐藏起来,不让用户知晓原始的oss地点,只是在项目利用的时间通过代理去访问对应的资源,下面我就来简单先容两种常见的代理访问方式:
二、利用nginx代理访问:

利用Nginx代理访问阿里云OSS(Object Storage Service)或腾讯云OSS,可以通过配置Nginx的location块来代理请求到OSS的HTTP/HTTPS端点。以下是一个参考的示例:
2.1安装和配置Nginx:



  • 首先确保你的服务器或者本地上已经安装了Nginx服务:
    可以利用下面的下令查察是否安装了nginx:
  1. ps -ef |grep nginx
复制代码



  • 添加代理配置,在Nginx配置文件找到配置代理的server块,并在其中添加一个location块。添加以下内容:
  1. server {
  2.    listen 80;
  3.    server_name your.domain.com;
  4.    location /oss/ {
  5.        # 设置OSS的访问URL
  6.        proxy_pass https://your-oss-endpoint.oss-cn-region.aliyuncs.com/;
  7.        # 如果OSS需要特定的HTTP头,可以在这里设置
  8.        proxy_set_header Host $host;
  9.        # 其他可能需要的代理设置...
  10.        # 转发原始请求头到OSS(可选)
  11.        proxy_set_header X-Real-IP $remote_addr;
  12.        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  13.        proxy_set_header X-Forwarded-Proto $scheme;
  14.        # 禁用缓存(可选)
  15.        proxy_no_cache 1;
  16.        proxy_cache_bypass 1;
  17.    }
  18. }
复制代码
注意:your-oss-endpoint.oss-cn-region.aliyuncs.com需要更换为自己的OSS端点URL。


  • 重启Nginx: 保存并关闭配置文件后,重启Nginx让配置生效
  • 测试访问:
    通过访问Nginx服务器的URL(如http://your.domain.com/oss/1000.webp)来测试:

2.2安全性考虑:

为了访问的安全性,我们还可以做以下配置:


  • 在nginx上开启SSL/TLS,如许代理的请求将利用HTTPS协议。
  • 增长oss的ip访问限制,给nginx的服务器ip增长ip白名单,如许就可以包管只有nginx服务器才能访问到oss。
三、利用后端接口代理访问:

我们还可以通过后端接口代理访问oss,我这里以Node项目标Egg框架为例,新建一个访问oss图片的接口:
如果想利用下面的例子举行测试但是对egg框架不是很熟悉的,可以参考我之前的文章:https://blog.csdn.net/qq_43558959/article/details/139998844
3.1 接口编写

  1. // 新增接口
  2. router.get('/oss', controller.oss.index);
  3. // app/controller/oss.js
  4.    async index() {
  5.     const { ctx } = this;
  6.     const { fileName } = ctx.validate({
  7.       fileName: { type: 'string' },
  8.     });
  9.     try {
  10.       // 使用axios发起请求获取图片
  11.       const axiosResponse = await axios({
  12.         url: `https://your-oss-endpoint.oss-cn-region.aliyuncs.com/${fileName}`,
  13.         method: 'get',
  14.         responseType: 'arraybuffer',
  15.       });
  16.       this.ctx.set({
  17.         'Content-Type': axiosResponse.headers['content-type'] || 'image/webp',
  18.         'Content-Length': axiosResponse.headers['content-length'],
  19.       });
  20.       ctx.body = Buffer.from(axiosResponse.data, 'binary');
  21.       return;
  22.     } catch (error) {
  23.       ctx.logger.error(error);
  24.     }
  25.     ctx.state = 404;
  26.     return;
  27.   }
复制代码
3.2 测试访问

通过访问接口:http://127.0.0.1:7001/oss?fileName=1000.webp

四、总结

上面分享的只是我在工作和学习中利用到的两种代理的方式,如果小伙伴有更好的方式,也可以在评论区讨论下,我们一起研究研究。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

梦应逍遥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表