nginx的ngx_http_geoip2模块以精准禁止特定地区IP访问

  • 2019 年 10 月 6 日
  • 筆記

 

要求:对网站的信息,比如某个访问节点不想国内或者国外的用户使用,禁止国内或者国外或者精确到某个城市的那种情况。

解决方式:1.Cloudfalre来实现禁止特定国家的ip访问,比较简单,但是需要money!!!

                  2.nginx,直接使用geoip模块,现在我们使用最新的ngx_http_geoip2,该模块可以精确到国家、省、市等一级的IP,并且全部由Nginx执行识别和阻止访问,但是Nginx编译起来比较费事。

最终解决方式,使用nginx的geoip模块:

部署操作:

一:安装geoip2扩展依赖

yum install libmaxminddb-devel -y  

二:下载ngx_http_geoip2_module

git clone https://github.com/leev/ngx_http_geoip2_module.git  

注意要是没有git的话就自己在网上下了然后直接拖到服务器上也行,不过注意格式。

三:查看模块的完整性,将下载好的模块放到指定目录下,方便nginx编译时指定路径,我是放到/usr/local/下面的。

 

 四:编译nginx并检查模块是否安装成功

nginx建议选择最新版本,我选的是1.18,也有说1.15都行的,选了1.18.之前选了1.15的没成功。但是为了匹配最新版本,一下就成功了,只能感叹神奇,所以选择1.18是正确的,哈哈!

注意:在编译时,我们只要加上–add-module=/usr/local/ngx_http_geoip2_module这个参数或者命令就行了,注意一定要加上额,不加等于没有geoip模块,就更没有这个功能了,为了简化,具体的nginx编译参数我就不写了,如下。

  ./configure  --add-module=/usr/local/ngx_http_geoip2_module --user=www --group=www --prefix=......................................  

之后的功能make && make install 等照常规流程来就行了。  

nginx整体安装完就检查下模块是否都有:

[root@nsh install]# nginx -V  Tengine version: Tengine/2.3.2  nginx version: nginx/1.17.3  built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)  built with OpenSSL 1.1.1b  26 Feb 2019  TLS SNI support enabled  configure arguments: --add-module=/usr/local/ngx_http_geoip2_module --user=www --group=www --prefix=/www/server/nginx   --add-module=/www/server/nginx/src/ngx_devel_kit --add-module=/www/server/nginx/src/lua_nginx_module  --add-module=/www/server/nginx/src/ngx_cache_purge --add-module=/www/server/nginx/src/nginx-sticky-module   --with-openssl=/www/server/nginx/src/openssl --with-pcre=pcre-8.43 --with-http_v2_module --with-stream  --with-stream_ssl_module --with-http_stub_status_module --with-http_ssl_module --with-http_image_filter_module  --with-http_gzip_static_module --with-http_gunzip_module --with-ipv6 --with-http_sub_module --with-http_flv_module   --with-http_addition_module --with-http_realip_module --with-http_mp4_module  --with-ld-opt=-Wl,-E --with-cc-opt=-Wno-error --with-ld-opt=-ljemalloc  

五:验证是否成功

ldd  /usr/local/nginx/sbin/nginx