Forum Discussion

Michael_Cope_10's avatar
Michael_Cope_10
Icon for Nimbostratus rankNimbostratus
Oct 03, 2005

HTTP::redirect inside switch {} works but generates errors

I've got a large number of ssl vips on the same ip on different ports. I set up an irule to redirect port http requests to https+port. This works but with extraneous errors which I don't understand.

 

 

My irule:

 

 

HTTP_REQUEST {

 

switch [HTTP::host] {

 

integration.intranet.ny.gm.intranet.db.com { [HTTP::redirect "https://integration.intranet.ny.gm.intranet.db.com:2217"] }

 

...

 

}

 

}

 

 

generates error:

 

 

Oct 2 09:51:43 tmm tmm[19901]: 01220001:3: TCL error: Rule usi1_http_redirect_for_https - invalid command name "" while executing "[HTTP::redirect "https://integration.intranet.ny.gm.intranet.db.com:2217"] " ("integration.intranet.ny.gm.intranet.db.com" arm line 1) invoked from within "switch [HTTP::host] { integration.intranet.ny.gm.intranet.db.com { [HTTP::redirect "https://integration.intranet.ny.gm.intranet.db.co..."

 

 

but works:

 

 

zsh> wget -Yoff integration.intranet.ny.gm.intranet.db.com

 

--15:05:28-- http://integration.intranet.ny.gm.intranet.db.com/

 

=> `index.html'

 

Resolving integration.intranet.ny.gm.intranet.db.com... 10.152.98.200

 

Connecting to integration.intranet.ny.gm.intranet.db.com[10.152.98.200]:80... connected.

 

HTTP request sent, awaiting response... 302 Found

 

Location: https://integration.intranet.ny.gm.intranet.db.com:2217 [following]

 

--15:05:28-- https://integration.intranet.ny.gm.intranet.db.com:2217/

 

=> `index.html'

 

Connecting to integration.intranet.ny.gm.intranet.db.com[10.152.98.200]:2217... connected.

 

 

Note that what I really want to write is

 

 

when HTTP_REQUEST {

 

switch [HTTP::host] {

 

integration.intranet.ny.gm.intranet.db.com { [HTTP::redirect "[HTTP:host]:2217[HTTP:uri]"] }

 

...

 

}

 

}

 

 

 

But that fails with a similar error

 

Sep 29 18:05:14 tmm tmm[710]: 01220001:3: TCL error: Rule usi1_http_redirect_for_https - invalid command name "" while executing "[HTTP::redirect "https//[HTTP::host][HTTP::uri]"] " ("integration.gedny.cio.gto.intranet.db.com" arm line 1) invoked from within "switch [HTTP::host] { integration.intranet.ny.gm.intranet.db.com { HTTP::redirect "https//[HTTP::host]:2217[HTTP::uri]" } ..."

 

 

 

Then doesn't work...

 

 

  • unRuleY_95363's avatar
    unRuleY_95363
    Historic F5 Account
    The problem is that you have the redirect command in square brackets []. The square brackets evaluate the command inside the brackets and then place the result where the brackets are. So, you end up evaluating the redirect and then try to execute the result of the redirect which is the empty string. Just remove the square brackets and it should work without generating an error.
  • Brian,

     

     

    Thanks. This won't do what I want... I think in simplifying the rule I may have confused things.

     

     

    Here's my actual rule: All the destination vips are different ports on the same interface.

     

     

    rule usi1_http_redirect_for_https {

     

    when HTTP_REQUEST {

     

    switch [HTTP::host] {

     

    integration.intranet.ny.gm.intranet.db.com { [HTTP::redirect "https://integration.intranet.ny.gm.intranet.db.com:2217"] }

     

    integration.ftp.tmd.gt.intranet.db.com { [HTTP::redirect "https://integration.ftp.tmd.gt.intranet.db.com:2437"] }

     

    integration.gem.fxny.gto.gt.intranet.db.com { [HTTP::redirect "https://integration.gem.fxny.gto.gt.intranet.db.com:2453"] }

     

    integration.gertest.gm.intranet.db.com -

     

    integration.sso.gm.intranet.db.com { [HTTP::redirect "https://integration.sso.gm.intranet.db.com:2499"] }

     

    integration.admin.gm.intranet.db.com { [HTTP::redirect "https://integration.admin.gm.intranet.db.com:2543"] }

     

    integration.ahmamun.dbiq.gto.gt.intranet.db.com { [HTTP::redirect "https://integration.ahmamun.dbiq.gto.gt.intranet.db.com:2552"] }

     

    integration.tas2.em.gto.gt.intranet.db.com { [HTTP::redirect "https://integration.tas2.em.gto.gt.intranet.db.com:2574"] }

     

    integration.nyc.compliance.compliance.dbs.intranet.db.com { [HTTP::redirect "https://integration.nyc.compliance.compliance.dbs.intranet.db.com:2973"] }

     

    integration.gedny.cio.gto.intranet.db.com { [HTTP::redirect "https://integration.gedny.cio.gto.intranet.db.com:2993"] }

     

    integration.admin.snow.cto.gto.intranet.db.com { [HTTP::redirect "https://integration.admin.snow.cto.gto.intranet.db.com:3106"] }

     

    integration.dbusjmss.dbus.cto.gto.intranet.db.com { [HTTP::redirect "https://integration.dbusjmss.dbus.cto.gto.intranet.db.com:3144"] }

     

    integration.tunnels.cto.gto.intranet.db.com { [HTTP::redirect "https://integration.tunnels.cto.gto.intranet.db.com:3258"] }

     

    integration.dbindex.intranet.db.com { [HTTP::redirect "https://integration.dbindex.intranet.db.com:3293"] }

     

    integration.keyserver.ai2.cto.gto.intranet.db.com { [HTTP::redirect "https://integration.keyserver.ai2.cto.gto.intranet.db.com:3326"] }

     

    uat.keyserver.ai2.cto.gto.intranet.db.com -

     

    integration.uatkeyserver.ai2.cto.gto.intranet.db.com { [HTTP::redirect "https://integration.uatkeyserver.ai2.cto.gto.intranet.db.com:3588"] }

     

    login-ny-intranet.isso.intranet.db.com { [HTTP::redirect "https://login-ny-intranet.isso.intranet.db.com:3749"] }

     

    integration.messaging.cto.gto.intranet.db.com { [HTTP::redirect "https://integration.messaging.cto.gto.intranet.db.com:3755"] }

     

    integration.nyc.fo.ict.cio.gto.intranet.db.com { [HTTP::redirect "https://integration.nyc.fo.ict.cio.gto.intranet.db.com:3785"] }

     

    integration.clg.cio.gto.intranet.db.com { [HTTP::redirect "https://integration.clg.cio.gto.intranet.db.com:3806"] }

     

    integration.seg.uspwm.pcam.intranet.db.com { [HTTP::redirect "https://integration.seg.uspwm.pcam.intranet.db.com:3810"] }

     

    integration.br-it-architecture.cio.gto.intranet.db.com { [HTTP::redirect "https://integration.br-it-architecture.cio.gto.intranet.db.com:3838"] }

     

    integration.nyc.gdsecure.ds.cto.gto.intranet.db.com { [HTTP::redirect "https://integration.nyc.gdsecure.ds.cto.gto.intranet.db.com:3907"] }

     

    integration.gmweb.cio.gto.intranet.db.com { [HTTP::redirect "https://integration.gmweb.cio.gto.intranet.db.com:3963"] }

     

    integration.netopsny.ies.gto.intranet.db.com { [HTTP::redirect "https://integration.netopsny.ies.gto.intranet.db.com:4019"] }

     

    integration.nsrm.ies.gto.intranet.db.com { [HTTP::redirect "https://integration.nsrm.ies.gto.intranet.db.com:4021"] }

     

    integration.mms.ai.ies.gto.intranet.db.com { [HTTP::redirect "https://integration.mms.ai.ies.gto.intranet.db.com:4023"] }

     

    integration.networkdeployment.ies.gto.intranet.db.com { [HTTP::redirect "https://integration.networkdeployment.ies.gto.intranet.db.com:4052"] }

     

    integration.insight.tech.gto.intranet.db.com { [HTTP::redirect "https://integration.insight.tech.gto.intranet.db.com:4097"] }

     

    integration.nyc.cpe.ies.gto.intranet.db.com { [HTTP::redirect "https://integration.nyc.cpe.ies.gto.intranet.db.com:4165"] }

     

    integration.nyc.aspen.sales.gm.cib.intranet.db.com { [HTTP::redirect "https://integration.nyc.aspen.sales.gm.cib.intranet.db.com:4189"] }

     

    uat.nyc.aspen.sales.gm.cib.intranet.db.com { [HTTP::redirect "https://uat.nyc.aspen.sales.gm.cib.intranet.db.com:4197"] }

     

    qa.nyc.aspen.sales.gm.cib.intranet.db.com { [HTTP::redirect "https://qa.nyc.aspen.sales.gm.cib.intranet.db.com:4230"] }

     

    }

     

    }

     

    }

     

  • It looks like you have an interesting naming scheme/configuration for your VIPs. Would you be interested in sharing what you are doing? (Either here or offline if you prefer)...

     

     

    Thanks,

     

    Brian