问题描述
我想阻止特定国家的访问者通过Nginx和GeoIP模块访问我的网站www.mainwebsite.com
。
首先,我尝试了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 /位置。
http{
##
# Basic Settings
##
geoip_country /etc/Nginx/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
default yes;
IN no;
}
}
保存并退出。
map $geoip_country_code $allowed_country {
default yes;
IN no;
}
然后,在服务器{......}设置中,添加IF条件。
if ($allowed_country = no) {
return 403;
}
保存并退出。
- 重新加载并重新启动Nginx
sudo service Nginx reload
sudo service Nginx restart
因此www.test.com
直接通过公共网络/ IP托管在Ec2实例test-server-01
上,阻止工作正常,用户无法从被阻止的国家/地区访问。
www.mainwebsite.com
托管在经典负载均衡器中,而ec2实例附加到经典负载均衡器中。
为了进行测试,我创建了test-server-01
服务器的2个副本服务器,并创建了新的负载均衡器,并将两个副本服务器都连接到负载均衡器的后面,并将www.test.com
指向新的负载均衡器。但是,Geo Country屏蔽无法正常工作,因此我在IF条件上方的行下方添加了2行(如果在第5点中提到了条件),则屏蔽有效。
real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;
现在,我对www.mainwebsite.com
进行了相同的步骤1到6,并在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
有一些额外的内容,例如:
在服务器{}块之外-
# 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_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;
这是造成国家封锁不起作用的实际原因吗?还是可能有其他原因?请帮帮我。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)