我想使用 geoip 来屏蔽除白名单国家和局域网之外的 IP。第一部分工作正常,第二部分则不行。在互联网上搜索时,我找到了代码 LH(本地主机)和 LN(本地网络),但它们都不起作用。
我正在使用标准的操作方法代码进行阻止。
nginx.conf中相关http{}部分:
geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
default no;
US yes;
}
sites-available/default 中的相关服务器{}部分:
block countries
if ($allowed_country = no) {
return 444;
}
任何建议将不胜感激!
更新:
$geoip_country_code 变量在 LAN IP 访问时返回“-”,但向 geoip_county 块添加“- yes;”也不起作用。
答案1
我找到了一个解决方案 - 不知道它是否“干净”。如果之前匹配了 lan IP 条件,则只需覆盖 $allowed_country 变量即可。
geo $lan-ip {
默认否;
192.168.1.0/24 是;
}
并且这个区块在“#block countries”部分之前
如果 ($lan-ip = yes) {
设置 $allowed_country yes;
}
答案2
您还可以执行以下操作:
map $geoip_country_code $allowed_country {
default no;
'' yes;
US yes;
}
虽然它不仅适用于 LAN/私有网络 IP 地址,也适用于您的 GeoIP 数据库未处理的所有地址。