<div dir="ltr">Thank you Maxim! That's helpful explanation. <div><br></div><div>-N</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Nov 24, 2014 at 6:39 AM, Maxim Dounin <span dir="ltr"><<a href="mailto:mdounin@mdounin.ru" target="_blank">mdounin@mdounin.ru</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello!<br>
<span class=""><br>
On Fri, Nov 21, 2014 at 02:53:50PM -0800, neubyr wrote:<br>
<br>
> On Fri, Nov 21, 2014 at 12:11 PM, Maxim Dounin <<a href="mailto:mdounin@mdounin.ru">mdounin@mdounin.ru</a>> wrote:<br>
<br>
</span>[...]<br>
<span class=""><br>
> > For such cases rewrite is better, IMHO.  In some cases it may be a<br>
> > good idea to additionally isolate it with prefix location, like<br>
> > this:<br>
> ><br>
> >     location /members/ {<br>
> >         rewrite ^/members/(.*) /users/$1 redirect;<br>
> >     }<br>
> ><br>
> ><br>
> Thank you Maxim. In what cases prefix might be a good idea??<br>
<br>
</span>This mostly depends on other configuration in the server{} and<br>
expected workload.  That is, it doesn't make much sense to isolate<br>
rewrite if you just have a bunch of rewrites already isolated from<br>
other requests.  E.g., consider the following configuration:<br>
<br>
    location / {<br>
        rewrite ^/members/(.*) /users/$1  redirect;<br>
        rewrite ^/images/(.*)  /static/$1 redirect;<br>
        return 404;<br>
    }<br>
<br>
    location /users/ {<br>
        ...<br>
    }<br>
<br>
    location /static/ {<br>
        ...<br>
    }<br>
<br>
This configuration assumes that all the traffic in "location /"<br>
will be redirected, and most normal requests should be handled in<br>
other locations ("/users/", "/static/").  It doesn't make much<br>
sense to bother doing additional isolation with prefix locations<br>
as it's more or less already here.<br>
<br>
On the other hand, consider the following configuration:<br>
<br>
    location / {<br>
        rewrite ^/members/(.*) /users/$1  redirect;<br>
        rewrite ^/images/(.*)  /static/$1 redirect;<br>
<br>
        proxy_pass <a href="http://backend" target="_blank">http://backend</a>;<br>
    }<br>
<br>
In this configuration all requests are handled in "location /".<br>
And for all normal requests to "/users/..." nginx will have to<br>
check all the rewrites.  This is just a waste of resources.<br>
Moreover, such a configuration may (and likely will) become hard<br>
to support eventually, and this is probably even more important<br>
thing to consider.  So it's usually good idea to use something<br>
like this instead:<br>
<br>
    location / {<br>
        proxy_pass <a href="http://backend" target="_blank">http://backend</a>;<br>
<span class="">    }<br>
<br>
    location /members/ {<br>
        rewrite ^/members/(.*) /users/$1  redirect;<br>
    }<br>
<br>
</span>    location /images/ {<br>
        rewrite ^/images/(.*)  /static/$1 redirect;<br>
    }<br>
<br>
See also this Igor's talk for additional hints on how to write<br>
scalable nginx configurations:<br>
<br>
<a href="https://www.youtube.com/watch?v=YWRYbLKsS0I" target="_blank">https://www.youtube.com/watch?v=YWRYbLKsS0I</a><br>
<div class="HOEnZb"><div class="h5"><br>
--<br>
Maxim Dounin<br>
<a href="http://nginx.org/" target="_blank">http://nginx.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>