先来说说为啥要写这篇文章,之前看了下 Nginx 的访问日志,发现每天有好多国外的 IP 地址来访问我的网站,并且访问的内容基本上都是恶意的。因此我决定禁止国外 IP 来访问我的网站。 想要实现这个功能有很多方法,下面我就来介绍基于 Nginx 的 ngx_http_geoip2 模块来禁止国外 IP 访问网站。
1. 安装 geoip2 扩展依赖:yum install libmaxminddb-devel -y
2. 下载 ngx_http_geoip2_module 模块: git clone https://github.com/leev/ngx_http_geoip2_module.git
3. 解压模块到指定路径我这里解压到 /usr/local 目录下: # mv ngx_http_geoip2_module/ /usr/local/# ll ngx_http_geoip2_module/ total 60 -rw-r--r-- 1 root root 1199 Aug 13 17:20 config -rw-r--r-- 1 root root 1311 Aug 13 17:20 LICENSE -rw-r--r-- 1 root root 23525 Aug 13 17:20 ngx_http_geoip2_module.c -rw-r--r-- 1 root root 21029 Aug 13 17:20 ngx_stream_geoip2_module.c -rw-r--r-- 1 root root 3640 Aug 13 17:20 README.md
4. 安装 nginx 模块首先说明下环境,我的 nginx 版本是 1.16,在网上查了下安装 ngx_http_geoip2 模块至少需要 1.18 版本及以上,因此此次安装我是升级 nginx1.18,添加 ngx_http_geoip2 模块。 下载 nginx 1.18 版本: # yum install libmaxminddb-devel -y 解压 nginx1.18 软件包,并升级为 nginx1.18,添加 ngx_http_geoip2 模块。 需要注意: - 升级 nginx,添加 nginx 模块,只需要编译,然后 make。不需要 make install,不然线上的 nginx 会被新版本 nginx 完完整整的替换掉。
- 编译前需要看下 nginx 当前安装了哪些模块。
#/usr/local/nginx/sbin/nginx -Vnginx version: nginx/1.16.0built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)built with OpenSSL 1.0.2k-fips 26 Jan 2017TLS SNI support enabledconfigure arguments: 下载地址: Docker安装Tomcat无法访问的问题及解决 一文教你如何自定义systemd开机启动脚本 |