Forward Requests Based on URL Matches

The Nginx location directive in the ngnix.conf file enables you to route requests to a location in the file system.

While Nginx matches or searches a location block against the requested URL, the location directive tells Nginx where to search for a specific path by including all files and directories.

The location directive has the following syntax:

location [modifier] [URL-match] {
  ...
}

For more information about how to use regular expressions (regex) to forward requests to specific locations, see https://www.nginx.com/blog/regular-expression-tester-nginx/.

The following example shows how to redirect requests to specific Universal Messaging servers by using regex:

server {
	listen 80;
	server_name proxy_server;
	
	location / {
             #Important: Nginx must continuously send data to Universal Messaging clients
             #rather than buffering it.
             proxy_buffering off;
		
             #Important: Configure proxy http 1.1 protocol version to enable the connection      
             #keepalive and rewrite the Connection header.
             proxy_http_version 1.1;
             proxy_set_header Connection "";	
             proxy_pass http://umhost:port;
	}

	location /umserver1/ {
             #Important: Nginx must continuously send data to Universal Messaging clients
             #rather than buffering it.
             proxy_buffering off;
		
             #Important: Configure proxy http 1.1 protocol version to enable the connection      
             #keepalive and rewrite the Connection header.
             proxy_http_version 1.1;
             proxy_set_header Connection "";	
             proxy_pass http://umserver1host:port;
	}

	location = /umserver2 {
             #Important: Nginx must continuously send data to Universal Messaging clients
             #rather than buffering it.
             proxy_buffering off;
		
             #Important: Configure proxy http 1.1 protocol version to enable the connection      
             #keepalive and rewrite the Connection header.
             proxy_http_version 1.1;
             proxy_set_header Connection "";	
             proxy_pass http://umserver2host:port;
	}
}

In the example, traffic is redirected as follows:

  • location /umserver1/ - requests that start with umserver1 are redirected to http://umserver1host:port.
  • location = /umserver2 - requests that match the umserver2 block are redirected to http://umserver2host:port.
  • Requests that do not match location /umserver1/ or location = /umserver2 are served by the default location directive.

Client Code Example

public void createSessionAndCreateChannel(String arg) throws Exception {

    // The request initiated with nhp://localhost:80/ without any endpoint is redirected to
    // http://umhost:port; in the code sample above.
                 
    nSessionAttributes defaultAttr = new nSessionAttributes(“nhp://locahost:80/”);
    defaultAttr.setName("defaultAttr-client");
    nSession defautServerSession= nSessionFactory.create(defaultAttr);
    defautServerSession.init();
    nChannel chan = session.createChannel(new nChannelAttributes(“defaultServerChannel”));
    defautServerSession.close();

    // The request initiated with nhp://localhost:80/umserver1 without any endpoint is
    // redirected to http://umserver1host:port; in the code sample above.
    
    nSessionAttributes attr1 = new nSessionAttributes(“nhp://locahost:80/umserver1”);
    attr1.setName("umserver1-client");
    nSession session1 = nSessionFactory.create(attr1);
    session1.init();
    nChannel chan1 = session.createChannel(new nChannelAttributes(“umserver1Channel”));
    session1.close();
    
    // The request initiated with nhp://localhost:80/umserver2 without any endpoint is
    // redirected to http://umserver2host:port; in the code sample above.
    
    nSessionAttributes attr2 = new nSessionAttributes(“nhp://locahost:80/umserver2”);
    attr2.setName("umserver2-client");
    nSession session2 = nSessionFactory.create(attr2);
    session2.init();
    nChannel chan2 = session.createChannel(new nChannelAttributes(“umserver2Channel”));
    session2.close();
}