Forum Discussion

22 Replies

  • Hi Ahmad, I've modified the iRule a bit, this should work across all v11.x versions.

    when HTTP_REQUEST {
    
      if { ([HTTP::host] equals "oservices.bahrain.bh") && ( [string tolower [HTTP::path]] equals "/pubportal/insurancedetailsuploadws/services/insuranceuploadimpl" ) }{
        log local0. "Client: [IP::client_addr]: Requested [HTTP::host][HTTP::uri]. HTTPS redirect omitted"
      } else {
        HTTP::respond 302 location "https://[HTTP::host][HTTP::uri]"
        log local0. "Client: [IP::client_addr]: Requested [HTTP::host][HTTP::uri]. Redirected to HTTPS"
        TCP::close
      }
    }
    

    Test with logging enabled: "curl -vI oservices.bahrain.bh/pubportal/InsuranceDetailsUploadWS/services/InsuranceUploadImpl"

    Apr  8 12:26:18 bigip1 info tmm1[12385]: Rule /Common/asd : Client: xx.xx.xx.xx: Requested oservices.bahrain.bh/pubportal/InsuranceDetailsUploadWS/services/InsuranceUploadImpl. HTTPS redirect omitted
    
    • Hannes_Rapp's avatar
      Hannes_Rapp
      Icon for Nimbostratus rankNimbostratus
      Have taken a look at the response header - it appears that something in between modifies the request path and the "/pubportal" substring is eaten up, before the request is even routed to F5 BigIP. Do you have another proxy in between your desktop(test machine) and the F5 BigIP? < location: https://oservices.bahrain.bh/InsuranceDetailsUploadWS/services/InsuranceUploadImpl As a workaround in F5, you can further modify the iRule and replace the conditional IF statement with: if { ([HTTP::host] equals "oservices.bahrain.bh") && ( [string tolower [HTTP::path]] contains "/insurancedetailsuploadws/services/insuranceuploadimpl" ) }{
    • nitass's avatar
      nitass
      Icon for Employee rankEmployee
      doesn't it already work? i do see the response is not redirection.
  • Hi Ahmad, I've modified the iRule a bit, this should work across all v11.x versions.

    when HTTP_REQUEST {
    
      if { ([HTTP::host] equals "oservices.bahrain.bh") && ( [string tolower [HTTP::path]] equals "/pubportal/insurancedetailsuploadws/services/insuranceuploadimpl" ) }{
        log local0. "Client: [IP::client_addr]: Requested [HTTP::host][HTTP::uri]. HTTPS redirect omitted"
      } else {
        HTTP::respond 302 location "https://[HTTP::host][HTTP::uri]"
        log local0. "Client: [IP::client_addr]: Requested [HTTP::host][HTTP::uri]. Redirected to HTTPS"
        TCP::close
      }
    }
    

    Test with logging enabled: "curl -vI oservices.bahrain.bh/pubportal/InsuranceDetailsUploadWS/services/InsuranceUploadImpl"

    Apr  8 12:26:18 bigip1 info tmm1[12385]: Rule /Common/asd : Client: xx.xx.xx.xx: Requested oservices.bahrain.bh/pubportal/InsuranceDetailsUploadWS/services/InsuranceUploadImpl. HTTPS redirect omitted
    
    • Hannes_Rapp_162's avatar
      Hannes_Rapp_162
      Icon for Nacreous rankNacreous
      Have taken a look at the response header - it appears that something in between modifies the request path and the "/pubportal" substring is eaten up, before the request is even routed to F5 BigIP. Do you have another proxy in between your desktop(test machine) and the F5 BigIP? < location: https://oservices.bahrain.bh/InsuranceDetailsUploadWS/services/InsuranceUploadImpl As a workaround in F5, you can further modify the iRule and replace the conditional IF statement with: if { ([HTTP::host] equals "oservices.bahrain.bh") && ( [string tolower [HTTP::path]] contains "/insurancedetailsuploadws/services/insuranceuploadimpl" ) }{
    • nitass's avatar
      nitass
      Icon for Employee rankEmployee
      doesn't it already work? i do see the response is not redirection.
  • can you please tell me if i want to exclude another URLs how the iRule will be?

    e.g.

     irule
    
    [root@ve11c:Active:In Sync] config  tmsh list ltm rule qux
    ltm rule qux {
        when HTTP_REQUEST {
      switch -glob [string tolower [HTTP::host][HTTP::uri]] {
        "oservices.bahrain.bh/pubportal/insurancedetailsuploadws/services/insuranceuploadimpl*" -
        "something.domain.com/*" -
        "somethingelse.somedomain.com/*" {
           Do nothing
        }
        default {
          HTTP::respond 302 location "https://[HTTP::host][HTTP::uri]"
        }
      }
    }
    }
    
     test
    
    [root@ve11c:Active:In Sync] config  curl -I http://oservices.bahrain.bh/pubportal/insurancedetailsuploadws/services/insuranceuploadimpl/something
    HTTP/1.1 404 Not Found
    Date: Thu, 23 Apr 2015 14:03:31 GMT
    Server: Apache/2.2.3 (CentOS)
    Last-Modified: Sun, 09 Feb 2014 08:39:51 GMT
    ETag: "41879c-59-2a9c23c0"
    Accept-Ranges: bytes
    Content-Length: 89
    Content-Type: text/html; charset=UTF-8
    
    [root@ve11c:Active:In Sync] config  curl -I http://oservices.bahrain.bh/something
    HTTP/1.0 302 Found
    location: https://oservices.bahrain.bh/something
    Server: BigIP
    Connection: Keep-Alive
    Content-Length: 0
    
    [root@ve11c:Active:In Sync] config  curl -I http://www.domain.com
    HTTP/1.0 302 Found
    location: https://www.domain.com/
    Server: BigIP
    Connection: Keep-Alive
    Content-Length: 0
    
    [root@ve11c:Active:In Sync] config  curl -I http://www.domain.com/something
    HTTP/1.0 302 Found
    location: https://www.domain.com/something
    Server: BigIP
    Connection: Keep-Alive
    Content-Length: 0
    
    
  • can you please tell me if i want to exclude another URLs how the iRule will be?

    e.g.

     irule
    
    [root@ve11c:Active:In Sync] config  tmsh list ltm rule qux
    ltm rule qux {
        when HTTP_REQUEST {
      switch -glob [string tolower [HTTP::host][HTTP::uri]] {
        "oservices.bahrain.bh/pubportal/insurancedetailsuploadws/services/insuranceuploadimpl*" -
        "something.domain.com/*" -
        "somethingelse.somedomain.com/*" {
           Do nothing
        }
        default {
          HTTP::respond 302 location "https://[HTTP::host][HTTP::uri]"
        }
      }
    }
    }
    
     test
    
    [root@ve11c:Active:In Sync] config  curl -I http://oservices.bahrain.bh/pubportal/insurancedetailsuploadws/services/insuranceuploadimpl/something
    HTTP/1.1 404 Not Found
    Date: Thu, 23 Apr 2015 14:03:31 GMT
    Server: Apache/2.2.3 (CentOS)
    Last-Modified: Sun, 09 Feb 2014 08:39:51 GMT
    ETag: "41879c-59-2a9c23c0"
    Accept-Ranges: bytes
    Content-Length: 89
    Content-Type: text/html; charset=UTF-8
    
    [root@ve11c:Active:In Sync] config  curl -I http://oservices.bahrain.bh/something
    HTTP/1.0 302 Found
    location: https://oservices.bahrain.bh/something
    Server: BigIP
    Connection: Keep-Alive
    Content-Length: 0
    
    [root@ve11c:Active:In Sync] config  curl -I http://www.domain.com
    HTTP/1.0 302 Found
    location: https://www.domain.com/
    Server: BigIP
    Connection: Keep-Alive
    Content-Length: 0
    
    [root@ve11c:Active:In Sync] config  curl -I http://www.domain.com/something
    HTTP/1.0 302 Found
    location: https://www.domain.com/something
    Server: BigIP
    Connection: Keep-Alive
    Content-Length: 0