作者信息:https://home.cnblogs.com/u/huangjiabobk

在Linux中,如何配置nginx防盗链?

在 Linux 中,配置 Nginx 防盗链主要通过 valid_referers 指令来实现。以下是详细的配置步骤和说明:

1.防盗链的原理

防盗链通过检查 HTTP 请求头中的 Referer 字段来判断请求来源:

  • 如果请求来源是允许的域名,Nginx 会正常返回资源。
  • 如果请求来源是未授权的域名(或者没有 Referer 字段),Nginx 会拒绝请求(返回 403 错误)。
2.配置步骤
2.1 编辑 Nginx 配置文件

打开 Nginx 配置文件,通常位于 /etc/nginx/nginx.conf/etc/nginx/sites-available/default

2.2 添加防盗链配置

server 块中添加以下内容,以保护特定资源(如图片、视频等):

server {
    listen 80;
    server_name yourdomain.com;

    location ~* \.(gif|jpg|jpeg|png|bmp|ico)$ {
        valid_referers none blocked yourdomain.com *.yourdomain.com;
        if ($invalid_referer) {
            return 403;
        }
    }

    # 其他配置...
}
  • location ~* \.(gif|jpg|jpeg|png|bmp|ico)$:匹配图片文件的扩展名,~* 表示正则表达式匹配且忽略大小写。
  • valid_referers none blocked yourdomain.com *.yourdomain.com;
    • none:允许没有 Referer 字段的请求(如直接输入 URL 的访问)。
    • blocked:允许被代理或防火墙隐藏了 Referer 的请求。
    • yourdomain.com*.yourdomain.com:允许来自指定域名及其子域名的请求。
  • if ($invalid_referer):如果请求的来源不符合 valid_referers 的规则,则变量 $invalid_referertrue
  • return 403;:返回 HTTP 状态码 403(禁止访问)。
2.3 测试配置文件语法

在保存配置文件后,测试配置是否正确:

sudo nginx -t

预期输出:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

如果有错误,检查配置文件中的语法问题并修复。

2.4 重启 Nginx 服务

重启 Nginx 使配置生效:

sudo systemctl restart nginx
3.测试防盗链功能
  • 直接访问资源:在浏览器中输入图片的 URL(如 http://yourdomain.com/image.jpg),应该可以正常访问。

  • 从其他域名引用资源:在其他域名的网页中嵌入图片:

    <img src="http://yourdomain.com/image.jpg" />
    

    如果配置正确,Nginx 应该返回 403 错误。

4.高级配置

如果需要更复杂的规则,可以使用 map 指令结合正则表达式进行更精确的防盗链配置。

5.我的总结

综上所述,通过配置 valid_referers 指令,可以有效保护网站的静态资源,防止带宽被恶意消耗。在实际应用中,可以根据业务需求调整匹配规则和允许的域名,进一步优化配置。

posted @ 2025-03-23 23:07  黄嘉波  阅读(167)  评论(0)    收藏  举报
版权声明:原创作品,谢绝转载!否则将追究法律责任。--作者 黄嘉波