<div dir="ltr"><div><div><div>@itpp thanks for suggestion but the problem is , this is the invalid way of blocking requests belong to android and the reason is , our official android app will be releasing soon and filtering based on this user-agent will block valid users as well. So we need something different such as, adding some custom header in official android app and filtering requests based on that (Maybe).<br><br></div>@Francis, thanks for explanation and suggestion. As you suggested, i should enable extra logging and currently following is the log format enabled on nginx. Does nginx support extra logging format ? i want to log each parameter to distinguish between valid and invalid requests. Following is current log format :<br><br>    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '<br>                      '$status $body_bytes_sent "$http_referer" '<br>                      '"$http_user_agent" "$http_x_forwarded_for"';<br><br><br></div>Thanks.<br></div>Shahzaib<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Mar 16, 2015 at 7:50 PM, Francis Daly <span dir="ltr"><<a href="mailto:francis@daoine.org" target="_blank">francis@daoine.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Mon, Mar 16, 2015 at 06:45:30PM +0500, shahzaib shahzaib wrote:<br>
<br>
Hi there,<br>
<br>
</span><span class="">>     I have installed that android app and requested log against my ip is<br>
> following :<br>
><br>
> 39.49.52.224 - - [15/Mar/2015:10:40:26 +0500] "GET<br>
> /files/thumbs/2015/03/14/1426310448973c5-1.jpg HTTP/1.1" 200 13096 "-"<br>
> "Dalvik/1.6.0 (Linux; U; Android 4.2.2; GT-S7582 Build/JDQ39)"<br>
><br>
> where 39.49.52.224 is ip of my modem.<br>
<br>
</span>So - you have the log line for one request that you would like to block.<br>
<br>
Do you have the log line for the matching request that you would like<br>
to allow?<br>
<br>
And that log line shows just two request headers plus an ip address. If<br>
that is enough to accurately distinguish between "yes" and "no" requests,<br>
you're good. If not, examine the entire request (either by extra logging<br>
in nginx, or by watching the network traffic involved in each).<br>
<span class=""><br>
> I have also tried blocking specific user agent such as Android but neither<br>
> it worked (sure i am doing something wrong) nor this is the correct<br>
> solution :<br>
><br>
> if ($http_user_agent ~* "Linux;Android 4.2.2") {<br>
<br>
</span>Does that 19-character string appear in the user agent header? If not,<br>
the "if" will not match.<br>
<br>
(I don't see it in there.)<br>
<br>
If the most important thing is that "they" don't "steal" your bandwidth,<br>
you can just turn off your web server. Bandwidth saved.<br>
<br>
But presumably it is also important that some requests are handled as<br>
they currently are.<br>
<br>
Only you can say what distinguishes a "no" request from a "yes"<br>
request.<br>
<br>
And only you can say which "yes" requests you are happy to<br>
mis-characterise as "no" requests and reject.<br>
<br>
After you determine those, then you can decide how to configure nginx<br>
to implement the same test.<br>
<br>
(For example: check your logs from before this app started. Do all valid<br>
requests include Referer? Are you happy to block any actually-valid<br>
requests that omit Referer, in order to block all requests from this<br>
app? How long do you think it will take the app author to change their<br>
app to include a Referer, if you do that?)<br>
<div class="HOEnZb"><div class="h5"><br>
        f<br>
--<br>
Francis Daly        <a href="mailto:francis@daoine.org">francis@daoine.org</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>
</div></div></blockquote></div><br></div>