如何使用Nginx和GeoIP模块阻止来自特定国家/地区的访客

问题描述

我想阻止特定国家的访问者通过Nginx和GeoIP模块访问我的网站www.mainwebsite.com

首先,我尝试了www.test.com。在尝试www.test.com

之前,我在测试网站www.mainwebsite.com上遵循了哪些步骤
  1. 安装GeoIP:
sudo apt update && sudo apt-get install geoip-database
  1. 检查是否已安装GeoIP模块:
Nginx -V 2>&1|grep --color=always with-http_geoip_module
  1. 下载GeoIP数据库
sudo mkdir /etc/Nginx/GeoIP/

将GeoIP.dat文件放置到/ etc / Nginx / GeoIP /位置。

  1. 配置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;
      }

}

保存并退出

  1. sudo vi /etc/Nginx/site-available/test.com 在服务器外部开始添加地图线{......}
map $geoip_country_code $allowed_country {
 default yes;
 IN no;
}

然后,在服务器{......}设置中,添加IF条件。

if ($allowed_country = no) {
     return 403;
 }

保存并退出

  1. 重新加载并重新启动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 (将#修改为@)