如何阻止来自某些不受欢迎国家/地区的所有请求到一个位置(nginx)

如何阻止来自某些不受欢迎国家/地区的所有请求到一个位置(nginx)

我正在使用 nginx,并且已经安装了geoip-数据库贡献用于阻止除某些优先国家/地区之外所有国家/地区访问 /wp-admin 位置的软件包。

location /wp-admin {
  if ($allowed_country = no) {
    return 403;
  }
}

尝试在浏览器中打开此页面时,它工作正常。但我仍然可以在 access.log 中看到许多 POST 请求,并且在 worpdress 日志中看到来自被拒绝国家/地区的登录请求失败。是否可以将 geoip-database-contrib 模块也用于 POST 请求?

我试过:

location /wp-admin {
  if ($allowed_country = no) {
    deny all;
  }
}

但重新加载后,nginx 根本无法启动。您有什么想法,如何仅阻止针对位置 /wp-admin 的所有请求?我不想在防火墙级别阻止流量,因为所有国家/地区都应该可以访问网络,但我想将请求限制为管理员。

我知道我只能允许某些 IP 地址的请求,但我需要从更多具有动态分配 IP 的地方访问管理员。

非常感谢您的想法。

答案1

sudo apt-get install geoip-database libgeoip1

你需要这个额外的方块,将其放在 http{} 块内,server{} 块上方

# Whitelist Country to access Web admin
geoip_country /usr/share/GeoIP/GeoIP.dat; #Please download database and put the correct path here
    map $geoip_country_code $allowed_country {
        default no;
        PH yes;

}

然后在 server{} 块中你可以放入这个

location /wp-admin {
  if ($allowed_country = no) {
    return 444;
  }
}

它适用于文件夹(例如:http://域名/文件夹名称)但是当我尝试拒绝特定的.php文件时(http://域名/folder_name_2/filename.php), 不起作用,浏览器强制下载 php 文件!!! 我正在尝试寻找解决方案

相关内容