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

在现代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.mzph.cn/news/872770.shtml

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

相关文章

7月15日学习打卡,二叉搜索树和字符串操作

hello大家好呀,本博客目的在于记录暑假学习打卡,后续会整理成一个专栏,主要打算在暑假学习完数据结构,因此会发一些相关的数据结构实现的博客和一些刷的题,个人学习使用,也希望大家多多支持,有不…

C#学习

C#学习 1.B站丑萌气质狗C#的循环-判断泛型错误处理面向对象static的使用定义showInfo类和Hero类 在这里插入图片描述 然后在该解决方案add新建一个类库,点击rebuild,会在bin文件夹下生成.dll文件 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direc…

数据类型与运算符

一、进制 1.1 进制的区分 1.2进制的换算 只要掌握计算器的方式即可。人工计算的方式了解一下就行了。 二、计算机数据的存储原理 2.1 存储单位 最小的单位:比特位 bit 1位比特要么为0,要么为1 最基本的单位:字节 …

Spring-Cache 缓存

1.简介 2.SpringCache 整合 简化缓存开发 1.导入依赖 <!-- spring cache --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency>2.redis 作为缓存…

二分法binary search

欢迎来到一夜看尽长安花 博客&#xff0c;您的点赞和收藏是我持续发文的动力 对于文章中出现的任何错误请大家批评指出&#xff0c;一定及时修改。有任何想要讨论的问题可联系我&#xff1a;3329759426qq.com 。发布文章的风格因专栏而异&#xff0c;均自成体系&#xff0c;不足…

解决一下git clone失败的问题

1&#xff09;.不开梯子&#xff0c;我们用https克隆 git clone https://github.com 报错&#xff1a; Failed to connect to github.com port 443 after 2091 ms: Couldnt connect to server 解决办法&#xff1a; 开梯子&#xff0c;然后# 注意修改成自己的IP和端口号 gi…

Java时间练习(7) (2024.7.17)

LocalDate、LocalTime、LocalDateTime类 package LocalExercise20240717; import java.time.LocalDate; import java.time.LocalTime; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter;public class LocalExercise {public static void main(Stri…

跟ChatGPT学习go语言-利用Go语言封装一个adb命令函数

问&#xff1a;在go语言中&#xff0c;根据不同的操作系统&#xff0c;选择adb文件路径来进行执行&#xff0c;封装成一个函数 package mainimport ("fmt""os/exec""runtime" )// GetADBPath 根据操作系统获取 ADB 可执行文件的路径 func GetAD…

docker搭建普罗米修斯监控gpu

ip8的服务器监控ip110和ip111的服务器 被监控的服务器110和111只需要安装node-export和nvidia-container-toolkit 下载镜像包 docker pull prom/node-exporter docker pull prom/prometheus docker pull grafana/grafana新建目录 mkdir /opt/prometheus cd /opt/prometheus/…

生信软件27 - 基于python的基因注释数据查询/检索库mygene

1. mygene库简介 MyGene.info提供简单易用的REST Web服务来查询/检索基因注释数据&#xff0c;具有以下特点&#xff1a; mygene技术文档&#xff1a; https://docs.mygene.info/en/latest/ 多物种支持: 包括人、小鼠、大鼠、斑马鱼等多个模式生物&#xff1b; 多数据源聚合…

卷积神经网络图像识别车辆类型

卷积神经网络图像识别车辆类型 1、图像 自行车: 汽车: 摩托车: 2、数据集目录 3、流程 1、获取数据,把图像转成矩阵,并随机划分训练集、测试集 2、把标签转为数值,将标签向量转换为二值矩阵 3、图像数据归一化,0-1之间的值 4、构造卷积神经网络 5、设置图像输入…

记录些MySQL题集(8)

ACID原则、事务隔离级别及事务机制原理 一、事务的ACID原则 什么是事务呢&#xff1f;事务通常是由一个或一组SQL组成的&#xff0c;组成一个事务的SQL一般都是一个业务操作&#xff0c;例如聊到的下单&#xff1a;「扣库存数量、增加订单详情记录、插入物流信息」&#xff0…

Qt5.12.2安装教程

文章目录 文章介绍下载连接安装教程 文章介绍 安装Qt5.12.2 下载连接 点击官网下载 安装包下载完毕 安装教程 点开设置&#xff0c;添加临时储存库&#xff0c;复制连接“https://download.qt.io/online/qtsdkrepository/windows_x86/root/qt/” 点击测试&#xff0…

谷歌搜索引擎:知识殿堂与全球网络连通的桥梁

谷歌搜索引擎&#xff0c;其标志性的名称已成为互联网的象征。每次启动电脑&#xff0c;我总会习惯性地在洁白的搜索框内输入疑惑。谷歌如同一位博学多才的朋友&#xff0c;总能迅捷地提供满意解答。其界面设计简约明快&#xff0c;仅有标志性的彩色"Google"字样与搜…

HDFS和ES

HDFS&#xff08;Hadoop Distributed File System&#xff09;和 Elasticsearch&#xff08;ES&#xff09;是两种不同类型的分布式系统&#xff0c;分别用于存储和搜索数据。它们在设计目标、架构、使用场景等方面有显著的区别。以下是对 HDFS 和 ES 的详细比较&#xff1a; …

孟德尔随机化——混杂SNP剔除之LDlink(1)

1、注册&#xff1a;LDlink | An Interactive Web Tool for Exploring Linkage Disequilibrium in Population Groups 邮箱会收到12个字符串的token&#xff0c;使用时需要提供token 2、包内方法 LDexpress Determine if genomic variants are associated with gene express…

352_C++_管理用户登录计数器的类,其中有定时器m_timer操作,定时修改【登录锁定时间】和【错误次数】

~~ 头文件 #pragma once#include "commonfunction.h" #include <boost/asio/steady_timer.hpp> #include <set> #include

第13章 更多的结构化命令《Linux命令行与Shell脚本编程大全笔记》

13.1 For命令 格式&#xff1a;for var in list;dofor命令默认按照空格、制表符、换行符作为字段分隔符区分单个值&#xff0c;如果某个值含有空格要使用双引号从命令中读取值列表for state in $(cat $file)更改字段分隔符IFS(internal field separator)IFS$\n可能的需求&…

set类和map类介绍和简单使用

目录 set类介绍与简单使用 set类 multiset类 map类介绍与简单使用 map类 multimap类 set类介绍与简单使用 set类是一种关联式容器&#xff0c;在数据检索时比序列式容器效率更高。本质是一个常规的二叉搜索树&#xff0c;但是为了防止出现单支树导致效率下降进行了相关优…

【Linux】将IDEA项目部署到云服务器上,让其成为后台进程(保姆级教学,满满的干货~~)

目录 部署项目到云服务器什么是部署一、 创建MySQL数据库二、 修改idea配置项三、 数据打包四、 部署云服务器五、开放端口号六 、 验证程序 部署项目到云服务器 什么是部署 ⼯作中涉及到的"环境" 开发环境:开发⼈员写代码⽤的机器.测试环境:测试⼈员测试程序使⽤…