0

0

网站怎么通过nginx设置黑/白名单IP限制及国家城市IP访问限制

WBOY

WBOY

发布时间:2023-06-01 17:27:30

|

3926人浏览过

|

来源于亿速云

转载

    一、黑/白名单IP限制访问配置

    nginx配置黑白名单有好几种方式,这里只介绍常用的两种方法。

    1、第一种方法:allow、deny

    deny和allow指令属于ngx_http_access_module,nginx默认加载此模块,所以可直接使用。

    这种方式,最简单,最直接。设置类似防火墙iptable,使用方法:

    直接配置文件中添加:

    #白名单设置,allow后面为可访问IP 
    location / {
         allow 123.13.123.12;
         allow 23.53.32.1/100;
         deny  all;
    }
    
    #黑名单设置,deny后面接限制的IP,为什么不加allow all? 因为这个默认是开启的 
    location / {
         deny 123.13.123.12;
    }
    
    #白名单,特定目录访问限制
    location /tree/list {
         allow 123.13.123.12;
         deny  all;
    }

    或者通过读取文件IP配置白名单

    location /{
        include /home/whitelist.conf;
        #默认位置路径为/etc/nginx/ 下,
        #如直接写include whitelist.conf,则只需要在/etc/nginx目录下创建whitelist.conf
        deny all;
    }

    在/home/目录下创建whitelist.conf,并写入需要加入白名单的IP,添加完成后查看如下:

    cat /home/whitelist.conf
    
    #白名单IP
    allow 10.1.1.10;
    allow 10.1.1.11;

    白名单设置完成,黑名单设置方法一样。

    2:第二种方法,ngx_http_geo_module

    默认情况下,一般nginx是有加该模块的,ngx_http_geo_module:官方文档,参数需设置在位置在http模块中。

    此模块可设置IP限制,也可设置国家地区限制。位置在server模块外即可。

    语法示例:

    配置文件直接添加

    geo $ip_list {
        default 0;
        #设置默认值为0
        192.168.1.0/24 1;
        10.1.0.0/16    1;
    }
    server {
        listen       8081;
        server_name  192.168.152.100;
        
        location / {
            root   /var/www/test;
    		index  index.html index.htm index.php;
    		if ( $ip_list = 0 ) {
    		#判断默认值,如果值为0,可访问,这时上面添加的IP为黑名单。
    		#白名单,将设置$ip_list = 1,这时上面添加的IP为白名单。
    		proxy_pass http://192.168.152.100:8081;
        }

    同样可通过读取文件IP配置

    geo $ip_list {
        default 0;
        #设置默认值为0
        include ip_white.conf;
    }
    server {
        listen       8081;
        server_name  192.168.152.100;
        
        location / {
            root   /var/www/test;
    		index  index.html index.htm index.php;
    		if ( $ip_list = 0 ) {
    			return 403;
    			#限制的IP返回值为403,也可以设置为503,504其他值。
    			#建议设置503,504这样返回的页面不会暴露nginx相关信息,限制的IP看到的信息只显示服务器错误,无法判断真正原因。
        }

    在/etc/nginx目录下创建ip_list.conf,添加IP完成后,查看如下:

    cat /etc/nginx/ip_list.conf
    
    192.168.152.1 1;
    192.168.150.0/24 1;

    当设置完成后,IP列表文件 ip_list.conf 将作为白名单,若请求的 IP 不在名单中,则会直接返回403页面。黑名单设置方法相同。

    3、ngx_http_geo_module 负载均衡(扩展)

    ngx_http_geo_module,模块还可以做负载均衡使用,如web集群在不同地区都有服务器,某个地区IP段,负载均衡至访问某个地区的服务器。类似的方式是在IP后面添加自定义值,这些值不仅限于数字,还可以使用字母,例如US、CN等。

    示例:

    Whimsical
    Whimsical

    Whimsical推出的AI思维导图工具

    下载

    如果三台服务器:122.11.11.11,133.11.12.22,144.11.11.33

    geo $country {
        default default;
        111.11.11.0/24   uk;
        #IP段定义值uk
        111.11.12.0/24   us;
        #IP段定义值us
        }
    upstream  uk.server {
        erver 122.11.11.11:9090;
        #定义值uk的IP直接访问此服务器
    } 
    
    upstream  us.server {
        server 133.11.12.22:9090;
        #定义值us的IP直接访问此服务器
    }
    
    upstream  default.server {
        server 144.11.11.33:9090;
        #默认的定义值default的IP直接访问此服务器
    }
     
    server {
        listen    9090;
        server_name 144.11.11.33;
    
        location / {
          root  /var/www/html/;
          index index.html index.htm;
         }
     }

    然后在

    二、国家地区IP限制访问

    一些第三方服务例如cloudflare也提供设置选项,使防火墙规则的设置更加方便。这里讲讲nginx的设置方法。

    1:安装ngx_http_geoip_module模块

    ngx_http_geoip_module:官方文档,参数需设置在位置在http模块中。

    nginx默认情况下不构建此模块,应使用 --with-http_geoip_module 配置参数启用它。

    对于ubuntu系统来说,直接安装 nginx-extras组件,包括几乎所有的模块。

    sudo apt install nginx-extras

    对于centos系统,安装模块。

    yum install nginx-module-geoip

    2、下载 IP 数据库

    此模块依赖于IP数据库,所有数据在此数据库中读取,所有还需要下载ip库(dat格式)。

    MaxMind 提供了免费的 IP 地域数据库,坏消息是MaxMind 官方已经停止支持dat格式的ip库。

    在其他地方可以找到dat格式的文件,或者老版本的,当然数据不可能最新,多少有误差。

    下载同时包括Ipv4和Ipv6的country、city版本。

    #下载国家IP库,解压并移动到nginx配置文件目录,
    sudo wget https://dl.miyuru.lk/geoip/maxmind/country/maxmind.dat.gz
    gunzip maxmind.dat.gz
    sudo mv maxmind.dat /etc/nginx/GeoCountry.dat
    
    sudo wget https://dl.miyuru.lk/geoip/maxmind/city/maxmind.dat.gz
    gunzip maxmind.dat.gz
    sudo mv maxmind.dat /etc/nginx/GeoCity.dat

    3、配置nginx

    示例:

    geoip_country /etc/nginx/GeoCountry.dat;
    geoip_city /etc/nginx/GeoCity.dat;
    
    server {
        listen  80;
        server_name 144.11.11.33;
    
        location / {
          root  /var/www/html/;
          index index.html index.htm;
          if ($geoip_country_code = CN) {
      			return 403;
     		#中国地区,拒绝访问。返回403页面
    		}
      	}
     }

    这里,地区国家基础设置就完成了。

    Geoip其他参数:

    国家相关参数:$geoip_country_code #两位字符的英文国家码。如:CN, US$geoip_country_code3 #三位字符的英文国家码。如:CHN, USA$geoip_country_name #国家英文全称。如:China, United States城市相关参数:$geoip_city_country_code #也是两位字符的英文国家码。$geoip_city_country_code3 #上同$geoip_city_country_name #上同.$geoip_region #这个经测试是两位数的数字,如杭州是02, 上海是 23。但是没有搜到相关资料,希望知道的朋友留言告之。$geoip_city #城市的英文名称。如:Hangzhou$geoip_postal_code #城市的邮政编码。经测试,国内这字段为空$geoip_city_continent_code #不知什么用途,国内好像都是AS$geoip_latitude #纬度$geoip_longitude #经度

    相关专题

    更多
    Java 桌面应用开发(JavaFX 实战)
    Java 桌面应用开发(JavaFX 实战)

    本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

    37

    2026.01.14

    php与html混编教程大全
    php与html混编教程大全

    本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

    19

    2026.01.13

    PHP 高性能
    PHP 高性能

    本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

    37

    2026.01.13

    MySQL数据库报错常见问题及解决方法大全
    MySQL数据库报错常见问题及解决方法大全

    本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

    19

    2026.01.13

    PHP 文件上传
    PHP 文件上传

    本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

    16

    2026.01.13

    PHP缓存策略教程大全
    PHP缓存策略教程大全

    本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

    6

    2026.01.13

    jQuery 正则表达式相关教程
    jQuery 正则表达式相关教程

    本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

    3

    2026.01.13

    交互式图表和动态图表教程汇总
    交互式图表和动态图表教程汇总

    本专题整合了交互式图表和动态图表的相关内容,阅读专题下面的文章了解更多详细内容。

    45

    2026.01.13

    nginx配置文件详细教程
    nginx配置文件详细教程

    本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

    9

    2026.01.13

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    进程与SOCKET
    进程与SOCKET

    共6课时 | 0.3万人学习

    nginx浅谈
    nginx浅谈

    共15课时 | 0.8万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号