搜索
首页运维Nginx网站怎么通过nginx设置黑/白名单IP限制及国家城市IP访问限制

    一、黑/白名单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等。

    示例:

    如果三台服务器: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 #经度

    以上是网站怎么通过nginx设置黑/白名单IP限制及国家城市IP访问限制的详细内容。更多信息请关注PHP中文网其他相关文章!

    声明
    本文转载于:亿速云。如有侵权,请联系admin@php.cn删除
    在Nginx和Apache之间进行选择:适合您的需求在Nginx和Apache之间进行选择:适合您的需求Apr 15, 2025 am 12:04 AM

    NGINX和Apache各有优劣,适合不同场景。1.NGINX适合高并发和低资源消耗场景。2.Apache适合需要复杂配置和丰富模块的场景。通过比较它们的核心特性、性能差异和最佳实践,可以帮助你选择最适合需求的服务器软件。

    nginx怎么启动nginx怎么启动Apr 14, 2025 pm 01:06 PM

    问题:如何启动 Nginx?答案:安装 Nginx启动 Nginx验证 Nginx 是否已启动探索其他启动选项自动启动 Nginx

    怎么查看nginx是否启动怎么查看nginx是否启动Apr 14, 2025 pm 01:03 PM

    确认 Nginx 是否启动的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 检查端口 80 是否开放;3. 查看系统日志中 Nginx 启动消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

    nginx怎么关闭nginx怎么关闭Apr 14, 2025 pm 01:00 PM

    要关闭 Nginx 服务,请按以下步骤操作:确定安装类型:Red Hat/CentOS(systemctl status nginx)或 Debian/Ubuntu(service nginx status)停止服务:Red Hat/CentOS(systemctl stop nginx)或 Debian/Ubuntu(service nginx stop)禁用自动启动(可选):Red Hat/CentOS(systemctl disable nginx)或 Debian/Ubuntu(syst

    nginx在windows中怎么配置nginx在windows中怎么配置Apr 14, 2025 pm 12:57 PM

    如何在 Windows 中配置 Nginx?安装 Nginx 并创建虚拟主机配置。修改主配置文件并包含虚拟主机配置。启动或重新加载 Nginx。测试配置并查看网站。选择性启用 SSL 并配置 SSL 证书。选择性设置防火墙允许 80 和 443 端口流量。

    nginx403错误怎么解决nginx403错误怎么解决Apr 14, 2025 pm 12:54 PM

    服务器无权访问所请求的资源,导致 nginx 403 错误。解决方法包括:检查文件权限。检查 .htaccess 配置。检查 nginx 配置。配置 SELinux 权限。检查防火墙规则。排除其他原因,如浏览器问题、服务器故障或其他可能的错误。

    linux怎么启动nginxlinux怎么启动nginxApr 14, 2025 pm 12:51 PM

    在 Linux 中启动 Nginx 的步骤:检查 Nginx 是否已安装。使用 systemctl start nginx 启动 Nginx 服务。使用 systemctl enable nginx 启用在系统启动时自动启动 Nginx。使用 systemctl status nginx 验证启动是否成功。在 Web 浏览器中访问 http://localhost 查看默认欢迎页面。

    linux怎么查看nginx是否启动linux怎么查看nginx是否启动Apr 14, 2025 pm 12:48 PM

    在 Linux 中,使用以下命令检查 Nginx 是否已启动:systemctl status nginx根据命令输出进行判断:如果显示 "Active: active (running)",则 Nginx 已启动。如果显示 "Active: inactive (dead)",则 Nginx 已停止。

    See all articles

    热AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智能驱动的应用程序,用于创建逼真的裸体照片

    AI Clothes Remover

    AI Clothes Remover

    用于从照片中去除衣服的在线人工智能工具。

    Undress AI Tool

    Undress AI Tool

    免费脱衣服图片

    Clothoff.io

    Clothoff.io

    AI脱衣机

    AI Hentai Generator

    AI Hentai Generator

    免费生成ai无尽的。

    热门文章

    R.E.P.O.能量晶体解释及其做什么(黄色晶体)
    4 周前By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.最佳图形设置
    4 周前By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.如果您听不到任何人,如何修复音频
    4 周前By尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25:如何解锁Myrise中的所有内容
    1 个月前By尊渡假赌尊渡假赌尊渡假赌

    热工具

    EditPlus 中文破解版

    EditPlus 中文破解版

    体积小,语法高亮,不支持代码提示功能

    VSCode Windows 64位 下载

    VSCode Windows 64位 下载

    微软推出的免费、功能强大的一款IDE编辑器

    MinGW - 适用于 Windows 的极简 GNU

    MinGW - 适用于 Windows 的极简 GNU

    这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

    SublimeText3 Linux新版

    SublimeText3 Linux新版

    SublimeText3 Linux最新版

    DVWA

    DVWA

    Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中