我每 30 分钟下载一次 Tor 出口节点列表https://www.dan.me.uk/torlist/并将其保存到 tor-ip.conf 文件。
我的主机不允许安装任何 nginx 模块,所以我必须使用现有的模块。
我想将文件包含到一个变量中,如果匹配的话就调用重定向。
nginx.conf
$bad_user {
include /var/www/vhosts/domain/tor-ip.conf;
}
if ($bad_user) {
rewrite ^ http://www.google.com;
}
tor-ip.conf
1.41.177.72
1.42.47.215
100.0.53.178
100.15.114.155
100.16.220.246
100.34.251.120
100.36.123.111
100.6.14.127
100.7.25.216
101.100.144.174
101.175.68.120
101.176.45.79
...
Nginx 不允许我直接将变量用作$bad_user
。我该如何设置它?
答案1
阻止 Tor 用户的一个更简单的方法是使用deny
nginx 中的指令。您可以根据 torlist 创建拒绝条目列表,并将其包含在 nginx 配置中。
你的 cronjob 如何提取 tor-ip.conf?如果你可以执行一些 shell 命令,你可以做类似的事情要点 tiagoad/block-tor.sh
wget -qO- https://check.torproject.org/exit-addresses | grep ExitAddress | cut -d ' ' -f 2 | sed "s/^/deny /g; s/$/;/g" > blacklist.conf
然后,在 nginx 中,只需包含黑名单。
include blacklist.conf;
该文件包含如下语句:
deny 100.0.53.178;
deny 100.15.114;
...
每次黑名单发生变化时,都需要重新加载 nginx。
如果您想重定向到特殊页面。您可以尝试利用error_page
指令与拒绝指令结合使用。
location / {
error_page 403 = @blacklisted;
include blacklist.conf;
}
location @blacklisted {
allow all;
return 301 https://www.google.com;
}
也许甚至像这样更简单:
location / {
error_page 403 =301 https://www.google.com;
include blacklist.conf;
}