部署防盗链
实战-Nginx实现图片防盗链-20241204(测试成功)
目录
[toc]
背景
自己在浏览其它网站文章时,发现这个小伙伴的网站文章里图片的url竟然还是我的网址,哈哈🤣
这怎么能够被允许?😁
果断给自己图床加上防盗链,此时就nice了
只有自己网站才能引用自己图床里的图片,别人网站是无法直接引用的。😂
推荐:一般在持久化网上文章时,最好把图片都下载起来,不然那天源站图片迁移了,那么自己的文章不是废了😜(友情提示:typora可以实现批量下载图片并上传到自己图床功能哦,很不错)
前言
什么是图片盗链
首先我们聊聊什么是图片盗链?
盗链指的是其他网站不经过你的许可直接通过链接使用你网站上的资源,从而消耗你的带宽和资源,这不仅会影响你网站的性能,还有可能会导致资源被滥用。
简单来说,直接从你的网站上右键复制链接,粘贴到他自己的网站使用,实际请求的是你的服务器。
图片你直接在浏览器打开用可以,但是如果图片url出现在你的网站里(img标签里),将是不被允许的。
今天我们就来说说nginx如何实现配置静态资源服务器及防盗链实现。
1、准备一张防盗链提示图片
- 首先准备一张防盗链提示图片(来源于百度)
图片下载地址:防盗链图片
下载后,将其重命名为1.png
。
- 执行如下命令,并把防盗链图片上传到
/FdangDaoLianImages/
路径:
[root@docusaurus-wiki res]# mkdir /FdangDaoLianImages
[root@docusaurus-wiki res]# cd /FdangDaoLianImages/
[root@docusaurus-wiki FdangDaoLianImages]# rz ##将防盗链图片1.png 上传到此路径
rz waiting to receive.**[root@docusaurus-wiki FdangDaoLianImages]# ll
total 152
-rw-rw-rw- 1 root root 154676 Dec 15 06:26 1.png
- 配置下nginx,让我们能访问到这个防盗链图片
vim /etc/nginx/conf.d/onedayxyy.cn.conf
location /error {
autoindex on; # 启用目录索引
alias /FdangDaoLianImages;
index index.html; # 默认显示index.html文件,如果没有则列出目录内容
}
注意:此段代码是配置如下位置的
server {
listen 80;
server_name onedayxyy.cn;
#配置https重定向
return 301 https://$host$request_uri;
}
server {
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
listen 443 ssl;
server_name onedayxyy.cn;
root /root/rsync/rsync-vitepress/dist;
location / {
index index.html index.htm;
try_files $uri $uri.html $uri/ =404;
# non existent pages
error_page 404 /404.html;
# a folder without index.html raises 403 in this setup
error_page 403 /404.html;
# adjust caching headers
# files in the assets folder have hashes filenames
location ~* ^/assets/ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}
location /images {
alias /images;
index index.html;
valid_referers none blocked *.onedayxyy.cn onedayxyy.cn *.gitee.com gitee.com localhost 127.0.0.1;
if ( $invalid_referer ) {
# 如不满足,指定访问如下资源
rewrite ^/ https://onedayxyy.cn/error/1.png;
return 403;
}
}
……
location /error {
autoindex on; # 启用目录索引
alias /FdangDaoLianImages;
index index.html; # 默认显示index.html文件,如果没有则列出目录内容
}
ssl_certificate /etc/letsencrypt/live/onedayxyy.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/onedayxyy.cn/privkey.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=31536000";
access_log /var/log/nginx/onedayxyy.cn.https.log;
}
- 重启服务:
[root@docusaurus-wiki FdangDaoLianImages]# systemctl restart nginx
- 验证:
https://onedayxyy.cn/error/1.png
2、配置nginx
- 我的图床图片资源存放于服务器的
/images
目录下
vim /etc/nginx/conf.d/onedayxyy.cn.conf
具体代码:
server {
listen 80;
server_name onedayxyy.cn;
#配置https重定向
return 301 https://$host$request_uri;
}
server {
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
listen 443 ssl;
server_name onedayxyy.cn;
root /root/rsync/rsync-vitepress/dist;
location / {
index index.html index.htm;
try_files $uri $uri.html $uri/ =404;
# non existent pages
error_page 404 /404.html;
# a folder without index.html raises 403 in this setup
error_page 403 /404.html;
# adjust caching headers
# files in the assets folder have hashes filenames
location ~* ^/assets/ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}
location /images {
alias /images;
index index.html;
valid_referers none blocked *.onedayxyy.cn onedayxyy.cn *.gitee.com gitee.com localhost 127.0.0.1;
if ( $invalid_referer ) {
# 如不满足,指定访问如下资源
rewrite ^/ https://onedayxyy.cn/error/1.png;
return 403;
}
}
location /home {
alias /root/home3.0/;
index index.html index.htm;
}
location /wiki {
alias /root/rsync/rsync-docusaurus/build;
index index.html index.htm;
}
location /newyear {
alias /root/rsync/rsync-qianduan-demo/qianduan-demo/newyear;
index index.html index.htm;
}
location /error {
autoindex on; # 启用目录索引
alias /FdangDaoLianImages;
index index.html; # 默认显示index.html文件,如果没有则列出目录内容
}
ssl_certificate /etc/letsencrypt/live/onedayxyy.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/onedayxyy.cn/privkey.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=31536000";
access_log /var/log/nginx/onedayxyy.cn.https.log;
}
语法说明:
valid_referers none | blocked | server_names | strings ….;
--none:允许没有http_refer的请求访问资源,检测 Referer 头域不存在的情况,则可以访问。
--blocked:检测 Referer 头域的值被防火墙或者代理服务器删除或伪装的情况。
--server_names :只允许指定ip/域名来的请求访问资源(白名单)。可设置一个或多个 URL ,检测 Referer 头域的值是否是这些 URL 中的某一个。在生产环境中尽量使用域名,不使用ip。
- 重启ngix服务
systemctl restart nginx
3、验证
- 导链的小伙伴网站此时已经废了哈哈🤣
https://hydoc.netlify.app/blog/VM-Network-IP
- 自己typora里图片是可以正常显示的
- 浏览器也是可以直接访问图片的
参考
https://blog.51cto.com/u_64214/8577766
关于我
我的博客主旨:
- 排版美观,语言精炼;
- 文档即手册,步骤明细,拒绝埋坑,提供源码;
- 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!
🍀 个人网站
🍀 微信二维码
x2675263825 (舍得), qq:2675263825。
🍀 微信公众号
《云原生架构师实战》
🍀 csdn
https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421
🍀 知乎
https://www.zhihu.com/people/foryouone
最后
如果你还有疑惑,可以去我的网站查看更多内容或者联系我帮忙查看。
如果你有更好的方式,评论区留言告诉我。谢谢!
好了,本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!