NginX maps for fun'n'profit
Suppose you have two or three different backends and wish to avoid a clumpsy solution defining every single location on what goes where. Let's say you have a main page with Django and some blog with WordPress.
Shortly I worked out an interisting solution to achieve it.
    For the sake of example, let's assume you have two upstreams:
    a django backend and a wordpress backend:
  
upstream django {
    server 127.0.0.1:8000;
}
upstream wordpress {
    server 127.0.0.1:9000;
}
  
      
        
  
  
    Now, let's define a mapping on $uri to a named location:
  
map $uri $backend {
    default       @django;
    ~^/blog       @wordpress;
    ~^/wp-admin   @wordpress;
    ~^/wp-content @wordpress;
}
  
      
        
  
  
    Finaly, in the main session, we simply define a try_files with a mapped
    value istead of a named location as we would do it otherwise:
  
server {
    server_name    example.com;
    # more stuff like root etc.
    location / {
        try_files $uri $backend;
    }
    location @django {
        include proxy_params;
        proxy_pass http://django;
    }
    location @wordpress {
        include proxy_params;
        proxy_pass http://wordpress;
    }
}
  
      
        
  
  
    That's all. The important part is a $backend variable. It decides
    where the URI is routed to.