关于nginx防盗链配置中排除url特定字符串的总结

2024-06-28 14:06 关于nginx防盗链配置中排除url特定字符串的总结已关闭评论

防盗链配置

针对所有图片资源、css资源、js资源、视频资源等,不允许除了当前域名外的连接访问。这里存在一些问题,如果是反向代理,那么被代理的图片资源、css资源、js资源也会被禁止,因此这里需要识别特定字符串,排除该字符串。

假设特定字符串为:custom

排除掉url包含custom的url防盗链的nginx配置

修改Nginx配置中的location块,以便匹配指定的静态文件类型(.gif, .jpg, .jpeg, .png, .swf, .flv)的同时排除URL中包含custom的情况,你可以使用否定前缀的正则表达式来实现这一需求。下面是调整后的配置示例:

location ~* ^(?!.*custom).*\.(gif|jpg|jpeg|png|swf|flv)$ {
    valid_referers server_names *.xxx.xx;
    if ($invalid_referer) {
        return 403;
    }
    expires 30d;
    add_header Cache-Control "public, no-transform";
}

在这段配置中,关键的变化在于location的正则表达式部分:

  • ^(?!.*custom) 是一个否定前缀断言,它会排除掉任何以custom开头的URL路径。这里(?!...)称为否定前瞻断言,意味着如果后面跟的是static,则该表达式不匹配。
  • .*\.(gif|jpg|jpeg|png|swf|flv)$ 继续匹配以指定静态文件扩展名结尾的请求。

这样,该location块将只匹配那些URL路径中不包含custom,且扩展名为.gif, .jpg, .jpeg, .png, .swf, 或 .flv 的请求,并对这些请求应用防盗链策略和其他配置。

关于前缀断言

在正则表达式中,(?!...)是一个否定前瞻断言(negative lookahead assertion)的语法。它的含义是“后面的内容不应该匹配括号内的正则表达式模式”。这个构造不会消耗任何字符,也就是说它不会使正则表达式的匹配指针向前移动,只是检查当前位置后面的内容是否满足某个条件。

具体来说:
- ? 表示该构造是一个非贪婪量词或者用于特殊构造(如这里的前瞻断言)。
- ! 表示否定,意味着我们正在定义一个必须不匹配的条件。
- (?=...) 是肯定前瞻断言,用于检查后面的内容是否匹配某个模式。
- 而 (?!...) 则是其否定形式,用于检查后面的内容是否不匹配某个模式。

例如,正则表达式 foo(?!bar) 将匹配字符串 "foobar" 中的 "foo",但不会匹配 "foobartest" 中的 "foo",因为在后者中 "foo" 后面紧跟着 "bar",这正好违背了我们的否定前瞻条件。

当前文章价值2.22元,扫一扫支付后添加微信提供帮助!(如不能解决您的问题,可以申请退款)

你可能感兴趣的文章

来源:每日教程每日一例,深入学习实用技术教程,关注公众号TeachCourse
转载请注明出处: https://teachcourse.cn/3559.html ,谢谢支持!

资源分享

一篇文章,学完TeachCourse2016成长笔记 一篇文章,学完TeachCourse201
AI周报助手 AI周报助手
ubuntu写入权限(W)和执行权限(X) ubuntu写入权限(W)和执行权限(X
python随机方法random python随机方法random

评论已关闭!