每天都有数百个机器人攻击您的网站:有些窃取价格和内容,有些通过请求使服务器超载,还有一些寻找漏洞。如果您在Wildberries或Ozon上拥有互联网商店,进行Facebook Ads广告活动的着陆页,或管理客户的网站——这个问题与您直接相关。反向代理(reverse proxy)是可以在没有深厚技术知识的情况下设置的第一道防线。
什么是反向代理,它与普通代理有什么不同
大多数人将代理视为更改IP地址的工具:您连接到代理服务器,网站看到的是它的地址而不是您的。这被称为正向代理(forward proxy)——它保护用户。
反向代理(reverse proxy)则在另一侧工作。它位于您的服务器前面,接收所有传入请求。访客认为他们直接与您的网站进行交互——但实际上,他们首先到达代理服务器,代理服务器检查请求,过滤可疑活动,然后才将合法流量转发到您的真实服务器。
简单的类比:
想象一下,您的网站是一个仓库。正向代理是您的快递员,匿名地从供应商那里取货。反向代理是仓库门口的保安:他检查每一个想要进入的人,放行客户,并在抢劫者到达货物之前就将他们拦下。
与普通代理的关键区别在于您的真实服务器IP地址保持隐藏。攻击者和机器人不知道您的网站物理位置——他们只看到反向代理的地址。这本身就切断了相当一部分攻击。
对于拥有数十个着陆页的互联网商店、营销人员和套利者来说,这一点至关重要:竞争对手无法找到您的真实托管并直接攻击它,从而绕过保护。
为什么机器人和扫描器对您的业务是危险的
许多网站所有者低估了机器人的威胁,认为这只是“技术问题”。实际上,这直接导致了商业损失。让我们分析一下我们的读者所面临的具体场景。
竞争对手的价格抓取
如果您在市场上销售或拥有自己的互联网商店,竞争对手可以启动一个抓取程序,每15-30分钟抓取您的价格,并自动将自己的价格设置为低于1-2%。您失去了销售,却不知道原因。抓取机器人也会给服务器带来负担:每分钟数百个请求会使网站对真实买家变得缓慢,这直接影响转化率。
点击欺诈(click fraud)
从事Facebook Ads和Google Ads的套利者和营销人员经常面临点击量的虚增。点击机器人点击您的广告,消耗预算而没有任何转化。研究数据显示,在某些细分市场中,20-30%的广告流量是由机器人生成的。反向代理通过正确的规则帮助识别和阻止这些来源。
漏洞扫描器
像Shodan、Masscan这样的自动扫描器和数百种不太知名的工具不断遍历整个互联网,寻找未保护的网站。它们检查过时的CMS版本、开放的端口、默认密码。如果您的网站使用WordPress或任何其他流行平台——它肯定已经在他们的数据库中。没有保护,这只是时间问题,漏洞就会被发现。
DDoS攻击和服务器超载
竞争对手或只是恶意者可能会组织一次攻击,在最不合适的时刻使您的网站瘫痪——例如,在促销期间或积极的广告活动期间。即使是几千个请求每秒的小型DDoS也可能“摧毁”廉价的托管服务。
真实统计数据:
根据Imperva的数据,超过47%的互联网流量是由机器人生成的。其中大约30%是恶意机器人。如果您的网站每天有1000个访客,大约300个是自动脚本,它们给服务器带来负担并扭曲分析数据。
反向代理如何保护网站:工作机制
反向代理在多个层面上保护网站。理解这些层面将帮助您正确设置系统,不遗漏重要步骤。
级别1——隐藏真实IP
一旦您通过反向代理引导流量,您的真实服务器IP地址就不再是公开的。机器人和攻击者无法直接访问服务器——他们会碰到代理。这对于防止DDoS攻击尤其重要:即使攻击者知道您网站的域名,他们也无法绕过保护攻击服务器。
级别2——请求分析和过滤
每个传入请求都根据多个参数进行检查:User-Agent(哪个浏览器/机器人发出请求)、来自同一IP的请求频率、地理位置、行为模式。机器人通常请求得太快,使用非标准的User-Agent字符串,或者来自已知的数据中心IP地址。反向代理能够追踪并阻止这一切。
级别3——速率限制(Rate limiting)
真实的人无法每分钟浏览500个网站页面。反向代理允许设置限制:例如,每个IP每分钟不超过60个请求。如果有人超过限制——将会暂时被阻止或进行CAPTCHA验证。这有效地阻止了大多数抓取器和扫描器,而不会影响普通访客。
级别4——缓存和减轻负载
反向代理缓存静态内容(图像、CSS、JavaScript),并直接提供这些内容,而不请求您的服务器。因此,即使机器人突破了过滤器,他们也会获得缓存的页面——对真实服务器的负载最小化。此外,这加快了真实访客的网站速度,这对SEO和转化率都有积极影响。
级别5——SSL/TLS终止
反向代理负责加密流量。您的服务器运行得更快,因为不需要在每个请求上消耗资源进行加密。访客看到的是安全的HTTPS连接——这对信任和Google排名都很重要。
解决方案概述:Cloudflare、Nginx、Caddy——选择哪个
有几种流行的解决方案可用于组织反向代理。选择取决于您的技术水平、预算和任务规模。
| 解决方案 | 复杂性 | 成本 | 适合谁 | 防止机器人 |
|---|---|---|---|---|
| Cloudflare | 低 | 免费 / 从$20/月起 | 所有人,尤其是新手 | ⭐⭐⭐⭐⭐ |
| Nginx | 中等 | 免费(需要服务器) | 技术用户 | ⭐⭐⭐⭐ |
| Caddy | 低-中 | 免费(需要服务器) | 开发者、初创公司 | ⭐⭐⭐ |
| AWS CloudFront | 高 | 按使用收费 | 企业级 | ⭐⭐⭐⭐⭐ |
| HAProxy | 高 | 免费(需要服务器) | 高负载项目 | ⭐⭐⭐⭐ |
对于大多数网站所有者、营销人员和套利者来说,不想处理服务器设置的,Cloudflare是最佳选择。免费套餐覆盖了90%的机器人和扫描器保护任务。我们将从这里开始逐步指南。
将Cloudflare设置为反向代理:逐步指南
Cloudflare是一个云服务,通过简单更改DNS服务器成为您网站的反向代理。无需编程,无需访问服务器——只需在浏览器中进行设置。
步骤1——注册并添加网站
访问cloudflare.com并创建一个帐户。登录后,点击"Add a Site"按钮,输入您网站的域名(例如,myshop.ru)。选择免费套餐Free——开始时这已经足够了。
Cloudflare会自动扫描您的DNS记录并显示列表。检查所有记录是否到位(通常这是与服务器的A记录和邮件的MX记录)。点击“继续”。
步骤2——在域名注册商处更改DNS服务器
Cloudflare会给您两个nameserver地址——类似于alex.ns.cloudflare.com和diana.ns.cloudflare.com。登录到您的域名注册商的控制面板(如RU-CENTER、Reg.ru、Namecheap等),并将当前的nameserver替换为这两个地址。
DNS更新需要15分钟到48小时。更新完成后,所有流量将开始通过Cloudflare的服务器——反向代理将自动启动。
步骤3——在必要时启用“Under Attack”模式
在Cloudflare面板中,转到Security → Overview部分。在这里,您可以看到保护级别(Security Level)。对于大多数网站,"Medium"级别是合适的。如果网站正在遭受攻击——暂时切换到“Under Attack Mode”:所有访客将通过JS验证,通常机器人无法通过。
步骤4——设置Bot Fight Mode
转到Security → Bots。启用"Bot Fight Mode"开关——这是免费的基本自动机器人保护。Cloudflare会自动识别并阻止来自已知恶意机器人的流量,利用数十亿请求的数据库。
在付费套餐(Pro及以上)中,提供Super Bot Fight Mode,具有更详细的设置:可以单独设置搜索引擎机器人(Googlebot、Yandexbot需要放行!)、经过验证的机器人(监控正常运行时间)和可疑的自动请求的行为。
步骤5——创建防火墙规则(Firewall Rules)
转到Security → WAF → Firewall Rules并根据您的任务创建规则。以下是一些值得立即添加的规则示例:
规则示例1——阻止空的User-Agent:
条件:http.user_agent eq "" → 动作:Block。真实的浏览器总是会传递User-Agent。空的User-Agent几乎总是机器人。
规则示例2——阻止已知的扫描器:
条件:http.user_agent contains "sqlmap" or http.user_agent contains "nikto" or http.user_agent contains "nmap" → 动作:Block。这是寻找漏洞的工具。
规则示例3——地理封锁(如果需要):
条件:ip.geoip.country in {"CN" "KP" "IR"} → 动作:Challenge (CAPTCHA)。如果您的业务只在俄罗斯运营——可以阻止来自大多数攻击的国家。
步骤6——设置速率限制
在Security → WAF → Rate limiting rules部分创建请求速率限制规则。例如:每个IP地址每分钟不超过100个请求。如果超过限制——显示CAPTCHA或暂时阻止。这可以阻止大多数试图快速抓取您网站所有页面的抓取器。
Nginx反向代理设置:基本配置
如果您有自己的VPS服务器(例如,在Timeweb、Selectel或DigitalOcean上),您可以将Nginx设置为反向代理。这提供了更多控制和灵活性,尽管需要基本的命令行操作技能。
典型的架构:您有一个主要的应用程序服务器(例如,8080端口上的互联网商店),以及一个单独的服务器或同一服务器上的Nginx(在80/443端口上),它接收所有流量并将其转发到应用程序。
Nginx作为反向代理的基本配置如下:
server {
listen 80;
server_name mysite.ru www.mysite.ru;
# 重定向到HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name mysite.ru www.mysite.ru;
ssl_certificate /etc/letsencrypt/live/mysite.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mysite.ru/privkey.pem;
# 阻止空的User-Agent(没有UA的机器人)
if ($http_user_agent = "") {
return 403;
}
# 根据User-Agent阻止已知扫描器
if ($http_user_agent ~* (sqlmap|nikto|nmap|masscan|zgrab|python-requests)) {
return 403;
}
# 速率限制——应用限制区域
limit_req zone=one burst=20 nodelay;
# 将请求转发到真实服务器
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 隐藏真实服务器的信息
proxy_hide_header X-Powered-By;
proxy_hide_header Server;
}
}
# 定义速率限制区域(添加到http块)
# limit_req_zone $binary_remote_addr zone=one:10m rate=60r/m;
请注意指令proxy_hide_header——它隐藏了揭示您真实服务器和CMS信息的头部。这使得漏洞扫描器的工作变得更加困难:他们不知道自己在寻找什么。
limit_req_zone区域将每个IP地址限制为每分钟60个请求。参数burst=20允许短暂的高峰(真实用户可能会快速打开几个页面),但持续的高负载会被阻止。
对套利者和营销人员的重要提示:
如果您使用住宅代理检查您的着陆页在不同地区的外观——确保您的代理不会被阻止。将您的代理服务器的IP地址添加到Cloudflare或Nginx的白名单中。
阻止机器人和扫描器的规则:检查清单
在基本设置反向代理后,使用此检查清单确保保护措施全面。每个项目都是一个需要关闭的攻击向量。
✅ 基本保护(所有人必备)
- 在Cloudflare中启用了Bot Fight Mode(或其他解决方案中的类似功能)
- 设置了速率限制:每个IP每分钟不超过60-100个请求
- 阻止了空的User-Agent请求
- 阻止了已知的扫描器:sqlmap、nikto、nmap、masscan
- 隐藏了Server和X-Powered-By头部(不显示服务器和CMS的版本)
- 设置了HTTPS,HTTP自动重定向到HTTPS
- 真实服务器的IP未在公共数据库中曝光(Shodan、Censys)
✅ 高级保护(针对频繁遭受攻击的网站)
- 设置了蜜罐——隐藏页面,仅供机器人访问(真实用户不会访问)。访问蜜罐的IP会自动被阻止
- 启用了浏览器完整性检查(Browser Integrity Check在Cloudflare中)
- 为可疑流量设置了CAPTCHA(并非所有流量——仅针对可疑流量)
- 对不期望合法流量的国家进行地理封锁
- 监控日志:在403/429错误激增时设置警报
- 阻止大型云服务提供商(AWS、Azure、GCP)的IP范围——大多数机器人来自云端
- 设置了robots.txt以禁止激进的机器人
✅ 特定页面的保护
- 登录页面(/admin、/wp-admin、/login)——严格的速率限制(每分钟5-10次尝试)和双因素认证
- API端点——通过API密钥或令牌强制授权
- 价格页面——对频繁请求进行额外检查(防止抓取)
- 注册/申请表单——CAPTCHA或隐形蜜罐陷阱以防止机器人
不要阻止有用的机器人!
Googlebot和Yandexbot必须放行——它们会索引您的网站。在Cloudflare中,它们会自动被归类为“Verified Bots”,在正确的设置下不会被阻止。请在Security → Bots → Bot Analytics部分检查这一点。
监控代理:如何检查网站的保护
在设置反向代理后,重要的是确保保护措施正常工作,并且不会阻止真实用户。在这里,普通代理派上用场——您自己成为“外部用户”,检查网站的行为。
为什么营销人员和套利者需要通过代理检查他们的网站
想象一下这样的情况:您设置了机器人保护,启用了地理封锁,突然发现转化率下降。您可能不小心阻止了来自特定地区或设备的真实用户。可以通过从不同国家和不同类型的连接通过代理访问网站来检查这一点。
对于这样的任务,移动代理非常合适——它们模拟通过运营商的真实移动设备连接。如果您的阻止规则正确地放行移动流量,那么普通的智能手机用户就不会受到保护的影响。
实际检查场景
场景1——检查地理可用性。您在Facebook Ads上针对来自俄罗斯多个地区的受众投放广告。通过来自新西伯利亚、叶卡捷琳堡和克拉斯诺达尔的IP代理检查着陆页是否正确打开,不显示CAPTCHA并快速加载。
场景2——测试速率限制。通过一个代理打开多个标签页,并快速在页面之间切换。如果您在正常行为下收到阻止——阈值太低,需要提高。
场景3——从不同类型的IP检查。尝试通过数据中心的代理访问(模拟机器人/服务器)——如果您的保护措施有效,这样的请求应该会收到CAPTCHA或被阻止。然后通过住宅代理访问(模拟普通家庭用户)——访问应该是自由的。
场景4——竞争对手检查。如果您想检查您的网站被抓取的难度,可以尝试通过简单工具自己进行抓取。如果抓取器在10-20个请求后就被阻止——保护措施有效。如果可以无阻碍地收集数据——需要收紧规则。
监控保护效果
在Cloudflare中,转到Security → Overview部分——在这里您可以看到被阻止请求的图表、威胁类型和攻击地理分布。请注意:
- 被阻止请求的急剧增长——是活跃攻击或抓取的迹象
- 来自一个国家的流量比例过高——可能需要添加地理封锁
- 日志中403/429错误的增长——检查是否真实用户被阻止
- 定期请求/admin、/wp-login.php——尝试入侵,增强这些路径的保护
结论:反向代理不是选择,而是必要
反向代理早已不再是大型企业的专属工具。如今,即使是小型互联网商店、套利活动的着陆页或SMM代理网站也需要基本的保护,以防止机器人、扫描器和竞争对手的抓取。
本指南的关键结论:Cloudflare是没有技术知识的快速启动,Nginx在拥有自己服务器时提供最大控制。在这两种情况下,基本保护在30-60分钟内设置完成,覆盖80-90%的典型威胁。不要忘记检查有用的机器人(Googlebot、Yandexbot)是否保持在白名单中,确保真实用户不受过于激进的规则影响。
对于那些在工作中使用代理的人来说:如果您检查广告活动、监控竞争对手或测试来自不同地区的网站可用性——这些任务最适合使用住宅代理。它们拥有真实家庭用户的IP地址,因此能够像普通访客一样通过大多数保护系统,并提供您受众所看到的客观画面。