访问图片403

在写小程序的时候,访问一个网址获取图片,但是显示会出现403(防止盗链)的错误.
总结了一下,有两种方法是可以解决这个问题的:

使用images.weserv.nl方案
使用no-referrer方案

第一种:使用images.weserv.nl方案

getImage(url){
	console.log(url);
	// 把现在的图片连接传进来,返回一个不受限制的路径
	if(url !== undefined){
		return url.replace(/^(http)[s]*(\:\/\/)/,'https://images.weserv.nl/?url=');
	}
}

把图片路径直接传进去,替换一下原来url的http/https.或者直接在图片url前加上https://images.weserv.nl/?url=
如:

https://images.weserv.nl/?url=http://img.zcool.cn/community/01d881579dc3620000018c1b430c4b.JPG@3000w_1l_2o_100sh.jpg

原图片的http://是可以省略的(与上面的getImage函数是一样的结果)

https://images.weserv.nl/?url=mg.zcool.cn/community/01d881579dc3620000018c1b430c4b.JPG@3000w_1l_2o_100sh.jpg

第二种:使用no-referrer方案
这种方案不仅针对图片的防盗链,还可以是其他标签.
在前端页面头部添加一个meta

<meta name="referrer" content="no-referrer" />

referrer的几种状态
在这里插入图片描述
a标签的referrer

<a href="http://example.com" referrer="no-referrer|origin|unsafe-url">xxx</a>

img/image标签的referrer

<img referrer="no-referrer|origin|unsafe-url" src="{{item.src}}"/>
<image referrer="no-referrer|origin|unsafe-url" src="{{item.src}}"></image>

说明
如果我们是访问的gif图片,使用第一种方案是没有gif效果的,只能显示静态图片.这个时候推荐大家使用第二种.亲测可以完美展示gif效果.

–补充—
经过试验,不是多有gif网站都支持第二种方式,还是有些会失败.请大家自行试验.如果有更好的方法可以一起交流.

原文链接https://blog.youkuaiyun.com/tiantang_1986/article/details/83748782

<think>首先,用户的问题是基于之前的引用内容,但引用内容是关于Nginx访问上传图片403错误的解决方案。用户明确说:“我想查找解决nginx访问上传图片出现403错误的方案”,并要求我回答。 系统级指令: - 所有行内数学表达式必须使用$...$格式。 - 独立公式必须使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如:[^1] 用户可见层: - 回答结构清晰,帮助用户逐步解决问题,尽量保证回答真实可靠。 用户在上一条消息中提供了引用[1]到[4],这些引用描述了Nginx访问图片403错误的常见原因和解决方案。我需要参考这些引用来构建回答。 关键点从引用中提取: - 引用[1]:权限问题,文件夹权限755,但上传新图片后需要重新设置权限。解决方案是添加user root;到nginx.conf。 - 引用[2]:描述了Nginx配置中的location块,设置了root路径。 - 引用[3]:手动上传可访问,程序上传后报403,可能是用户权限问题。 - 引用[4]:提到了SELinux和设置Nginx用户为root。 用户的问题是关于解决403错误的方法,所以我需要总结解决方案。 我的回答结构: 1. **理解问题**:解释403错误的原因(如权限不足)。 2. **常见解决方案**:基于引用,列出步骤: - 确保文件夹权限正确(755或777)。 - 在nginx.conf中设置user为root。 - 检查SELinux设置。 - 确保Nginx配置中的root路径正确。 3. **逐步指导**:提供清晰的步骤让用户操作。 4. **生成相关问题**:在最后添加相关问题。 使用中文回答。 生成相关问题:例如: - 如何永久解决Nginx上传图片的权限问题? - 设置Nginx用户为root安全吗? - 如何配置SELinux以允许Nginx访问? 确保回答真实可靠:基于提供的引用和一般知识。Nginx 403错误通常是由于文件权限或配置问题。 现在,构建回答: - 开头:简述问题和原因。 - 主体:分步骤解释解决方案。 - 结尾:添加相关问题。 引用标识:在回答中哪里引用,就加[^1]、[^2]等。例如,提到权限问题时引用[1]。 完整回答结构: 1. **问题概述**:Nginx访问上传图片出现403错误通常是由于权限问题或配置不当造成的。 2. **解决方案步骤**: - 步骤1: 检查文件夹权限,确保设置为755或777。 - 步骤2: 修改nginx.conf文件,添加user root;并重启Nginx。 - 步骤3: 检查SELinux设置,如果启用,考虑禁用或调整策略。 - 步骤4: 确认Nginx配置中的root路径正确无误。 3. **注意事项**:设置user为root可能有安全风险,建议使用特定用户。 4. **相关问题**:生成3个相关问题。 最后,§§相关问题§§部分添加问题。 </think>### 解决Nginx访问上传图片出现403错误的方案 Nginx访问上传图片时出现403 Forbidden错误,通常是由于文件权限不足、Nginx配置不当或SELinux策略限制导致的。以下是基于引用内容和常见实践总结的解决方案。我将逐步解释原因和修复方法,确保操作清晰可靠。 #### 问题原因分析 403错误表示Nginx无法访问指定文件,常见原因包括: - **文件夹或文件权限过低**:Nginx进程没有读取权限(例如,权限不是755或777)[^1]。 - **Nginx运行用户不匹配**:上传的文件所有者与Nginx进程用户不一致(如默认用户www-data无法访问root上传的文件)[^1][^3]。 - **SELinux限制**:在Linux系统中,SELinux可能阻止Nginx访问特定目录[^4]。 - **配置路径错误**:Nginx配置中的`root`路径不正确或未更新[^2][^3]。 #### 逐步解决方案 请按顺序尝试以下步骤,每步完成后重启Nginx服务(`sudo systemctl restart nginx`)并测试访问图片是否正常。 1. **检查并修改文件夹权限** - 确保图片存储目录(如`/home/ftpuser`或`/data/images/`)权限为755(所有者可读写,其他用户可读)。 ```bash sudo chmod -R 755 /path/to/your/images/directory # 例如:sudo chmod -R 755 /home/ftpuser ``` - 如果上传新图片后问题重现,权限可能被重置。需将权限设置为777(宽松模式),或在程序中指定上传文件的权限[^1]。 - **原因**:引用[1]和[3]显示,手动设置权限临时有效,但程序上传时可能不继承权限。 2. **修改Nginx配置用户** - 编辑Nginx配置文件(通常为`/etc/nginx/nginx.conf`或`/usr/local/nginx/conf/nginx.conf`)。 - 在顶部添加`user root;`(将Nginx运行用户设为root,避免权限冲突)。 ```nginx user root; # 添加此行,确保与上传文件的所有者一致 worker_processes auto; ... ``` - 保存文件后重启Nginx:`sudo systemctl restart nginx`。 - **原因**:引用[1]和[4]证实,此方法能解决上传新图片后的403错误。但注意:设置`user root`可能带来安全风险,建议仅用于测试或临时方案。长期使用应创建专用用户(如`nginx-user`),并确保文件所有者匹配[^1][^4]。 3. **检查SELinux设置** - 如果系统启用了SELinux(常见于CentOS/RHEL),执行: ```bash sestatus # 查看SELinux状态,若为"enforcing"则需调整 ``` - 临时禁用SELinux:`sudo setenforce 0`(重启后失效)。 - 永久禁用(推荐测试后操作): - 编辑`/etc/selinux/config`,修改`SELINUX=disabled`。 - 重启系统:`sudo reboot`。 - **原因**:引用[4]提到,SELinux会拦截Nginx访问文件,尤其当上传路径非默认时[^4]。 4. **验证Nginx配置中的root路径** - 检查Nginx的`server`块配置,确保`location`指向正确的图片目录。 ```nginx server { listen 80; server_name localhost; location / { root /home/ftpuser; # 确认路径与实际存储目录一致 ... } location ~ \.(gif|jpg|jpeg|png|svg)$ { root /data/images/; # 多格式支持,路径需正确 access_log /path/to/log; ... } } ``` - 使用`sudo nginx -t`测试配置语法,无误后重启Nginx。 - **原因**:引用[2]和[3]强调,配置错误(如路径拼写错误)会导致403错误[^2][^3]。 #### 注意事项 - **安全建议**:优先使用专用用户而非`root`。例如,创建用户`nginx-upload`,将其加入文件所有者组,并在配置中设置`user nginx-upload;`。 - **测试流程**:每步操作后上传一个新图片测试。如果手动上传可访问但程序上传失败,检查程序代码是否设置了正确文件权限(如使用`chmod`)。 - **日志分析**:查看Nginx错误日志(`/var/log/nginx/error.log`)获取具体错误原因,辅助诊断。 - **引用依据**:以上方案综合了多个引用案例。例如,权限问题见引用[1],配置路径见引用[2][^2],SELinux影响见引用[4][^4]。 通过以上步骤,多数403错误可解决。如果问题持续,请提供更多细节(如操作系统和Nginx版本)以进一步排查。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值