【问题标题】:How to block Nginx requests where http_referer matches requested URL如何阻止 http_referer 与请求的 URL 匹配的 Nginx 请求
【发布时间】:2021-04-16 23:16:42
【问题描述】:

我试图阻止一个使用请求的页面作为 http_referer 的网络爬虫,但我无法确定将其与哪个变量进行比较。

例如

location / {
  if ($the_variable_with_the_current_full_uri = $http_referer) {
    return 403;
  }
}

该变量必须匹配协议、主机和 URL,这样从 http 到 https 的内部重定向不会被阻止。

所以如果有人用“https://www.example.com/pages/1”的$http_referer请求“https://www.example.com/pages/1”,就应该被屏蔽。

作为第二个问题,是否可以在两个条件下阻止请求:上述检查匹配的位置以及匹配特定的用户代理字符串?

【问题讨论】:

    标签: nginx nginx-config


    【解决方案1】:

    可以通过将多个变量连接在一起来构造完整的 URL。

    例如:

    $scheme://$host$request_uri
    

    可以使用map 处理次要条件(请参阅this document)。

    例如:

    map $http_user_agent $my_http_referer {
        default      "";
        blahblah     $http_referer;
    }
    server {
        ...
        if ($scheme://$host$request_uri = $my_http_referer) { return 403; }
        ...
    }
    

    【讨论】:

    • 太好了,我试试看。有趣的是,没有代表完整 URL 的内置变量。我什至在 Nginx 网站上都找不到可用变量的列表。另外,必须检查“blahblah”是否可以引用并按原样输入,或者我是否必须转义字符串...
    • 我发现this website 很有用。请参阅页面下方的“按字母顺序排列的变量索引”。
    • 请参阅我的答案中链接的map 文档,但您可能希望使用正则表达式来匹配部分字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    相关资源
    最近更新 更多