<div dir="ltr">you can use  <a href="http://nginx.org/en/docs/http/ngx_http_map_module.html">http://nginx.org/en/docs/http/ngx_http_map_module.html</a><div><br></div><div>Ex:</div><div><pre style="padding:0px;margin-top:0px;margin-bottom:0px">
<font color="#000000">map $http_user_agent $mobile {
    </font><span style="color:rgb(80,0,80);font-family:arial,sans-serif;font-size:12.727272033691406px;white-space:normal"> ~* msn-bot  '</span><a href="http://devnull/" target="_blank" style="color:rgb(0,0,0);font-size:12.727272033691406px;font-family:arial,sans-serif">http://devnull</a><font color="#500050" face="arial, sans-serif">';</font></pre>
<pre style="padding:0px;margin-top:0px;margin-bottom:0px;color:rgb(0,0,0)">    default '<a href="http://productionrupal/" target="_blank" style="font-size:12.727272033691406px;font-family:arial,sans-serif">http://productionrupal</a>'<span style="font-family:arial">;</span></pre>
<pre style="padding:0px;margin-top:0px;margin-bottom:0px;color:rgb(0,0,0)">}</pre><pre style="padding:0px;margin-top:0px;margin-bottom:0px;color:rgb(0,0,0)"><br></pre><pre style="padding:0px;margin-top:0px;margin-bottom:0px;color:rgb(0,0,0)">
<br></pre><pre style="padding:0px;margin-top:0px;margin-bottom:0px;color:rgb(0,0,0)">Thanks,</pre><pre style="padding:0px;margin-top:0px;margin-bottom:0px;color:rgb(0,0,0)">Ajay K</pre></div></div><div class="gmail_extra">
<br><br><div class="gmail_quote">On Fri, Feb 21, 2014 at 10:16 PM, rge3 <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">
Maxim Dounin Wrote:<br>
-------------------------------------------------------<br>
<div><div class="h5">> Hello!<br>
><br>
> On Fri, Feb 21, 2014 at 10:25:58AM -0500, rge3 wrote:<br>
><br>
> > I havne't found any ideas for this and thought I might ask here.  We<br>
> have a<br>
> > fairly straightforward proxy_cache setup with a proxy_pass backend.<br>
> We<br>
> > cache documents for different lengths of time or go the backend for<br>
> what's<br>
> > missing.  My problem is we're getting overrun with bot and spider<br>
> requests.<br>
> > MSN in particular started hitting us exceptionally hard yesterday<br>
> and<br>
> > started bringing our backend servers down.  Because they're crawling<br>
> the<br>
> > site from end to end our cache is missing a lot of those pages and<br>
> nginx has<br>
> > to pass the request on through.<br>
> ><br>
> > I'm looking for a way to match on User-Agent and say that if it<br>
> matches<br>
> > certain bots to *only* serve out of proxy_cache.  Ideally I'd like<br>
> the logic<br>
> > to be:  if it's in the cache, serve it.  If it's not, then return<br>
> some 4xx<br>
> > error.  But in the case of those user-agents, *don't* go to the<br>
> backend.<br>
> > Only give them cache.  My first thought was something like...<br>
> ><br>
> > if ($http_user_agent ~* msn-bot) {<br>
> >       proxy_pass <a href="http://devnull" target="_blank">http://devnull</a>;<br>
> >  }<br>
> ><br>
> > by making a bogus backend.  But in nginx 1.4.3 (that's what we're<br>
> running) I<br>
> > get<br>
> > nginx: [emerg] "proxy_pass" directive is not allowed here<br>
> ><br>
> > Does anyone have another idea?<br>
><br>
> The message suggests you are trying to write the snippet above at<br>
> server{} level.  Moving things into a location should do the<br>
> trick.<br>
><br>
> Please make sure to read <a href="http://wiki.nginx.org/IfIsEvil" target="_blank">http://wiki.nginx.org/IfIsEvil</a> though.<br>
<br>
</div></div>That seems to have done it!  With a location block I now have...<br>
<br>
                       location / {<br>
                                proxy_cache_valid  200 301 302  30m;<br>
<div class=""><br>
                                if ($http_user_agent ~* msn-bot) {<br>
                                        proxy_pass <a href="http://devnull" target="_blank">http://devnull</a>;<br>
                                }<br>
<br>
</div>                                if ($http_user_agent !~* msn-bot) {<br>
                                        proxy_pass <a href="http://productionrupal" target="_blank">http://productionrupal</a>;<br>
                                }<br>
                        }<br>
<br>
That seems to work perfectly.  But is it a safe use of "if"?  Is there a<br>
safer way to do it without an if?<br>
<br>
Thanks for the help!<br>
-R<br>
<br>
Posted at Nginx Forum: <a href="http://forum.nginx.org/read.php?2,247837,247845#msg-247845" target="_blank">http://forum.nginx.org/read.php?2,247837,247845#msg-247845</a><br>
<div class="HOEnZb"><div class="h5"><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><br clear="all"><div><br></div>-- <br><div>Thanks,</div>Ajay K
</div>