Nginx 防盗链
介绍
在网站运营中,静态资源(如图片、视频、CSS文件等)是网站的重要组成部分。然而,这些资源可能会被其他网站直接引用,导致你的服务器带宽被消耗,甚至可能影响网站的性能。为了防止这种情况,我们可以使用Nginx的防盗链功能。
防盗链(Hotlink Protection)是一种技术手段,用于防止其他网站直接引用你的静态资源。通过配置Nginx,我们可以限制只有特定来源的请求才能访问这些资源。
如何配置Nginx防盗链
基本配置
Nginx提供了valid_referers
指令,用于指定合法的引用来源。以下是一个基本的防盗链配置示例:
nginx
server {
listen 80;
server_name example.com;
location /images/ {
valid_referers none blocked example.com *.example.com;
if ($invalid_referer) {
return 403;
}
}
}
在这个配置中:
valid_referers
指令定义了合法的引用来源。none
表示直接访问(即没有引用来源),blocked
表示被防火墙或代理服务器屏蔽的请求,example.com
和*.example.com
表示允许来自example.com
及其子域名的请求。if ($invalid_referer)
用于检查请求的引用来源是否合法。如果不合法,则返回403状态码,拒绝访问。
实际案例
假设你有一个图片资源http://example.com/images/logo.png
,你希望只有来自example.com
或其子域名的请求才能访问该图片。如果其他网站尝试直接引用该图片,Nginx将返回403错误。
输入
- 合法请求:
http://example.com/images/logo.png
(来自example.com
) - 非法请求:
http://another-site.com
(尝试引用http://example.com/images/logo.png
)
输出
- 合法请求:正常返回图片
- 非法请求:返回403错误
进阶配置
你还可以结合rewrite
指令,将非法请求重定向到一个默认图片或提示页面:
nginx
server {
listen 80;
server_name example.com;
location /images/ {
valid_referers none blocked example.com *.example.com;
if ($invalid_referer) {
rewrite ^/images/.*$ /images/blocked.png break;
}
}
}
在这个配置中,如果请求的引用来源不合法,Nginx会将请求重定向到一个默认的blocked.png
图片。
总结
通过配置Nginx的防盗链功能,你可以有效防止其他网站盗用你的静态资源,从而节省服务器带宽并提升网站性能。在实际应用中,你可以根据需求调整valid_referers
的配置,甚至可以结合rewrite
指令提供更友好的提示。
附加资源
练习
- 尝试在你的Nginx服务器上配置防盗链,并测试不同来源的请求。
- 修改配置,使得非法请求重定向到一个自定义的提示页面。