Nginx拦截指定国家的IP

一、下载GeoIP数据库

wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP.tar.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz

二、安装GeoIP

tar -xzvf GeoIP.tar.gz
cd GeoIP
./configure
make && make install

三、解压GeoLiteCity.dat.gz和GeoIP.dat.gz

gunzip GeoIP.dat.gz
gunzip GeoLiteCity.dat.gz

四、将上面两个文件夹移动到自定义目录,我这儿是/etc/nginx/geoip

mv GeoIP.dat /opt/nginx/geoip/
mv GeoLiteCity.dat /opt/nginx/geoip/

五、修改nginx的配置文件nginx.conf

5.1在http模块加入GeoIP库的路径(注意要换成你自己的路径)

geoip_country  /etc/nginx/geoip/GeoIP.dat;
geoip_city /etc/nginx/geoip/GeoLiteCity.dat;

5.2在server模块拦截指定国家IP(这里以中国CN为例,其他国家的代码可以自己问问度娘或者谷歌)

if ($geoip_country_code = CN) {
return ;
}

这里返回403在页面上来看就是nginx的403默认页面

如果要跳转到自定义页面,第一步再定义一个server模块用于访问自定义页面

server {
listen ; #可以自定义端口(注意不要被占用了)
server_name your_server_name; #这里填写你的ip或域名
root /usr/local/nginx/html/; # 存放自定义页面的根目录
index index.html; #自定义页面
}

第二步将“return 403”修改为重定向

if ($geoip_country_code = CN) {
rewrite ^/(.*) http://your_server_name:81/ break;
}
your_server_name就是第一步中定义的server模块中的ip或域名,端口也要加上

ps:我看网上说可以自定义403页面然后直接“return 403”就可以跳转到自定义页面了,

我试过好像不行,在if语句里面无法直接return到自定义页面,

但是在if块外面是可以自定义403页面的。

有没有大神有更简单的方法跳转到自定义页面,欢迎评论O(∩_∩)O哈哈~

Nginx拦截指定国家的IP的更多相关文章

  1. nginx屏蔽某段IP、某个国家的IP

    nginx中可通过写入配置文件的方法来达到一定的过滤IP作用,可使用deny来写. deny的使用方法可用于前端服务器无防护设备的时候过滤一些异常IP,过滤的client ip会被禁止再次访问,起到一 ...

  2. nginx中针对目录进行IP限制

    一个不错的nginx中针对目录进行IP限制 ,这里我以phpmyadmin目录只能让内网IP访问,而外网不能访问的配置方法,有需要的同学可参考. nginx phpmyadmin 针对内网ip用户开放 ...

  3. nginx利用limit模块设置IP并发防CC攻击

    nginx利用limit模块设置IP并发防CC攻击 分类: 系统2013-01-21 09:02 759人阅读 评论(0) 收藏 举报 来源:http://blog.xencdn.net/nginx- ...

  4. Nginx的配置文件简介及在Nginx中配置基于不同ip的虚拟主机

    Nginx的配置文件简介及在Nginx中配置基于不同ip的虚拟主机: #user nobody; worker_processes 1; #error_log logs/error.log; #err ...

  5. 常用的7个.htaccess代码组织某个国家的IP访问

    htAccess 文件(Hypertext Access file)是Apache Web服务器的一个非常强大的配置文件,对于这个文件,Apache有一堆参数可以让你配置出几乎随心所欲的功能. 使用. ...

  6. 阿里云SLB后Nginx、Tomcat获取真实IP

    一.SLB后Nginx如何获取真实IP 前提:nginx作为slb获取真实ip是使用 http_realip_module,默认一键安装包安装的nginx没有安装这个模块需要重新重新编译nginx并加 ...

  7. Spring3系列10- Spring AOP——Pointcut,Advisor拦截指定方法

    Spring3系列10- Spring AOP——Pointcut,Advisor 上一篇的Spring AOP Advice例子中,Class(CustomerService)中的全部method都 ...

  8. 指定 ubuntu server ip

    指定 ubuntu server ip,一共就两步. ■编辑配置文件sudo vi /etc/network/interfaces ■重启网络配置sudo /etc/init.d/networking ...

  9. Nginx ACCESS阶段 如何限制IP访问

    192.168.1.0/24(最大32位的子网掩码) 每个ip是8位 那么 24/8 = 3 也就是前三个二进制 是 11111111 11111111 11111111 是指子网掩码的位数.写的是多 ...

随机推荐

  1. AdminLTE用django部署

    前言 最近从网上看到AdminLTE这个web前端的主题挺好的,我平时用python就是写一些后台,准备以后就用这个框架了,这里就是把这个用django初始化一下这个项目. 基础环境介绍 Python ...

  2. JavaScript笔记基础版

    1.JavaScript数组: 创建数组  var cars = new Array(); 数组的初始化: 1.1 cars[0]="Saab"; cars[1]="Vo ...

  3. RunTime之类与对象

    我们知道,Objective-C是一门动态语言,它将很多静态语言在编译时期做的事放到了运行时来处理.用C++编写的程序通过编译器直接把函数地址硬编码进入可执行文件:而Objective-C无法通过编译 ...

  4. 接之前的文章,VS2017中使用Spring.NET配置以及使用方法(framework4.6.1超详细)

    众所周知,Spring在java中是很常见的框架,Spring.Net虽然体积比较大,但是功能相对齐全,本文介绍在VS2017 .Net FrameWork 4.6.1环境下,如何快速使用Spring ...

  5. 【BZOJ3676】 [Apio2014]回文串(SAM,manacher)

    传送门 BZOJ 洛谷 Solution 考虑我们每找到一个回文串就更新一次答案,跑个SAM,这样子复杂度是爆炸的. 接下来的就是优化: 我们可以倍增跳直到跳不了,最后的siz就是出现次数. 没了?没 ...

  6. Codeforces Round #553 (Div. 2) C. Problem for Nazar 数学

    题意:从奇数列 1 3 5 7 9 ....  偶数列2 4 6 8 10...分别轮流取 1 2 4 ....2^n 个数构成新数列 求新数列的区间和 (就一次询问) 思路:首先单次区间和就是一个简 ...

  7. workman的学习总结

    我们知道php主要是用来做web应用的,而且平时使用的都是都是和其他的web服务器来结合使用,比如和apache,nginx和apache的时候,是作为apache的一个动态模块来加载,和nginx的 ...

  8. 3.html基础标签:表格

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. Oracle 的分页查询 SQL 语句

    Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. 分页查询格式: SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM T ...

  10. 关于height、offsetheight、clientheight、scrollheight、innerheight、outerheight的区别一览

    平时,不管在pc端页面还是移动端页面,因为我们一般很少会设置某个块的的高度,但是呢,我有时候有需要取到这些高度以便于我们方便进行判断和下一步的编写.一般这个时候我都是直接的获取一个块的高度.heigh ...