<div dir="ltr">The only way you can stop people from mirroring your site is to pull the plug. Anything you set up can be bypassed like a normal user would. If you put CAPTCHAs on every page, someone motivated can get really smart people in poor countries to type in the letters, click the blue box, complete the pattern, etc. on the cheap.<div><br><div>However, that being said the legit Googlebot operates from a well defined subset of IP blocks and always identifies itself and honors robots.txt, so you can look those up and white list them.</div></div><div><br></div><div>Any traffic from Amazon EC2, Google Clould, and Digital Ocean is immediately suspect, you can filter them out by IP block because they are probably not going to identify themselves as a bot. However you may lose traffic from real people running VPNs and proxies though those sites as a consequence so think it through before you act. </div><div><br></div><div>And there are no shortage of other providers for people to turn to if you block the big clouds, so it comes back to pulling the plug if you want to keep your content locked down.</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, May 5, 2015 at 8:38 AM, meteor8488 <span dir="ltr"><<a href="mailto:nginx-forum@nginx.us" target="_blank">nginx-forum@nginx.us</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi All,<br>
<br>
Recently I found that someguys are trying to mirror my website. They are<br>
doing this in two ways:<br>
<br>
1. Pretend to be google spiders . Access logs are as following:<br>
<br>
89.85.93.235 - - [05/May/2015:20:23:16 +0800] "GET /robots.txt HTTP/1.0" 444<br>
0 "<a href="http://www.example.com" target="_blank">http://www.example.com</a>" "Mozilla/5.0 (compatible; Googlebot/2.1;<br>
+<a href="http://www.google.com/bot.html" target="_blank">http://www.google.com/bot.html</a>)" "<a href="tel:66.249.79.138" value="+16624979138">66.249.79.138</a>"<br>
79.85.93.235 - - [05/May/2015:20:23:34 +0800] "GET /robots.txt HTTP/1.0" 444<br>
0 "<a href="http://www.example.com" target="_blank">http://www.example.com</a>" "Mozilla/5.0 (compatible; Googlebot/2.1;<br>
+<a href="http://www.google.com/bot.html" target="_blank">http://www.google.com/bot.html</a>)" "<a href="tel:66.249.79.154" value="+16624979154">66.249.79.154</a>"<br>
<br>
The http_x_forwarded_for address are google addresses.<br>
<br>
2. Pretend to be a normal web browser.<br>
<br>
<br>
I'm trying to use below configuration to block their access:<br>
<br>
<br>
<br>
For 1 above, I'll check X_forward_for address. If user agent is spider, and<br>
X_forward_for is not null. Then block.<br>
I'm using<br>
<br>
map $http_x_forwarded_for $xf {<br>
default 1;<br>
"" 0;<br>
}<br>
map $http_user_agent $fakebots {<br>
default 0;<br>
"~*bot" $xf;<br>
"~*bing" $xf;<br>
"~*search" $xf;<br>
}<br>
if ($fakebots) {<br>
return 444;<br>
}<br>
<br>
With this configuration, it seems the fake google spider can't access the<br>
root of my website. But they can still access my php files, and they can't<br>
access and js or css files. Very strange. I don't know what's wrong.<br>
<br>
2. For user-agent who declare they are not spiders. I'll use ngx_lua to<br>
generate a random value and add the value into cookie, and then check<br>
whether they can send this value back or not. If they can't send it back,<br>
then it means that they are robot and block access.<br>
<br>
map $http_user_agent $ifbot {<br>
default 0;<br>
"~*Yahoo" 1;<br>
"~*archive" 1;<br>
"~*search" 1;<br>
"~*Googlebot" 1;<br>
"~Mediapartners-Google" 1;<br>
"~*bingbot" 1;<br>
"~*msn" 1;<br>
"~*rogerbot" 3;<br>
"~*ChinasoSpider" 3;<br>
}<br>
<br>
if ($ifbot = "0") {<br>
set $humanfilter 1;<br>
}<br>
#below section is to exclude flash upload<br>
if ( $request_uri !~ "~mod\=swfupload\&action\=swfupload" ) {<br>
set $humanfilter "${humanfilter}1";<br>
}<br>
<br>
if ($humanfilter = "11"){<br>
rewrite_by_lua '<br>
local random = ngx.var.cookie_random<br>
if(random == nil) then<br>
random = math.random(999999)<br>
end<br>
local token = ngx.md5("hello" .. ngx.var.remote_addr .. random)<br>
if (ngx.var.cookie_token ~= token) then<br>
ngx.header["Set-Cookie"] = {"token=" .. token, "random=" .. random}<br>
return ngx.redirect(ngx.var.scheme .. "://" .. ngx.var.host ..<br>
ngx.var.request_uri)<br>
end<br>
';<br>
}<br>
But it seems that with above configuration, google bot is also blocked while<br>
it shouldn't.<br>
<br>
<br>
Any one can help?<br>
<br>
Thanks<br>
<br>
Posted at Nginx Forum: <a href="http://forum.nginx.org/read.php?2,258659,258659#msg-258659" target="_blank">http://forum.nginx.org/read.php?2,258659,258659#msg-258659</a><br>
<br>
_______________________________________________<br>
nginx mailing list<br>
<a href="mailto:nginx@nginx.org">nginx@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx</a><br>
</blockquote></div><br></div>