nginx根据GeoIP限制不同国家的访问限制

  • nginx根据GeoIP限制不同国家的访问限制已关闭评论
  • 115 views
  • A+
所属分类:nginx

nginx根据GeoIP限制不同国家的访问限制

2018年5月25日,被称为史上最严信息保护条例的一般数据保护条例(GDPR)正式产生法律效力,由拥有超重罚款和最广泛管辖权,全球的各行各业都不得不重新审视自己的数据处理政策和行为,以避免动辄数亿的罚款。由于互联网的无国界性,也将我们中国的互联网企业拉入到了这样一个席卷全球的个人信息保护的最新进展当中,不仅是有跨国业务的互联网企业会涉及到GDPR的合规问题,大部分的游戏、购物这种用户遍布全球各地的互联网企业也由于GDPR的长地管辖权而受到影响。为此,京东集团、南方都市报、法学专家、律师等齐聚一堂,就热点问题进行讨论和交流,探讨我国的数字经济企业该如何应对,避免入“坑”。

GDPR有多严格?

对于违规收集个人信息的互联网公司,最高可罚款2000万欧元或全球营业额的4%。

这个数字看上去没什么概念。举个例子,微软2017年收入 900亿美元,4%就是36亿美元;亚马逊2017年的收入为1779亿美元,若罚款4%就是70亿美元。

那么怎样避免被罚呢,要么在欧盟成员国建立数据中心,要么停止业务对欧盟提供服务,事情紧急,下来我们就先弄一下屏蔽对欧盟提供业务吧。

欧盟成员国以及域名后缀标识如下:

欧盟域名 .eu 英国域名 .uk 法国域名 .fr 德国域名 .de 荷兰域名 .nl 波兰域名 .pl 捷克域名 .cz 爱沙尼亚域名 .ee 卢森堡域名 .lu 芬兰域名 .fi 爱尔兰域名 .ie 列支敦士登域名 .li 立陶宛域名 .lt 拉脱维亚域名 .lv 葡萄牙域名 .pt 瑞典域名 .se 瑞士域名 .ch 意大利域名 .it 比利时域名 .be 俄罗斯域名 .ru 西班牙域名 .es 丹麦域名 .dk 挪威域名 .no 罗马尼亚域名 .ro 希腊域名 .gr 匈牙利域名 .hu 奥地利域名 .at 乔治亚域名 .gs

下来我来说一下简单的一些策略吧

安装nginx

下载地址:http://nginx.org/download/

我这里选的是:nginx-1.6.3.tar.gz

#下载nginx安装包
wget http://nginx.org/download/nginx-1.6.3.tar.gz
#下载pcre安装包
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.38.tar.gz
#下载openssl安装包
wget https://www.openssl.org/source/openssl-1.0.2o.tar.gz
#下载zlib安装包
wget http://www.zlib.net/zlib-1.2.11.tar.gz
#解压nginx安装包
tar zxvf nginx-1.6.3.tar.gz
#解压openssl安装包
tar zxvf openssl-1.0.2o.tar.gz 
#解压pcre安装包
tar zxvf pcre-8.38.tar.gz
#解压zlib安装包 
tar zxvf zlib-1.2.11.tar.gz  
#编译nginx
 ./configure --prefix=/qiku/software/nginx --with-http_stub_status_module --with-http_ssl_module --with-ipv6 --with-http_gzip_static_module --with-http_realip_module --with-http_geoip_module --with-http_flv_module --with-zlib=../zlib-1.2.11 --with-openssl=../openssl-1.0.2o --with-pcre=../pcre-8.38 --with-pcre-jit
#安装
make && make install
#报错1
./configure: error: the GeoIP module requires the GeoIP library.
You can either do not enable the module or install the library.
#解决
yum -y install GeoIP GeoIP-devel GeoIP-data
#报错2
configure: error: You need a C++ compiler for C++ support.
#解决
yum -y install gcc-c++ 

下载解压GeoIP库,我是在/qiku/software/nginx/geoip目录下放着

wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gunzip GeoIP.dat.gz

这里我们需要定时更新,我这里写了个简单的脚本,加到crontab中定时更新

#!/bin/bash

wget -t 5 -O /tmp/GeoIP.dat.gz http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gzip -df /tmp/GeoIP.dat.gz
mv -f /tmp/Geo*.dat /qiku/software/nginx/geoip/

好了,到处环境就搭建完成了,下来我们配置测试一下,nginx配置如下,启动起来就可以通过中国和美国的服务器测试,看看是不是跳过去了

user nobody nobody;
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
error_log logs/error.log error;
pid logs/nginx.pid;
events {
 use epoll;
 worker_connections 655350;
}
http {
 include mime.types;
 default_type application/octet-stream;

log_format main '{"@timestamp":"$time_iso8601",'
 '"host":"$server_addr",'
 '"clientip":"$remote_addr",'
 '"size":$body_bytes_sent,'
 '"responsetime":$request_time,'
 '"upstreamtime":"$upstream_response_time",'
 '"upstreamhost":"$upstream_addr",'
 '"http_host":"$host",'
 '"uri":"$uri",'
 '"request_uri":"$request_uri",'
 '"query_string":"$query_string",'
 '"request_method":"$request_method",'
 '"xff":"$http_x_forwarded_for",'
 '"referer":"$http_referer",'
 '"city":"$geoip_country_code",'
 '"agent":"$http_user_agent",'
 '"status":"$status"}';
 access_log logs/access.log main;

sendfile off;
 #tcp_nopush on;
 geoip_country /qiku/software/nginx/geoip/GeoIP.dat;
# fastcgi_param GEOIP_COUNTRY_CODE $geoip_country_code;
 keepalive_timeout 300s;
 proxy_connect_timeout 300s;
 proxy_send_timeout 300s;
 proxy_read_timeout 300s;
 proxy_buffer_size 64k;
 proxy_buffers 4 32k;
 proxy_busy_buffers_size 64k;
 proxy_temp_file_write_size 64k;
 client_header_buffer_size 128k;
 large_client_header_buffers 4 128k;
 # SSL config
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 ssl_ciphers HIGH:!aNULL:!MD5;
 ssl_session_cache shared:SSL:10m;
 ssl_session_timeout 5m;
 gzip off;
 
 upstream search{
 server 10.209.5.36:5001 weight=1 max_fails=2 fail_timeout=30s;
 server 10.209.5.37:5001 weight=1 max_fails=2 fail_timeout=30s;
 }
 #dianji
 server {
 server_name www.baiked.com;
 # listen 443;
 listen 80;
 # ssl_certificate ssl/baiked.com.crt;
 # ssl_certificate_key ssl/baiked.com.key;

access_log logs/baiked.log main;
 location / {
 if ($geoip_country_code ~ "(EU|UK|FR|DE|NL|PL|CZ|EE|LU|FI|IE|LI|LT|LV|PT|SE|CH|IT|BE|RU|ES|DK|NO|RO|GR|HU|AT|GS)") {
 return 403;
 }
 client_max_body_size 100m;
 proxy_pass http://39.108.113.185;
 proxy_redirect off;
 proxy_set_header Host $host;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 }
 }

}

测试(国内,北美,德国)三地服务器配置host指到欧洲代理服务器地址,通过国内和北美测试返回正常,通过德国测试返回403,搞定

 

  • 我的微信
  • 微信扫一扫
  • weinxin
  • 微信公众号
  • 微信公众号扫一扫
  • weinxin
avatar