我想阻止特定国家的访问者www.mainwebsite.com
通过 Nginx 和 GeoIP 模块访问我的网站。
首先我试穿了www.test.com
。www.test.com
在尝试之前,我在测试网站上遵循了哪些步骤www.mainwebsite.com
- 安装 GeoIP:
sudo apt update && sudo apt-get install geoip-database
- 检查 GeoIP 模块是否安装:
nginx -V 2>&1|grep --color=always with-http_geoip_module
- 下载 GeoIP 数据库:
sudo mkdir /etc/nginx/GeoIP/
将 GeoIP.dat 文件放置到 /etc/nginx/GeoIP/ 位置。
- 配置 Nginx 和虚拟主机。须藤 vi /etc/nginx/nginx.conf
http{
##
# Basic Settings
##
geoip_country /etc/nginx/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
default yes;
IN no;
}
}
保存并退出。
- sudo vi /etc/nginx/site-available/test.com 在服务器外开始添加地图行{......}
map $geoip_country_code $allowed_country {
default yes;
IN no;
}
之后,在 server{......} 设置中,添加 IF 条件。
if ($allowed_country = no) {
return 403;
}
保存并退出。
- 重新加载并重启 nginx
sudo service nginx reload
sudo service nginx restart
因此www.test.com
直接托管在test-server-01
具有公共网络/IP 的 Ec2 实例上,阻止工作并且用户无法从被阻止的国家/地区访问。
www.mainwebsite.com
托管到经典负载均衡器,而 ec2 实例附加到经典负载均衡器。
为了测试,我创建了服务器的 2 个副本服务器test-server-01
并创建了新的负载均衡器,并将两个副本服务器连接到负载均衡器后面并指向www.test.com
新的负载均衡器。但是 Geo Country 阻止不起作用,所以我在第 5 点中提到的 IF 条件(如果条件)上方添加了 2 行,然后阻止工作。
real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;
现在我按照相同的步骤 1 到 6 对&www.mainwebsite.com
进行了更改,但国家/地区屏蔽不起作用。nginx.conf
/etc/nginx/site-available/mainwebsite.com
我在这里怀疑,对于www.test.com
,/etc/nginx/site-available/test.com
和链接文件的内容/etc/nginx/site-enabled/test.com
是相同的。
但是对于www.mainwebsite.com
,文件的内容/etc/nginx/site-available/mainwebsite.com
并不/etc/nginx/site-enabled/mainwebsite.com
相同。
/etc/nginx/site-enabled/mainwebsite.com
有一些额外的内容,例如:在 server{} 块之外
# Expires map
map $sent_http_content_type $expires {
default off;
text/html epoch;
text/css max;
application/javascript max;
~image/ max;
application/font-woff max;
}
并在 server{} 块内。
server_name www.mainwebsite.com;
rewrite ^/blog/blogs$ https://www.mainwebsite.com/blogs permanent;
rewrite ^/companies https://www.mainwebsite.com.com/company permanent;
rewrite ^/events-2/* https://www.mainwebsite.com/events permanent;
这是国家封锁不起作用的实际原因吗?或者还有其他原因?请帮帮我。