![如何阻止来自某些不受欢迎国家/地区的所有请求到一个位置(nginx)](https://linux22.com/image/1544533/%E5%A6%82%E4%BD%95%E9%98%BB%E6%AD%A2%E6%9D%A5%E8%87%AA%E6%9F%90%E4%BA%9B%E4%B8%8D%E5%8F%97%E6%AC%A2%E8%BF%8E%E5%9B%BD%E5%AE%B6%2F%E5%9C%B0%E5%8C%BA%E7%9A%84%E6%89%80%E6%9C%89%E8%AF%B7%E6%B1%82%E5%88%B0%E4%B8%80%E4%B8%AA%E4%BD%8D%E7%BD%AE%EF%BC%88nginx%EF%BC%89.png)
我正在使用 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 文件!!! 我正在尝试寻找解决方案