返回文章列表
帮助中心

独立站怎么屏蔽访问?

小智
2025-11-06
1天前
独立站怎么屏蔽访问?

今天讲讲独立站如何屏蔽访问,至于为啥要屏蔽访问,每个人都有每个人的原因,所以我只讲如何屏蔽。

一、CDN端限制

CDN 有很多家服务商,大多数都是提供图片等静态文件的加速。当然也可以用来隐藏服务器的IP。但今天我讲利用CDN的WAF(网页防火墙)来屏蔽访问,而屏蔽功能做得最好的,我觉得是Cloudflare,下文简称CF 。

1、登录CF 。把你的域名加入CF,一路提交后CF 会给你两个NS服务器名称。然后在你注册域名的服务商那里修改,把名称服务器(NS)设置为CF 给你的。

2、当你修改了域名注册商的名称服务器后,在CF 点检查,当名称服务器更新后,就会出现 CF 正在保护你的站点。

3、这个时候可以用CF 的DNS 解析了。A记录一般解析名称是@,后面则填入服务器ip,把云朵那个图标点一下,这样就可以隐藏服务器ip了。别人Ping你的域名,看不到的ip就不是你的服务器ip。

当然除了CDN可以隐藏ip,还可以用反向代理,特别是某些域名被CF拒绝了。这里不详细讲方向代理。如果有兴趣,我以后单独开一篇,如何使用反向代理。

我一般还喜欢加一个 www 的名称,这个因人而异,看你自己。

4、这样就使用CF的DNS系统了。 再讲讲如何屏蔽访问。我们打开左边菜单的安全--安全规则。英文版应该是叫WAF 。 版本不一样,界面可能有差异,但是选择WAF 就对了。

5、点创建规则,创建自定义规则。

名称写一个你能看懂的,比如 限制****  。

第一个ASN ,ASN 简单说就是一个网络编号,对应的是一个大型网络,比如AS32934, 就是Facebook的。 怎么查ASN 呢。用 ipinfo.io/查询的ip ,就能看到这个ip所属的网络和ASN,公司等信息。


我在这里就屏蔽了来自于这些AS的访问。这些访问大多数来自于这些公司网络的爬虫进行的恶意访问。有的AS 是属于某个网络服务商的。比如Hetzner , alicloud 等等.....


国家和地区,这个就很简单,你想限制或者允许哪个国家,就填写哪个国家。

引用方,英文就是Reffer ,用于判断来路,可以限制来自于某个网站的访问。

用户代理,User-Agent, 对于访问者的UA ,可以通过服务器网站的访问日志里去查询。如果你发现有异常的访问,最好是先看日志文件,然后再来限制。

可以限制的类型很多,每个类型都有它对应的意义和方法。 可能我没提到,你可以自己摸索下。

6、速率限制规则

有的时候我们被恶意流量访问,但是恶意流量又找不到规则,那这个时候我们可以设置通过一些具体的URL 限制速度。


比如Url 路径设置包含 product-  的,这样我们就可以对产品页面 /product/ 和 产品分类页/product-category , 产品标签页/product-tag 等等页面的访问进行速度限制。 这也是一种反爬虫的方式,效果非常好。

7、限制IP段访问

可以设置允许或者阻止的IP段,建议设置IP段,而不是某个ip 。

8、CF 的WAF 功能特别强,不仅可以通过某个维度去设置,在自定义规则里,还可以使用AND和OR 的逻辑去进行全面的设置。比如前面我限制ASN的时候就用了多个OR ,只要属于其中一个,就进行限制。

二、网页端屏蔽

因为一些特别的原因,有的站可能没用CF ,这种情况我们也可以在网页端进行屏蔽。

1、网页端的屏蔽,主要是针对浏览器。比如浏览器语言,浏览器版本,浏览访问的来路,浏览器Cookies 等等..... 当然我在这里说的网页端,说的是WP ,Opencart这种搭在自己可控制的服务器上的站,而不是Shopify 那种Saas站。可以这样理解,要想网页端进行控制,必须有修改网页Web程序的权限。

2、因为可以限制的方法太多,在文章里我就举例如何通过判断访问来路Reffer进行限制,讲讲这段小程序的逻辑。

以下这段代码是写在WP 里面, 作用就是对网站的部分页面进行限制。

1、允许爬虫访问网站

2、如果是从程序列表里的搜索引擎点击访问网站,允许访问,并写入Cookies,时效24小时。

3、如果有Cookies ,允许访问

4、如果不满足以上的条件,禁止访问,比如直接打开网址,直接打开商品页面,直接打开商品目录则不允许访问。

  • add_action('init', function() {    $uri = $_SERVER['REQUEST_URI'];    // 只针对以下路径进行检查    $is_target_page = (        $uri === '/' ||        strpos($uri, '/product/') !== false ||        strpos($uri, '/product-category/') !== false ||        strpos($uri, '/product-tag/') !== false    );      if (!$is_target_page) {        return;    }    // 允许的搜索引擎来源    $allowed_referrers = ['google.', 'bing.', 'yahoo.', 'duckduckgo.', 'yandex.', 'brave.'];    // 允许的爬虫 UA 关键词$allowed_bots = [    'google',     // 放宽匹配 googlebot / google-inspectiontool / google-speakr 等    'bing',    'yahoo',    'duckduck',    'yandex',    'aol',     'brave' ];    $user_agent = strtolower($_SERVER['HTTP_USER_AGENT'] ?? '');    $referer = strtolower($_SERVER['HTTP_REFERER'] ?? '');    // 放行爬虫    foreach ($allowed_bots as $bot) {        if (strpos($user_agent, $bot) !== false) {            return;        }    }    //判断是否搜索引擎来源    $has_valid_referrer = false;    foreach ($allowed_referrers as $domain) {        if (strpos($referer, $domain) !== false) {            $has_valid_referrer = true;            break;        }    }    // 如果从搜索引擎来,设置 cookie    if ($has_valid_referrer) {        setcookie('from_search_engine', '1', time() + 86400, '/', '', false, true);        return;    }    // 如果已有 cookie,放行    if (isset($_COOKIE['from_search_engine']) && $_COOKIE['from_search_engine'] === '1') {        return;    }    // 否则拒绝访问    status_header(500);    exit;});

    3、网页程序限制的方法还有很多,也可以组合使用。比如浏览器的语言,浏览器的Cookies ....都是非常好用的。

    三、Web服务器程序限制访问

    在这里的Web服务器程序主要是讲Nginx和Apache,以Nginx为例。

    1、限制ip访问

    location / {    allow 192.168.1.100;   # 允许访问的IP    allow 203.0.113.45;    deny all;               # 其他禁止}
    2、限制国家和地区,使用 GeoIP2 模块和GeoLite2-Country 数据库
    
    geoip2 /etc/nginx/geoip/GeoLite2-Country.mmdb {    $geoip2_data_country_code country iso_code;}map $geoip2_data_country_code $allowed_country {    default no;    US yes;  # 只允许美国访问    CA yes;  # 允许加拿大访问}server {    if ($allowed_country = no) {        return 403;    }}
    3、限制访问频率
    
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;server {    location / {        limit_req zone=one burst=5 nodelay;    }}
    4、限制访问来路 Reffer
    
    location / {    valid_referers none blocked yoursite.com *.yoursite.com;    if ($invalid_referer) {        return 403;    }}
    
    Nginx也是非常强大,可以设置的也很多。但值得注意的是,Nginx的设置也只适合于你自己的服务器。
    
    以上三种屏蔽访问,我更喜欢CF和Web程序上的设置,因为CF是最前端,功能也很强大。Web程序PHP虽然属于后端,但编码比Nginx设置更灵活。


    本文内容仅供参考,不构成任何专业建议。使用本文提供的信息时,请自行判断并承担相应风险。

    分享文章
    合作伙伴
    🚀Cloudflare
    Fastly
    🌐Akamai
    ☁️AWS
    🔷Azure
    🟢Uptime
    📊Datadog
    🔍Pingdom

    本站所有广告均是第三方投放,详情请查询本站用户协议