搭建图片缓存服务器,解决图片访问403 Forbidden问题

火影  金牌会员 | 2024-9-27 14:24:52 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 851|帖子 851|积分 2553

在今世Web开辟中,图片是网站和应用的紧张组成部分。然而,偶然我们在访问某些图片时会遇到403 Forbidden错误,尤其是自己的应用访问互联网上的三方的图片时,这通常是由于别人的服务器设置了访问限定。本文将先容怎样通过搭建一个图片缓存服务器来解决这一问题。
  什么是403 Forbidden错误?

403 Forbidden错误表现服务器理解请求,但拒绝授权。这通常是由于请求的资源受到访问控制列表(ACL)或其他权限设置的限定。

比方当三方应用访问微博图片,会出现 403 Forbidden 的缘故原由,是由于微博开启了“图片反盗链”。
微博反盗链的原理,就是在浏览器请求头HTTP Header)里添加 Referer 信息,然后判定“图片来源”。如果是自家网站,那就发出 200 Success,而如果是别人的,那就发出 403 Forbidden
为什么须要图片缓存服务器?


  • 解决访问限定:通过缓存服务器,我们可以绕过原始服务器的访问限定,从而正常访问图片。
  • 提高访问速度:缓存服务器可以减少对原始服务器的请求,加速图片加载速度。
  • 降低服务器负载:通过缓存,可以减少原始服务器的负载,提高其稳固性。
配置Nginx图片缓存服务器

可以利用Nginx搭建一个图片缓存服务器来解决三方应用访问豆瓣图片时遇到的403 Forbidden错误。以下是详细的步调和配置示例:
步调一:安装Nginx

起首,须要在你的服务器上安装Nginx。如果你利用的是基于Debian的系统(如Ubuntu),可以利用以下下令安装:
  1. sudo apt update
  2. sudo apt install nginx
复制代码
步调二:配置Nginx作为缓存服务器

接下来,你须要配置Nginx作为图片缓存服务器。编辑Nginx的主配置文件(通常位于/etc/nginx/nginx.conf),添加缓存相关的配置:
  1. http {
  2.     # 设置缓存路径
  3.     proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
  4.     server {
  5.         listen 80;
  6.         server_name your_domain.com;
  7.         location / {
  8.             proxy_pass http://img3.doubanio.com;  # 豆瓣图片服务器的地址
  9.             proxy_cache my_cache;
  10.             proxy_cache_valid 200 302 10m;
  11.             proxy_cache_valid 404 1m;
  12.             add_header X-Proxy-Cache $upstream_cache_status;
  13.             proxy_set_header Host img3.doubanio.com;  # 设置请求头中的Host字段
  14.             proxy_set_header User-Agent "Mozilla/5.0 (compatible; Nginx)";  # 设置User-Agent
  15.         }
  16.     }
  17. }
复制代码
步调三:启动Nginx

保存配置文件后,启动或重启Nginx以应用新的配置:
  1. sudo systemctl restart nginx
复制代码
步调四:测试缓存服务器

现在,你可以通过你的域名访问豆瓣的图片。比方,如果你配置的域名是your_domain.com,你可以通过以下URL访问豆瓣的图片:
  1. http://your_domain.com/path/to/image.jpg
复制代码
更简单的方法

在浏览器中输入url可以正常访问,但是项目中无法访问,并返回403 Forbidden。一般是由于服务器设置了图片防盗链的缘故原由。 这里我接纳了yatessss前辈在vue完成知乎日报web版的解决方案,利用Images.weserv.nl举行缓存图片或者是https://wsrv.nl/举行图片缓存,并在须要利用图片url的地方举行相应的替换。
比方把之前的图片url换成以下这种方式:
  1. https://wsrv.nl/?url=https://picx.zhimg.com/v2-a89ea6ce6cb9fb683dd2d21d435aed36.jpg
复制代码
防盗链的原理:
在HTTP协议中,有一个表头字段叫referer,接纳URL的格式来表现从哪儿链接到当前的网页或文件。换句话说,通过referer,网站可以检测目标网页访问的来源网页。如果是资源文件,则可以跟踪到显示它的网页地点。有了referer跟踪来源,就可以通过技术手段来举行处理惩罚,一旦检测到来源不是本站即举行阻止或者返回指定的页面。 
还有一种方法就是可以通过伪造 Referer,利用扩展 Header Editor,然后,将图片的 Referer 设置为三方域名。
WordPress:
https://i0.wp.com/图片地点(图片地点要掉 https://)
Weserv.nl:
https://images.weserv.nl/?url=图片地点
百度 1:
https://image.baidu.com/search/down?url=图片地点
百度 2:
https://gimg2.baidu.com/image_search/&app=2020&src=图片地点(图片地点要去掉 https://)
注:百度的服务二选一。
前面两个网站的服务器在国外,延迟都在 160ms 以上,结果不尽人意,而百度的只有 10ms,速度相称的快。
其他资源

2023 年微博图床 403 全失效,一个方法秒解决! - 少数派
https://www.cnblogs.com/UncleZhao/p/13813596.html
推荐一个高效能的图片处理惩罚利器:weserv/images-CSDN博客
wsrv.nl


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

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

火影

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

标签云

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