企业网站制作开发中如何禁止不想要的用户代理和请求来源

block-spam-nginx-apache.png

阻止在访问日志中看到的所有不必要的请求

我们网站日常的运维过程中,经常在访问日志里看到很多无用的访问,这些访问主要是一些用户代理,或者其它的我们压根不需要的搜索引擎等,它们完全无法为企业带来任何价值。在统计的访问报表中感觉访问量还行,但实际上很可能有三分之一或者一半的流量匹配来自于不受欢迎的用户代理(User-Agent )或请求来源(Referrers)。这些访问给服务器带来性能消耗及流量消耗。

解决这些的有效方式很多,如在网络设备,负载平衡器,防火墙或CDN等边缘设备上将其禁止。 但是,我知道个人建站或企业官方网站建设中这些就不可行了,主要成本过大,架构过于复杂。那么如何解决此类问题呢?下面我们来探讨下企业网站制作过程中如何屏蔽无效的User-Agent和Referrers。

友情提醒:在服务器修改操作之前做好配置文件的备份操作!以便在出现问题的时候随时恢复!

Nginx

Nginx为全世界无数的网站提供支撑,在虚拟主机中非常受欢迎。 如果您正在使用Nginx,则可以通过以下方法停止它们。 假设您通过以下用户代理收到大量自动请求,而您决定屏蔽它们。

java/curl/python

if ($http_user_agent ~* "java|curl|python") {
    return 403;
}

如果你想把这些请求转发到其它的什么地方,你可以这么操作(301跳转)

if ($http_user_agent ~* "java|curl|python") {
    return 301 https://yoursite.com;
}

以上的配置需要再 server 块下面添加

下面是来源屏蔽。 以下示例应放在 location 块下,以阻止来自google.com,qq.com和example.com的请求。

if ($http_referer ~ "google\.com|qq\.com|example\.com")  {
  return 403;
}

以上配置完成后,保存配置文件,然后重启Nginx让其生效。

重启Nginx的命令

service nginx restart

Nginx是功能强大的Web服务器,伟致在无锡企业网站制作过程中,默认采用的就是Nginx服务器。

Apache HTTP

在Apache中屏蔽user-agent你可以使用 mod_rewrite 模块,先确保模块已经启用,然后在web根目录下的 .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]

以上规则会屏蔽所有user-agent为badcrawler,badbot,badspider的访问请求。

下面这些栗子这是以名称来屏蔽来源,比如BlowFish, CatchBot, BecomeBo。

RewriteEngine on
RewriteCond %{HTTP_REFERER} blowfish|CatchBot|BecomeBot [NC]
RewriteRule . - [R=403,L]

接下来重启下apache服务就可以生效了。

以上Nginx和Apache支持在阿里云,百度云,腾讯云等云主机上部署,不支持虚拟主机。

我司在部分项目中还采用了Tengine服务器,该服务器如果需要进行屏蔽,则参照Nginx即可。