Nginx实现图片防盗链
前言
什么是图片盗链
首先我们聊聊什么是图片盗链?
盗链指的是其他网站不经过你的许可直接通过链接使用你网站上的资源,从而消耗你的带宽和资源,这不仅会影响你网站的性能,还有可能会导致资源被滥用。
简单来说,直接从你的网站上右键复制链接,粘贴到他自己的网站使用,实际请求的是你的服务器。
今天我们就来说说nginx如何实现配置静态资源服务器及防盗链实现。
警告
图片你直接在浏览器打开用可以,但是如果图片 url 出现在你的网站里(img 标签里),将是不被允许的。
版权
提示
本文是在 博主One 文章:《Nginx 实现图片防盗链》 基础上增加了自己实践过程的一些细节,转载无需和我联系,但请注明文章来源。如果侵权之处,请联系博主进行删除,谢谢~
实现
首先准备一张防盗链提示图片(来源于百度),盗链提示图片
在nginx 安装目录的 html 下创建 res 目录,将上述图片上传至此,可以直接访问到,将此图片作为盗链提示
sh# 创建资源目录并上传图片,/usr/share/nginx/是我云服务器Nginx的安装目录 sudo mkdir -p /usr/share/nginx/html/res
防盗链配置位置
错误页面配置放在
server
块中提示 此配置是在图床数据下进行配置,以实际为准!我的是在
/etc/nginx/conf.d/RuyuBlog.conf
里面进行配置的nginxserver { listen 443 ssl default_server; listen [::]:443 ssl default_server; server_name seasir.top; root /root/home3.0; #省略... # 图床数据 location /images { alias /images; index index.html; } location /error { autoindex on; # 启用目录索引 alias /FdangDaoLianImages; index index.html; # 默认显示index.html文件,如果没有则列出目录内容 } # 引入 SSL 公用参数 include /etc/nginx/common_configs/common_ssl_params.conf; }
在服务器根目录下创建
/FdangDaoLianImages/
文件夹并进入此目录sh#c创建此目录 [root@VM-4-16-centos res]# mkdir /FdangDaoLianImages #进入此目录 [root@VM-4-16-centos res]# cd /FdangDaoLianImages/ #rz表示从电脑本地开始上传 [root@VM-4-16-centos FdangDaoLianImages]# rz #或者 sudo mv /usr/share/nginx/html/res/1.jpg /FdangDaoLianImages/ [root@VM-4-16-centos FdangDaoLianImages]# ll #上传防盗链提示图片 -rw-r--r-- 1 root root 150863 3月 8 23:45 1.jpg
重启服务
shsystemctl restart nginx
配置 Nginx
我的图床图片资源存放于服务器的/images
目录下
提示 此配置是在图床数据下进行配置,以实际为准!我的是在/etc/nginx/conf.d/RuyuBlog.conf
里面进行配置的
#vim /etc/nginx/conf.d/RuyuBlog.conf
……
server {
# 监听端口及其他配置项......
# 图床数据
location /images {
alias /images;
index index.html;
valid_referers none blocked *.seasir.top seasir.top localhost 127.0.0.1;
if ( $invalid_referer ) {
# 如不满足,指定访问如下资源
rewrite ^/ https://seasir.top/error/1.jpg;
return 403;
}
}
# 其他配置项......
}
……
警告
.seasir.top
seasir.top
换成实际自己的主域名 https://seasir.top/error/1.jpg
换成自己的,注意后缀
参数说明:
valid_referers none | blocked | server_names | strings ….;
--none:允许没有 http_refer 的请求访问资源,检测 Referer 头域不存在的情况,则可以访问。
--blocked:检测 Referer 头域的值被防火墙或者代理服务器删除或伪装的情况。
--server_names :只允许指定 ip/域名来的请求访问资源(白名单)。可设置一个或多个 URL ,检测 Referer 头域的值是否是这些 URL 中的某一个。在生产环境中尽量使用域名,不使用 ip。
重启服务
systemctl restart nginx