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

news2024/9/27 21:30:40

在现代Web开发中,图片是网站和应用的重要组成部分。然而,有时我们在访问某些图片时会遇到403 Forbidden错误,尤其是自己的应用访问互联网上的三方的图片时,这通常是由于别人的服务器设置了访问限制。本文将介绍如何通过搭建一个图片缓存服务器来解决这一问题。

什么是403 Forbidden错误?

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

例如当三方应用访问微博图片,会出现 403 Forbidden 的原因,是因为微博开启了“图片反盗链”。

微博反盗链的原理,就是在浏览器请求头HTTP Header)里添加 Referer 信息,然后判断“图片来源”。如果是自家网站,那就发出 200 Success,而如果是别人的,那就发出 403 Forbidden

为什么需要图片缓存服务器?

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

配置Nginx图片缓存服务器

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

步骤一:安装Nginx

首先,需要在你的服务器上安装Nginx。如果你使用的是基于Debian的系统(如Ubuntu),可以使用以下命令安装:

sudo apt update
sudo apt install nginx

步骤二:配置Nginx作为缓存服务器

接下来,你需要配置Nginx作为图片缓存服务器。编辑Nginx的主配置文件(通常位于/etc/nginx/nginx.conf),添加缓存相关的配置:

http {
    # 设置缓存路径
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;

    server {
        listen 80;
        server_name your_domain.com;

        location / {
            proxy_pass http://img3.doubanio.com;  # 豆瓣图片服务器的地址
            proxy_cache my_cache;
            proxy_cache_valid 200 302 10m;
            proxy_cache_valid 404 1m;
            add_header X-Proxy-Cache $upstream_cache_status;
            proxy_set_header Host img3.doubanio.com;  # 设置请求头中的Host字段
            proxy_set_header User-Agent "Mozilla/5.0 (compatible; Nginx)";  # 设置User-Agent
        }
    }
}

步骤三:启动Nginx

保存配置文件后,启动或重启Nginx以应用新的配置:

sudo systemctl restart nginx

步骤四:测试缓存服务器

现在,你可以通过你的域名访问豆瓣的图片。例如,如果你配置的域名是your_domain.com,你可以通过以下URL访问豆瓣的图片:

http://your_domain.com/path/to/image.jpg

更简单的方法

在浏览器中输入url可以正常访问,但是项目中无法访问,并返回403 Forbidden。一般是因为服务器设置了图片防盗链的原因。 这里我采用了yatessss前辈在vue完成知乎日报web版的解决方案,使用Images.weserv.nl进行缓存图片或者是https://wsrv.nl/进行图片缓存,并在需要使用图片url的地方进行相应的替换。

例如把之前的图片url换成以下这种方式:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1919987.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【大数据】什么是数据清洗?(附应用场景及解决方案)

一、数据清洗的概念及应用场景 数据清洗是在数据处理和分析之前,对数据集进行清理和整理的过程。这个过程包括识别并纠正错误的、不完整的、不准确的、不相关的或者是重复的数据,以确保数据的质量和准确性。数据清洗的目的是提高数据的质量,使…

Vim的撤销(undo)(回退)(后退)重做(redo)(前进) , u回退 , Ctrl+r重做

Vim的撤销(undo)(回退)(后退)重做(redo)(前进) u撤销(undu)(回退)(后退) , 小写u(undo) ctrlr 重做 CTRLr , (redo), 撤销撤销, 撤销回退, 撤销后退,前进 在 Vim 中,撤销(undo)和重做(redo)操作是通过以下命令实现的…

Vmware_Mysql8.0.31_安装部署

创建mysql目录,将资料上传到该目录 卸载MySQL依赖,虽然机器上没有装MySQL,但是这一步不可少 sudo yum remove mysql-libs 下载依赖并安装 sudo yum install libaio udo yum -y install autoconf 切换到hadoop102的root用户 su root 执…

简单分享下利用python做测试的学习方向

做为一名转行过来的工程师,我想分享一下这些年来,我对于技术是怎样晋升的,我是在职,边上班边利用时间学习起来的,也听过很多业内人的分享(简单可以总结以下几点,分享给大家碎片的式学习方式&…

Java | Leetcode Java题解之第229题多数元素II

题目&#xff1a; 题解&#xff1a; class Solution {public List<Integer> majorityElement(int[] nums) {HashMap<Integer, Integer> cnt new HashMap<Integer, Integer>();for (int i 0; i < nums.length; i) {if (cnt.containsKey(nums[i])) {cnt.…

键盘快捷键设置录入

效果图&#xff1a; 代码&#xff1a; import React, {useContext, useEffect, useRef} from react import {message} from "antd"; import lodash from "lodash"; import {StateContext} from ../../index.tsx import {useUpdateEffect} from "ahoo…

mysql快速精通(三)表关系

主打一个实用 一. 一对多&#xff08;多对一&#xff09;关系 例如班级和学生&#xff0c;这种类型我们一般建两个表,一方为主表&#xff0c;多方为从表 二. 多对多 例如课程与学生&#xff0c;这种类型我们一般需要建三张表&#xff0c;两张一方主表&#xff0c;与一张多方从表…

PyTorch人脸检测

新书速览|PyTorch深度学习与企业级项目实战-CSDN博客 人脸检测解决的问题是确定一幅图上有没有人脸&#xff0c;而人脸识别解决的问题是这张脸是谁的。可以说人脸检测是人脸识别的前期工作。这里介绍Dlib库&#xff0c;它提供了Python接口&#xff0c;里面有人脸检测器&#x…

<数据集>穿越火线cf人物识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;3440张 标注数量(xml文件个数)&#xff1a;3440 标注数量(txt文件个数)&#xff1a;3440 标注类别数&#xff1a;1 标注类别名称&#xff1a;[person] 使用标注工具&#xff1a;labelImg 标注规则&#xff1a;对…

基于整体学习的大幅面超高分遥感影像桥梁目标检测(含数据集下载地址)

文章摘要 在遥感图像&#xff08;RSIs&#xff09;中进行桥梁检测在各种应用中起着至关重要的作用&#xff0c;但与其他对象检测相比&#xff0c;桥梁检测面临独特的挑战。在RSIs中&#xff0c;桥梁在空间尺度和纵横比方面表现出相当大的变化。因此&#xff0c;为了确保桥梁的…

[Godot3.3.3] - 过渡动画

过渡动画 ScreenTransitionAnimation 项目结构 添加场景&#xff0c;根节点为 CanvasLayer2D 并重命名为 ScreenTransition: 添加子节点 ColorRect 和 AnimationPlayer&#xff0c;在 ColorRect 中将颜色(Color)设置为黑色&#xff1a; 找到 Material&#xff0c;新建 Shader…

Scanner工具类

扫描控制台输入 1.nextLine nextLine() 方法会扫描输入流中的字符&#xff0c;直到遇到行末尾的换行符 \n&#xff0c;然后将该行的内容作为字符串返回&#xff0c;同时&#xff0c;nextLine() 会将 Scanner 对象的位置移动到下一行的开头&#xff0c;以便下一次读取数据时从下…

【机器学习】12.十大算法之一支持向量机(SVM - Support Vector Machine)算法原理讲解

【机器学习】12.十大算法之一支持向量机&#xff08;SVM - Support Vector Machine&#xff09;算法原理讲解 一摘要二个人简介三基本概念四支持向量与超平面4.1 超平面&#xff08;Hyperplane&#xff09;4.2 支持向量&#xff08;Support Vectors&#xff09;4.3 核技巧&…

数据结构实操代码题~考研

作者主页: 知孤云出岫 目录 数据结构实操代码题题目一&#xff1a;实现栈&#xff08;Stack&#xff09;题目二&#xff1a;实现队列&#xff08;Queue&#xff09;题目三&#xff1a;实现二叉搜索树&#xff08;BST&#xff09;题目四&#xff1a;实现链表&#xff08;Linked…

Gitlab CI/CD介绍

基本概念 GitLab CI/CD&#xff08;持续集成/持续部署&#xff09;流水线是GitLab平台提供的一项强大功能&#xff0c;旨在通过自动化构建、测试和部署过程&#xff0c;提高开发团队的效率和软件发布的质量。 CI&#xff08;Continuous Integration&#xff09;&#xff1a;持续…

【驱动篇】龙芯LS2K0300之spi设备驱动

实验介绍 GC9A01是一款小巧&#xff08;1.28寸&#xff09;、彩色&#xff08;分辨率为 240 * 240 RGB&#xff09;圆形TFT屏幕&#xff0c;它采用4线 SPI的控制方式&#xff0c;电源供电电压为3.3V&#xff0c;有7个控制引脚&#xff1b;本次实验将使用它来验证龙芯SOC的SPI通…

从汇编层看64位程序运行——程序中的栈(Stack)结构及其产生的历史原因

大纲 传统栈程序栈X86体系栈反向的原因参考资料 如果要讲程序在系统层的运行&#xff0c;一个绕不开的名词就是“栈”。所以深入理解“栈”是这个系列重要的基础。本文也将深入浅出&#xff0c;只讲明白程序运行中使用的栈是什么。 传统栈 有计算机基础的同学都知道栈的特点&…

开源浏览器引擎对比与适用场景:WebKit、Chrome、Gecko

WebKit与Chrome的Blink引擎对比 起源与关系&#xff1a; WebKit最初由苹果公司开发&#xff0c;用于Safari浏览器。后来&#xff0c;WebKit逐渐成为一个独立的开源项目&#xff0c;被多个浏览器厂商采用。Blink是Google基于WebKit项目分支出来的一个浏览器引擎&#xff0c;用于…

实现Android夜间模式主题:从入门到精通

实现Android夜间模式主题:从入门到精通 随着用户对夜间模式的需求越来越高,Android开发者需要掌握如何在应用中实现夜间模式。本文将详细介绍在Android中实现夜间模式的步骤,包括配置、实现、以及一些最佳实践,帮助开发者创建更具吸引力和用户友好的应用。 夜间模式的优势…

文献翻译与阅读《Integration Approaches for Heterogeneous Big Data: A Survey》

CYBERNETICS AND INFORMATION TECHNOLOGIES’24 论文原文下载地址&#xff1a;原文下载 目录 1 引言 2 大数据概述 3 大数据的异构性 4 讨论整合方法 4.1 大数据仓库&#xff08;BDW&#xff09; 4.2 大数据联盟&#xff08;BDF&#xff09; 5 DW 和 DF 方法的比较、分…