Nginx 指定目录屏蔽国内外IP访问网站

浏览: 667 次浏览 作者: 去年夏天 分类: Ubuntu,技术文章 发布时间: 2023-04-28 18:03

目前网站需要屏蔽一些特定的IP与特定来源的网友,禁止他们访问。例如一些外贸网站需要屏蔽国内IP,国内的屏蔽外国IP,阻止从某个特定网站过来的用户,比如从知乎的跳转链接访问站内资源链接就自动跳转到博客首页。这里写一种最简单快速的,不需要重新编译nginx的方法。


屏蔽指定IP访问

  • 屏蔽命令
    Nginx提供了两个最基本的屏蔽和允许IP的命令:deny 屏蔽、allow 允许
# 屏蔽单个IP
deny IP;
# 屏蔽所有IP
deny all;
# 屏蔽IP段
deny 123.0.0.1/16;
# 允许单个IP访问
allow IP;
# 允许全部
allow all;
# 允许IP段
allow 123.0.0.1/16;
  • 指定目录
    在 Nginx 的配置文件中,可以使用 location 块来匹配特定的 URL 路径。
    比如我们想在 /foo 开头的 URL 路径中启用屏蔽

    • 匹配所有以 /foo 开头的 URL 路径,例如 /foo/bar 和 /foo/baz/qux 等
    location /foo {
    deny 123.0.0.1/16;
    allow all;
    }
    
    
    • 如果要精确匹配 /foo,要使用如下配置
    location = /foo {
    deny 123.0.0.1/16;
    allow all;
    }
    
    
    • 当然你也可以用正则匹配目录
    location ~ ^/foo/[0-9]+$ {
    deny 123.0.0.1/16;
    allow all;
    }
    

屏蔽指定来源访问

比如我们想屏蔽abc.com和abc.net以及他们的子域名访问我们的网站

    #阻止特定网站用户访问
    if ($http_referer ~* "abc.(com|net)") {  
    return 403;  }

屏蔽指定地区访问

有时候我们想只允许某些地区的用户可以访问我们的网站。知道上边两个方式,剩下的问题就是怎么得到某个地区的所有IP段了。我们可以从ip2location中获取。

  1. 访问ip2location

    框左边选择城市,中间框选V4还是V6,右边选择规则类型,根据需要选择即可。
    图中为:屏蔽印度的IPv4
    然后点 DOWNLOAD下载即可,解压之后是一个txt 文件

  2. 删除最开始的 location / { 和最后的 } ,最后增加一行 allow all;
    将后缀名从 .txt 改为 .conf 上传到服务器上,记住放置的目录。(比如/usr/local/nginx/conf/nginx.conf/firewall.conf)

  3. 修改站点对应的 Nginx 配置文件,比如 /foo 目录只允许非印度的IP访问

location /foo {
include /usr/local/nginx/conf/nginx.conf/firewall.conf;
}

这里示例是使用location字段指定子目录 ,
如果你想全站生效可以写到sever或者http字段,比如

server
    {
    listen  80;
    listen  [::]:80;
    listen  443 ssl http2;
    listen [::]:443 ssl http2;
    include /usr/local/nginx/conf/nginx.conf/firewall.conf;
    }
  1. 保存,重新加载 Nginx 配置文件即可。
sudo nginx -s reload
8 条评论
  • xiaoqing

    2023-05-15 21:10

    大佬,你那个my love表白网页源码有吗,求一份

    1. 去年夏天

      2023-05-15 21:39

  • Simba

    2023-05-14 18:52

    特殊授权在7个工作日内处理完毕,如果你申请了,在7个工作入内没得到我的许可,也就等于你的申请被拒绝。
    有错别字,应为7个工作日

    1. 去年夏天

      2023-05-15 09:36

      哈哈,谢谢捉虫

  • meow

    2023-05-08 09:34

    你好!非常感谢能够提供音乐解锁功能,但最近403了很头疼,有什么方法可以解决吗~

    1. 去年夏天

      2023-05-08 10:34

      这个文章就是解释这个操作的,屏蔽指定国家用户访问某些地址

      1. meow

        2023-05-08 13:56

        谢谢回复!但我清除浏览数据然后把梯子关掉了也进不去,我再试试看。

        1. 去年夏天

          2023-05-08 14:05

          开梯子确定代理后,ctrl+F5强制刷新页面。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据