如何在Apache、Nginx和WordPress中屏蔽不需要的用户代理和引荐者?
在日志中阻止所有那些不必要的请求
我假设您已经查看过您的网站访问日志,并对那些不需要的请求感到厌烦。它们可能不一定是坏的或垃圾邮件,但是它们可能对业务没有任何价值。想象一下,如果大部分点击都是通过那些不受欢迎的用户代理或引用者而来的,您认为您的网站获得了很好的流量,但实际上它们是无用的。
管理它们的最佳方式是通过像网络设备、负载均衡器、防火墙或CDN这样的边缘设备来阻止它们。但是,我了解到对于个人博客作者或小型网站来说,使用这样的设备可能不可行,您可能希望在像Web服务器、WordPress等较低级别上进行阻止。
我希望您已经有了一个要屏蔽的引用者和用户代理列表。让我们开始吧。
作为最佳实践,在修改配置文件之前对其进行备份,以便在出现问题时可以回滚。
Nginx
Nginx支持数百万个网站,在web hosting中非常受欢迎。如果您使用的是Nginx,那么下面是如何阻止它们的方法。假设您正在收到许多带有以下用户代理的自动请求,并且您已决定将其屏蔽。
- java
- curl
- python
if ($http_user_agent ~* "java|curl|python") {
return 403;
}
如果您想将它们重定向到其他地方,那么:
if ($http_user_agent ~* "java|curl|python") {
return 301 https://yoursite.com;
}
上述配置必须位于server
块中。
以下配置用于通过引用者进行屏蔽。下面的示例应该放在用于屏蔽semalt.com、badsite.net、example.com的请求的location
块中。
if ($http_referer ~ "semalt.com|badsite.net|example.com") {
return 403;
}
进行必要的更改后,您需要保存文件并重新启动Nginx以生效。
要重新启动Nginx,您可以使用:
service nginx restart
Nginx是一个功能强大的Web服务器,如果您有兴趣学习,请查看此online course。
Apache HTTP
要在Apache中阻止用户代理,您可以使用mod_rewrite
模块。确保该模块已启用,然后在.htaccess
文件或相应的.conf
文件中添加以下内容。
如果您配置了多个站点,并且希望针对特定URL进行阻止,则可以将它们放在相应的VirtualHost
部分中。
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} badcrawler [NC,OR]
RewriteCond %{HTTP_USER_AGENT} badbot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} badspider [NC]
RewriteRule . - [R=403,L]
上述规则将阻止包含用户代理为badcrawler、badbot和badspider的任何请求。
以下示例将根据引用者的名称(BlowFish、CatchBot、BecomeBot)进行阻止。
RewriteEngine on
RewriteCond %{HTTP_REFERER} blowfish|CatchBot|BecomeBot [NC]
RewriteRule . - [R=403,L]
像往常一样,重新启动Apache服务器并进行测试。
WordPress
如果您在共享托管上使用WordPress或无法访问Web服务器配置文件或不熟悉修改文件,则可以使用WordPress插件。有许多WP security plugins可供选择,其中一个用于屏蔽恶意机器人的流行插件是Blackhole for Bad Bots。
结论
希望上述提示有助于您阻止不良请求,以保护合法请求不受影响。如果您正在寻求全面的安全保护,那么您可能还考虑使用基于云的WAF,例如Astra或SUCURI。