nginx禁止特定UA访问 |
您所在的位置:网站首页 › nginx禁止代理访问 › nginx禁止特定UA访问 |
一、UA是什么? User Agent 简称UA,就是用户代理。通常我们用浏览器访问网站,在网站的日志中,我们的浏览器就是一种UA。 二、禁止特定UA访问 最近有个网站(www.C.com)抄袭公司主站(www.A.com)的内容,除了域名不同,内容、图片等都完全是我们主站的内容。 出现这种情况,有两种可能: 一种是:它用爬虫抓取公司主站(www.A.com)的内容并放到自己服务器上显示; 另一种是:通过将访问代理至公司主站(www.A.com),而域名(www.C.com)是盗用者的,骗取流量。 无论怎样,都要禁止这种行为的继续。
通过分析日志,没有发现爬虫大量爬取公司主站(www.A.com)内容页面的信息。 测试是否是代理,测试步骤: 1)访问www.C.com并指定参数 URL : www.C.com/chaojikaifangfu.html/?cccc2)检查公司主站的web服务器上的nginx日志 发现有记录,说明刚才的访问被代理到公司主站web上了。 UA(双引号里边的是UA的全名):Resty/HTTP 0.03 (Lua)
有两种方法解决: 1)禁止IP 2)禁止UA 从nginx日志观察,访问者的代理IP经常变,但是访问UA却是固定的,因而可以禁止UA。
禁止特定UA: 1)nginx配置信息 nginx配置目录:/usr/local/nginx/conf/ 2)在nginx配置目录中,创建新的配置文件agent_deny.conf,添加如下内容: # 禁止特定UA访问# ~ "Lua" :表示用户UA匹配"Lua"字符串,区分大小写# 当用户UA被匹配成功,则返回403错误,不给予访问。 if ($http_user_agent ~ "Lua"){ return 403; }3)添加该配置到相应的server或location段 include agent_deny.conf;注意:不能加到http段,if 用于http段会报语法错误的。 4)使配置生效 nginx -t nginx -s reload5)检查禁止特定UA的功能是否成功 利用curl工具,指定UA去访问公司主站(www.A.com) 没禁止特定UA前,访问结果: # curl -I -A "Resty/HTTP 0.03 (Lua)" www.A.com HTTP/1.1 200 OK Content-Type: text/html; 8 Connection: keep-alive Date: Thu, 03 Nov 2016 15:50:13 GMT Content-Length: 361168 Vary: Accept-Encoding Age: 294 Pragma: public Server: nginx Accept-Ranges: bytes禁止特定UA后,访问结果: # curl -I -A "Resty/HTTP 0.03 (Lua)" www.A.com HTTP/1.1 403 Forbidden Server: nginx Date: Thu, 03 Nov 2016 15:55:17 GMT Content-Type: text/html Content-Length: 162 Connection: keep-alive对比两次结果,发现:nginx已经能禁止特定的UA访问了。
补充: 观察一阵子后,发现还有禁止UA为空的访问和放行内网ip不做禁止的需求。 nginx的配置中不支持if条件的逻辑与、逻辑或运算 ,并且不支持if的嵌套语法,但我们可以使用变量达到想要的效果。 #白名单:192.168.1 #禁止特定UA和UA为空的访问 set $flag 0; if ($remote_addr !~ "^(192.168.1)"){ set $flag "${flag}1"; } if ($http_user_agent ~ "Lua|^$"){ set $flag "${flag}2"; } if ($flag = "012"){ return 403; }
注意:以下的写法是错误的!!! if ($remote_addr !~ "^(192.168.1)" && $http_user_agent ~ "Lua|^$") { return 403; }
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |