部署防盗链
实战-Nginx实现图片防盗链-20241204(测试成功)
目录
[toc]
背景
自己在浏览其它网站文章时,发现这个小伙伴的网站文章里图片的url竟然还是我的网址,哈哈🤣
这怎么能够被允许?😁
果断给自己图床加上防盗链,此时就nice了
只有自己网站才能引用自己图床里的图片,别人网站是无法直接引用的。😂
推荐:一般在持久化网上文章时,最好把图片都下载起来,不然那天源站图片迁移了,那么自己的文章不是废了😜(友情提示:typora可以实现批量下载图片并上传到自己图床功能哦,很不错)
前言
什么是图片盗链
首先我们聊聊什么是图片盗链?
盗链指的是其他网站不经过你的许可直接通过链接使用你网站上的资源,从而消耗你的带宽和资源,这不仅会影响你网站的性能,还有可能会导致资源被滥用。
简单来说,直接从你的网站上右键复制链接,粘贴到他自己的网站使用,实际请求的是你的服务器。
图片你直接在浏览器打开用可以,但是如果图片url出现在你的网站里(img标签里),将是不被允许的。
今天我们就来说说nginx如何实现配置静态资源服务器及防盗链实现。
1、准备一张防盗链提示图片
- 首先准备一张防盗链提示图片(来源于百度)
图片下载地址:防盗链图片
下载后,将其重命名为1.png
。
- 执行如下命令,并把防盗链图片上传到
/FdangDaoLianImages/
路径:
bash
[root@docusaurus-wiki res]# mkdir /FdangDaoLianImages[root@docusaurus-wiki res]# cd /FdangDaoLianImages/[root@docusaurus-wiki FdangDaoLianImages]# rz ##将防盗链图片1.png 上传到此路径rzwaitingtoreceive.**[root@docusaurus-wikiFdangDaoLianImages]#lltotal152-rw-rw-rw-1rootroot154676Dec1506:261.png
- 配置下nginx,让我们能访问到这个防盗链图片
vim /etc/nginx/conf.d/onedayxyy.cn.conf
bash
location/error{autoindexon;# 启用目录索引alias/FdangDaoLianImages;indexindex.html;# 默认显示index.html文件,如果没有则列出目录内容}
注意:此段代码是配置如下位置的
bash
server{listen80;server_nameonedayxyy.cn;#配置https重定向return301https:}server{gzipon;gzip_typestext/plaintext/cssapplication/jsonapplication/javascripttext/xmlapplication/xmlapplication/xml+rsstext/javascript;listen443ssl;server_nameonedayxyy.cn;root/root/rsync/rsync-vitepress/dist;location/{indexindex.htmlindex.htm;try_files$uri $uri.html$uri/=404;# non existent pageserror_page404/404.html;# a folder without index.html raises 403 in this setuperror_page403/404.html;# adjust caching headers# files in the assets folder have hashes filenameslocation~*^/assets/{expires1y;add_headerCache-Control"public,immutable";}} location/images{alias/images;indexindex.html;valid_referersnoneblocked*.onedayxyy.cnonedayxyy.cn*.gitee.comgitee.comlocalhost127.0.0.1;if($invalid_referer ) {# 如不满足,指定访问如下资源rewrite^/https:return403;}}……location/error{autoindexon;# 启用目录索引alias/FdangDaoLianImages;indexindex.html;# 默认显示index.html文件,如果没有则列出目录内容} ssl_certificate/etc/letsencrypt/live/onedayxyy.cn/fullchain.pem;ssl_certificate_key/etc/letsencrypt/live/onedayxyy.cn/privkey.pem;ssl_session_timeout5m;ssl_protocolsTLSv1.1TLSv1.2TLSv1.3;ssl_ciphersEECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;ssl_prefer_server_cipherson;add_headerStrict-Transport-Security"max-age=31536000";access_log/var/log/nginx/onedayxyy.cn.https.log;}
- 重启服务:
bash
[root@docusaurus-wiki FdangDaoLianImages]# systemctl restart nginx
- 验证:
语法说明:
bash
valid_referersnone|blocked|server_names|strings….;--none:允许没有http_refer的请求访问资源,检测Referer头域不存在的情况,则可以访问。--blocked:检测Referer头域的值被防火墙或者代理服务器删除或伪装的情况。--server_names:只允许指定ip/域名来的请求访问资源(白名单)。可设置一个或多个URL,检测Referer头域的值是否是这些URL中的某一个。在生产环境中尽量使用域名,不使用ip。
- 重启ngix服务
bash
systemctlrestartnginx
3、验证
- 导链的小伙伴网站此时已经废了哈哈🤣