nginx统计流量和禁止国外IP访问

需要在生产环境统计网站各个域名相关的流量等信息,同时由于在日志中看见大量国外IP爬虫和嗅探行为,需要禁止所有国外IP访问。这里才有两个nginx插件实现。

1. 流量统计

nginx-module-vts:

https://github.com/vozlt/nginx-module-vts?spm=a2c6h.12873639.article-detail.5.3c09784bfl6kWn#calculations-and-intervals

2.根据地理信息进行IP的Filter

ngx_http_geoip_module

https://github.com/leev/ngx_http_geoip2_module

3.安装

通过编译nginx进行,首先将两个模块的代码通过git clone到某个目录下

yum install libmaxminddb-devel -y
/configure --prefix=/usr/local/nginx  --with-http_ssl_module --add-module=/deployment/nginx-module-vts/ --with-http_v2_module --add-module=/deployment/ngx_http_geoip2_module
make -j4
make install

4. 配置

4.1 流量统计

http {
    vhost_traffic_status_zone;

    ...

    server {

        ...

        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}

4.2 IP过滤

在nginx.conf http下加入如下代码:


https://github.com/P3TERX/GeoLite.mmdb 获取
GeoLite2-Country.mmdb 放到/usr/share/GeoIP下

https://github.com/v2fly/geoip 后去geoip.dat 放在/usr/share/GeoIP

安装

geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb  {
    auto_reload 5m;
    $geoip2_data_country_code country iso_code;
}
map $geoip2_data_country_code $disallowed_country {
        default yes;
        CN no;
}

在需要的location下加入:

if ($disallowed_country = yes) {
    return 403;
}

Lokie博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论
  • 本博客使用免费开源的 laravel-bjyblog v5.5.1.1 搭建 © 2014-2018 lokie.wang 版权所有 ICP证:沪ICP备18016993号
  • 联系邮箱:kitche1985@hotmail.com