Nginx -- 如果是 referer,将 (x-forwarded-for) ip 添加到黑名单
Nginx -- if referer, add (x-forwarded-for) ip to blacklist
我写了一个基本的 http referer 重定向器,看起来像这样:
if ($http_referer ~* (google|yahoo|bing|duckduckgo)) { return 301 https://altavista.com; }
我的目标是这样的
if ($http_referer ~* (google|yahoo|bing|duckduckgo)) {
add $x-forwarded-for bad_ips.txt; <-- this line is the question (x-forwarded-for because it's behind cloudflare)
return 301 https://altavista.com;
}
if ($bad_ip) {
return 301 https://altavista.com;
}
有什么办法吗?目标基本上是如果您是从黑名单上的网站引荐的,我想将您的 ip 添加到重定向列表中。
注意:这不需要纯粹在nginx中完成;使用除 nginx 之外的其他技术是可以的,只要它们是免费的。
请注意我的网站使用的是 cloudflare,因此必须使用 x-forwarded-for 地址而不是禁止简单的 IP,否则我只是禁止 cloudflare。
谢谢
直到我记得没有直接的方法可以做到这一点。
根据this 博客,付费选项可以使用 Nginx Plus。
除此之外,我现在可以看到 2 个选项:
将 OpenResty 与 LUA 模块一起使用。你要做的是
- 在每次请求时将 IP 写入文件
- 每次从文件中读取请求时,如果 IP 存在,则 301 重定向。
如果你不想使用 OpenResty 那么你也可以 build Nginx with LUA module.
[我现在关心的是效率。此方法可能会增加性能开销,因为必须在每次请求时解析文件。]
在 Nginx 中使用 Fail2Ban。
I wanted to add this in the comment but I don't have enough reputation to comment.
我写了一个基本的 http referer 重定向器,看起来像这样:
if ($http_referer ~* (google|yahoo|bing|duckduckgo)) { return 301 https://altavista.com; }
我的目标是这样的
if ($http_referer ~* (google|yahoo|bing|duckduckgo)) {
add $x-forwarded-for bad_ips.txt; <-- this line is the question (x-forwarded-for because it's behind cloudflare)
return 301 https://altavista.com;
}
if ($bad_ip) {
return 301 https://altavista.com;
}
有什么办法吗?目标基本上是如果您是从黑名单上的网站引荐的,我想将您的 ip 添加到重定向列表中。
注意:这不需要纯粹在nginx中完成;使用除 nginx 之外的其他技术是可以的,只要它们是免费的。
请注意我的网站使用的是 cloudflare,因此必须使用 x-forwarded-for 地址而不是禁止简单的 IP,否则我只是禁止 cloudflare。
谢谢
直到我记得没有直接的方法可以做到这一点。
根据this 博客,付费选项可以使用 Nginx Plus。
除此之外,我现在可以看到 2 个选项:
将 OpenResty 与 LUA 模块一起使用。你要做的是
- 在每次请求时将 IP 写入文件
- 每次从文件中读取请求时,如果 IP 存在,则 301 重定向。
如果你不想使用 OpenResty 那么你也可以 build Nginx with LUA module.
[我现在关心的是效率。此方法可能会增加性能开销,因为必须在每次请求时解析文件。]
在 Nginx 中使用 Fail2Ban。
I wanted to add this in the comment but I don't have enough reputation to comment.