通过nginx GeoIP模块 限制某些国家地区访问网站

简介:

ip001
通过nginx GeoIP模块来限制某些国家或者具体地区访问网站,在国内一般用于外贸站,因为很多外贸公司走货的价格关系,是不希望国内用户看见的。
除了某些CDN或者付费接口之外,也可以通过本身的服务器来操作,或者浏览器判断等。
我之前就是用浏览器来判断的,如果浏览器的语言是中文ZH,那么网站就跳转到不能访问的地址,这算是一个很粗暴的方法,但是有时候可能又需要用户稍微变通一下,让国内用户可以看见。
那么这个判断方法就不是很适合了,万一遇到某些人不懂浏览器的,不会设置语言呢…就麻烦了。
所以可以采用ip判断的方法,现在用得比较多的应该是MaxMind的免费ip库,国内大企业付费应该用ipip.net的比较多。
我就只是判断下国家,所以就用MaxMind的来做判断。
另外这个方法,不适合用于套CDN的网站,因为CDN是通过cdn的ip在访问,这个获取的是cdn的ip。
如果是用于监听CDN网站,就需要把cdnip被过滤了。
实在是嫌弃麻烦,就直接用一些dns来判断。

服务器后端属于nginx,比较方便。

一、编译–with-http_geoip_module模块

先看nginx有没有编译geoip模块,如果有就直接修改就行,没有就得先安装。

nginx -V #查看目前的nginx相关配置
1:下载安装Geoip模块

yum -y install geoip-devel  #CentOS系统
 
这会自动安装到/usr/share/GeoIP文件夹下,这个安装的并不一定是最新的,我们就更新下
 
mv /usr/share/GeoIP/GeoIP.dat /usr/share/GeoIP/GeoIP.dat_bak   #备份下
 
cd /usr/share/GeoIP  #进文件夹
 
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz  #下载最新数据库
 
gunzip GeoIP.dat.gz  #解压出来

2:编译geoip模块

cd /root/oneinstack/src/nginx-1.12.1  #进入当前nginx文件夹  根据自己目录来
 
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_v2_module --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module --with-http_flv_module --with-http_mp4_module --with-openssl=../openssl-1.0.2l --with-pcre=../pcre-8.41 --with-pcre-jit --with-ld-opt=-ljemalloc --add-module=../lua-nginx-module --add-module=../ngx_devel_kit --with-http_geoip_module  #添加编译模块
 
就是把--with-http_geoip_module加到原来的编译上去
 
make && make install  #执行编译

走完之后,用nginx -V看看里面有没有geoip的模块,如果有就是成功了。

二、修改nginx的配置文件

1:修改nginx.conf的http区域,在里面加上这段

geoip_country /usr/share/GeoIP/GeoIP.dat;   #GeoIP所在目录
map $geoip_country_code $allowed_country {  #变量判断
default yes;   #允许
CN no;  #区域不允许,这个CN就是代表中国,如果是多个地区,就是CN下面加就行
}

还有几种写法:

geoip_country GeoIP/GeoIP.dat;
 
geoip_city GeoIP/GeoLiteCity.dat;

2:修改nginx.conf的server区域

location / {
root /data/wwwroot/test;  #网站目录
if ($allowed_country = no) {  #这里的no,就是上面html里面CN on,就是判断no区域
 
#if ($allowed_country = no) 也可以用if ($geoip_country_code = CN) 来代替,如果是多个区域就在CN后面几个|然后加区域代码
return 403;   #返回403提示
return http://域名; #跳转到其他人网站去 ,return也可以用rewrite,具体看自己网站的配置文件怎么设置的
root /data/wwwroot/test1;  #跳转到自己服务器的另外一个文件夹下面去
}
}

最后nginx -t看看有没有什么语法错误,没有就重启下nginx打开网站看看,有就自己找原因吧。

nginx Geoip的写法有很多种,多谷歌看看。

附:

最后也说下浏览器语言判断的,就是下面这段就行了,用javascript加在自己网站的首页。

if (navigator.language)
var language = navigator.language;
else
var language = navigator.browserLanguage;
if(language.indexOf('zh') > -1)document.location.href = 'cn'; #判断浏览器语言,后面的cn是网站下的耳机目录,这个随便自己修改,改成跳转网址都行
目录
相关文章
|
7天前
|
负载均衡 Ubuntu 应用服务中间件
nginx修改网站默认根目录及发布(linux、centos、ubuntu)openEuler软件源repo站点
通过合理配置 Nginx,我们可以高效地管理和发布软件源,为用户提供稳定可靠的服务。
44 13
|
1天前
|
应用服务中间件 Linux 网络安全
nginx安装部署ssl证书,同时支持http与https方式访问
为了使HTTP服务支持HTTPS访问,需生成并安装SSL证书,并确保Nginx支持SSL模块。首先,在`/usr/local/nginx`目录下生成RSA密钥、证书申请文件及自签名证书。接着,确认Nginx已安装SSL模块,若未安装则重新编译Nginx加入该模块。最后,编辑`nginx.conf`配置文件,启用并配置HTTPS服务器部分,指定证书路径和监听端口(如20000),保存后重启Nginx完成部署。
72 6
|
24天前
|
监控 应用服务中间件 定位技术
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
|
1月前
|
安全 应用服务中间件 网络安全
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
61 3
|
1月前
|
安全 应用服务中间件 网络安全
配置Nginx反向代理实现SSL加密访问的步骤是什么?
我们可以成功地配置 Nginx 反向代理实现 SSL 加密访问,为用户提供更安全、可靠的网络服务。同时,在实际应用中,还需要根据具体情况进行进一步的优化和调整,以满足不同的需求。SSL 加密是网络安全的重要保障,合理配置和维护是确保系统安全稳定运行的关键。
120 3
|
1月前
|
Web App开发 算法 应用服务中间件
nginx开启局域网https访问
【10月更文挑战第22天】为了调试WebRTC功能,需要在局域网内搭建HTTPS协议。具体步骤包括:在已部署Nginx和安装OpenSSL的环境中生成私钥、证书签名请求和自签名证书;将生成的文件放置到Nginx的证书目录并修改Nginx配置文件,最后重启Nginx服务。注意,自签名证书不受第三方机构认可,如需正式使用,需向CA申请签名。
|
2月前
|
应用服务中间件 Shell PHP
windows系统配置nginx环境运行pbootcms访问首页直接404的问题
windows系统配置nginx环境运行pbootcms访问首页直接404的问题
|
2月前
|
Docker 容器
docker nginx-proxy 添加自定义https网站
docker nginx-proxy 添加自定义https网站
46 4
|
2月前
|
前端开发 JavaScript 应用服务中间件
使用nginx部署网站
使用nginx部署网站
|
2月前
|
应用服务中间件 nginx C++
nginx的cgi模块
nginx的cgi模块
52 0