LNMP笔记:设置图片防盗链
在LNMP(Linux + Nginx + MySQL + PHP)环境下,为了保护自己网站上的图片不被他人直接引用,可以通过配置Nginx来实现图片的防盗链功能,以下是设置图片防盗链的步骤和相关配置说明。
1. 理解防盗链原理
防盗链,即防止别人网站直接链接到你网站上的资源,如图片、视频等,通过服务器的配置可以限制只有你的网站或者特定的网站能够显示这些资源,其他网站如果直接链接这些资源,则会显示错误信息或者被重定向到特定页面。
2. 编辑Nginx配置文件
需要编辑Nginx的配置文件,一般位于/etc/nginx/nginx.conf
或者在/etc/nginx/sitesavailable/
目录下的某个站点配置文件中。
找到对应网站的server块,然后添加或修改相应的location块来设置防盗链。
3. 配置防盗链规则
server { listen 80; server_name yourdomain.com; root /path/to/your/web/root; location ~* .(jpg|jpeg|gif|png|ico|css|js)$ { # 设置过期时间,这里设置为一周 expires 7d; # 设置允许访问的referer valid_referers none blocked yourdomain.com *.yourdomain.com; # 如果来源不是上述设置的,则返回403状态码 if ($invalid_referer) { return 403; } } }
在上述配置中:
location ~.(jpg|jpeg|gif|png|ico|css|js)$
定义了受保护的文件类型,这里是图片和一些常见的静态文件类型。
expires 7d;
:设置了资源的浏览器缓存时间,这里是7天。
valid_referers none blocked yourdomain.com *.yourdomain.com;
:定义了合法的Referer,即允许来自yourdomain.com及其子域名的请求。
if ($invalid_referer) { return 403; }
:如果有非法的Referer请求,将返回HTTP 403状态码。
4. 测试配置
完成配置后,保存并退出编辑器,然后重新加载或重启Nginx服务以使配置生效。
sudo service nginx reload 或 sudo systemctl reload nginx
你可以尝试从其他网站直接链接你的图片,查看是否能够正常显示,以此验证防盗链是否生效。
5. 相关问题与解答
问题1: 如果我希望除了我的网站之外还有其他几个特定的网站也能访问这些资源,我应该如何配置?
回答: 你可以使用valid_referers
指令来指定多个域名,
valid_referers none blocked yourdomain.com *.yourdomain.com otherdomain.com *.otherdomain.com;
这样配置后,yourdomain.com
和otherdomain.com
以及它们的子域名都能够正常访问资源。
问题2: 如果我想让图片在搜索引擎的结果中也能够显示,但又不希望被其他网站盗链,应该怎么办?
回答: 你可以针对搜索引擎的爬虫UA设置特定的规则,使其能够正常抓取图片,对于Googlebot,你可以这样配置:
if ($http_user_agent ~* "googlebot") { set $valid_referer 1; } if ($valid_referer) { # 正常处理请求 } if ($invalid_referer) { return 403; }
这段配置会检查UserAgent是否包含"googlebot",如果是,就设置一个变量$valid_referer
为1,从而绕过防盗链检查。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/983765.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复