龙空技术网

Nginx + Ip2location 或 GeoIP 基于 IP 地理位置数据库做流量访问控制

运维技术帮 746

前言:

当前朋友们对“nginxstream流量控制”大约比较关心,大家都想要分析一些“nginxstream流量控制”的相关知识。那么小编在网络上汇集了一些关于“nginxstream流量控制””的相关知识,希望你们能喜欢,小伙伴们快快来了解一下吧!

概述

常见地理位置数据库: Ip2location、Maxmind GeoLite2

ip2location 可提供不同级别的 ip 地理位置数据库

# 国家级DB1.LITE IP2Location LITE IP-COUNTRY Database# 城市级DB3.LITE IP2Location LITE IP-COUNTRY-REGION-CITY Database# 城市级 + 经纬度DB5.LITE IP2Location LITE IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE Database# 城市级 + 经纬度 + 邮编DB9.LITE IP2Location LITE IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE Database# 城市级 + 经纬度 + 邮编 + 时区DB11.LITE IP2Location LITE IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE Database
Ip2location

1、IP2Location-C-Library 部署

git clone  -i -v --force./configuremakemake install# 由于动态共享库 libIP2Location.so.3.0.0 被部署到 /usr/local/lib 路径, 因此需将此目录添加到系统共享库目录路径echo "/usr/local/lib" >> /etc/ld.so.confldconfig

2、Nginx 新添加编译选项 --add-module=/root/src/ip2location-nginx

# 源码下载及解压wget  xzf nginx-1.20.1.tar.gz && cd nginx-1.20.1# 编译配置选项yum install pcre-devel zlib-devel -y./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-module=/root/src/ip2location-nginx# 编译安装make -j4 && make installmkdir -p /var/cache/nginx/client_temp

3、配置 Nginx 使用 ip2location

http {    # ip2location on;    ip2location_database /usr/share/ip2location/IP2LOCATION-LITE-DB1.BIN;    # ip2location_access_type shared_memory;    map $ip2location_country_short $blacklist_country {        default no;        AU yes;        IN yes;        NG yes;    }    server {        ...        # 封禁国家 US 的 Ip 段        if ( $ip2location_country_short = 'US' ) {            return 403;        }        # 封禁多个国家(AU、IN、NG)的 Ip 段        if ( $blacklist_country = yes ) {            return 403;        }        ...    }}
GeoIP

下载 geoip 地理位置数据库文件 /usr/share/GeoIP/GeoIP.dat

yum -y install geoip-devel--with-http_geoip_module  # 需要额外的 nginx 编译选项支持make && make install# Nginx 主要配置如下http{    # 指定用于根据客户端 IP 地址确定国家/地区的数据库    geoip_country /usr/share/GeoIP/GeoIP.dat;    # 指定用于根据客户端 IP 地址确定国家、地区和城市的数据库    # geoip_city   /usr/share/GeoIP/GeoLiteCity.dat;    # 使用变量 $geoip_country_code 的值匹配块内的第一内,若匹配到, 则将改行的值设置为自定义变量 $allowed_country 的值    map $geoip_country_code $allowed_country {        default yes;   # 默认允许        CN no;         # CN 中国的国家码    }    server {        location / {            root /data/wwwroot/test;            if ($allowed_country = no) {                return 403;   # 返回403提示                return ; # 跳转到其他域名网站 ,return 也可以用 rewrite            }        }    }}

标签: #nginxstream流量控制

上一篇如何将.Net Core Web项目部署到NginX

下一篇没有了