Forum Discussion

cymru81's avatar
cymru81
Icon for Altocumulus rankAltocumulus
Sep 06, 2013

http redirect mask

Hi, we have a site eg. abc.host.com that comes in and gets redirected to http://def:8080/123/456 (an internal box). I have applied the following irule to do this:

 

when HTTP_REQUEST {

 

HTTP::redirect "http://def:8080/123/456"

 

}

 

This works fine just the end user sees "http://def:8080/123/456" in their address bar. Is there anyway to change this so they see http://abc.host.com ?

 

Thanks

 

15 Replies

  • Ah ok, that makes a bit more sense to me!

     

    This could be incorrect, I was using a pool but I've found this isn't needed since I applied the iRule? I disabled the members of the pool to test and it still re-directs?

     

    How would I write the irule in my scenario?

     

  • A pool is really just a layer 3/4 path to a service and has nothing to do with URIs. If you've disabled all of the members of the pool, then you shouldn't be getting to the application.

     

    The HTTP::uri command simply changes the URI in the request as it passes through the proxy to the pool. The client doesn't see it.

     

    The HTTP::redirect command issues an immediate 302 redirect response to the client. The Location header in this response tells the client to make a new request to the specified URL. If you issue a redirect in the iRule, traffic will not pass to the pool.

     

  • ah ok that makes sense then. so as im using HTTP::redirect a pool is not required? just whether I can mask the redirected URL in this irule now...? :)

     

  • You cannot mask the URL in an HTTP redirect. This URL is sent to the client and must be addressable. If you want to mask the URL, then you cannot send a redirect. You would use HTTP::uri instead.

     

  • just whether I can mask the redirected URL in this irule now

    doesn't the irule Kevin suggested work?

    e.g.

     configuration
    
    root@(ve11a)(cfg-sync Changes Pending)(Active)(/Common)(tmos) list ltm virtual bar
    ltm virtual bar {
        destination 172.28.20.111:80
        ip-protocol tcp
        mask 255.255.255.255
        pool foo
        profiles {
            http { }
            tcp { }
        }
        rules {
            myrule
        }
        source 0.0.0.0/0
        source-address-translation {
            type automap
        }
        vs-index 2
    }
    root@(ve11a)(cfg-sync Changes Pending)(Active)(/Common)(tmos) list ltm pool foo
    ltm pool foo {
        members {
            200.200.200.101:8080 {
                address 200.200.200.101
            }
        }
    }
    root@(ve11a)(cfg-sync Changes Pending)(Active)(/Common)(tmos) list ltm rule myrule
    ltm rule myrule {
        when HTTP_REQUEST {
      if { [HTTP::uri] equals "/" } {
        HTTP::uri "/123/456"
      }
    }
    }
    
     packet trace
    
    [root@ve11a:Active:Changes Pending] config  ssldump -Aed -nni 0.0 port 80 or port 8080
    New TCP connection 1: 172.28.20.17(35618) <-> 172.28.20.111(80)
    1378628675.7572 (0.0019)  C>S
    ---------------------------------------------------------------
    GET / HTTP/1.1
    User-Agent: curl/7.15.5 (i686-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
    Host: 172.28.20.111
    Accept: */*
    
    ---------------------------------------------------------------
    
    New TCP connection 2: 200.200.200.14(35618) <-> 200.200.200.101(8080)
    1378628675.7583 (0.0010)  C>S
    ---------------------------------------------------------------
    GET /123/456 HTTP/1.1
    User-Agent: curl/7.15.5 (i686-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
    Host: 172.28.20.111
    Accept: */*
    
    ---------------------------------------------------------------