跳到主要内容

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指令提供更友好的提示。

附加资源

练习

  1. 尝试在你的Nginx服务器上配置防盗链,并测试不同来源的请求。
  2. 修改配置,使得非法请求重定向到一个自定义的提示页面。