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. day11_雷神_udp、多进程等

    day11 1.网络编程 1.1 udp协议 client端 import json import socket server_addr = ('127.0.0.1',9090) sk = socke ...

  2. two sum --无脑法

    public class Solution { /* * @param numbers: An array of Integer * @param target: target = numbers[i ...

  3. XE下显示托盘图标(TrayIcon)

    https://www.cnblogs.com/studypanp/p/4930619.html XE下显示托盘图标(TrayIcon)   1.拖一个TrayIcon控件 2.拖一个Applicat ...

  4. Android开发 - 设置DialogFragment全屏显示

    默认的DialogFragment并不是全屏,但有些需求需要我们将对话框设置为全屏(内容全屏),Android并没有提供直接的API,通过其它不同的方法设置全屏在不同的机型上总有一些诡异的问题,经过测 ...

  5. Java 数组的创建

    与C.C++不同,Java在定义数组时并不为数组元素分配内存,因此[ ]中无需指定数组元素的个数,即数组长度. 定义一个数组有两种方式: int[] array; int array[]; 对于如上定 ...

  6. Redis 客户端命令总结

    注意:括号里是参数,具体使用的时候不需要括号和逗号,直接使用空格分隔命令以及各个参数即可. 1.对Key操作的命令 exists(key):确认一个key是否存在.存在返回1,不存在返回0. del( ...

  7. Archive required for library “xxx” cannot be read or is not a valid zip file报错解决

    在项目中导入别人的maven项目时报错:Archive required for library “xxx” cannot be read or is not a valid zip file 网上查 ...

  8. 理解Docker

    Docker Image OS分为 内核(kernel) 和 用户 空间,kernel 启动后,会挂载root文件系统提供用户空间. Docker Image 就相当于一个 root文件系统.是一个特 ...

  9. 【BJOI2019】删数 线段树

    题目大意:一个数列若能在有限次数内删空,则称这个数列可以删空,一次删除操作定义如下: 记当前数列长度为$k$,则删掉数列中所有等于$k$的数. 现在有一个长度为$n$的数列$a$,有$m$次修改操作, ...

  10. Java开发技术大揭底——让你认知自己技术上的缺陷,成为架构师

    一.分布式架构体系 分布式怎么来的.传统的电信.银行业,当业务量大了之后,普通服务器CPU/IO/网络到了100%,请求太慢怎么办?最直接的做法,升级硬件,反正也不缺钱,IBM小型机,大型机,采购了堆 ...