如何阻止 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; }
...
}
我正在尝试阻止使用请求页面作为 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; }
...
}