如何阻止 http_referer 匹配请求 URL 的 Nginx 请求

How to block Nginx requests where http_referer matches requested URL

我正在尝试阻止使用请求页面作为 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” ]", 应该屏蔽.

作为次要问题,是否可以在两种情况下阻止请求:上述检查匹配的地方,以及匹配特定用户代理字符串的地方?

完整的 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; }
    ...
}