Skip to main content

Applications and routes

Use applications and routes to bind hostnames to origins and set request matching, cache, TLS and security behavior.

Note: Balancer is in beta. Endpoints, fields and behavior may change before general availability, and the feature must be enabled on your account before use. Contact your NetActuate account manager to request access.

Before you begin​

Choose the account that owns the resources. Create an HTTP load balancer before adding applications, and create an application before adding routes or domains.

Application groups​

Application groups

List the applications on an HTTP load balancer.

  1. Open the load balancer application list.
  2. Select Add Group to create an application group, or open an existing group. Verify its upstream group and algorithm.

Verify with the API​

Use the API host shown in the Balancer portal in place of https://<your-api-host>. Set $BALANCER_API_KEY to your credential for this context. Set $HTTP_LB_ID to the resource identifiers you want to inspect.

curl --fail-with-body --silent --show-error --request GET \
--url "https://<your-api-host>/http-loadbalancers/$HTTP_LB_ID/groups" \
--header "x-api-key: $BALANCER_API_KEY"

Expect HTTP 200 with code set to 200. The response includes data.meta, data.data[], data.meta.total, data.meta.offset. Compare the returned configuration with the screen. A successful configuration read does not verify that an edge has applied it.

API reference: List HTTP groups.

Application overview​

Application overview

Review what an application does and navigate to its domains, routes and policy settings.

  1. Open an application from its load balancer.
  2. Review What this application does. Select Edit or Settings to change configuration.
  3. Use Domains, Routes, Security, Analytics or Error Pages for the matching task.

Verify with the API​

Use the API host shown in the Balancer portal in place of https://<your-api-host>. Set $BALANCER_API_KEY to your credential for this context. Set $HTTP_LB_ID, $GROUP_ID to the resource identifiers you want to inspect.

curl --fail-with-body --silent --show-error --request GET \
--url "https://<your-api-host>/http-loadbalancers/$HTTP_LB_ID/groups/$GROUP_ID" \
--header "x-api-key: $BALANCER_API_KEY"

Expect HTTP 200 with code set to 200. The response includes data.name, data.description, data.version, data.backendPort. Compare the returned configuration with the screen. A successful configuration read does not verify that an edge has applied it.

API reference: Get HTTP group.

Application and route analytics​

Application and route analytics

Inspect access logs, WAF statistics and image manipulation statistics at the selected scope.

  1. Open the application or route and select Analytics.
  2. Choose Access Logs, WAF Statistics or Image Manipulation, then set the time range.
  3. For logs, use Live tail or Refresh. Check that the selected application or route matches your investigation.

API equivalent​

Query up to 100 access log records for the last 60 minutes. Charts based on sampled records are not a complete traffic count. Use the API host shown in the Balancer portal in place of https://<your-api-host>. Set $BALANCER_API_KEY to your credential for this context. Set $HTTP_LB_ID, $GROUP_ID to the selected resources.

curl --fail-with-body --silent --show-error --request POST \
--url "https://<your-api-host>/http-loadbalancers/$HTTP_LB_ID/groups/$GROUP_ID/access-logs/query" \
--header "x-api-key: $BALANCER_API_KEY" \
--header "Content-Type: application/json" \
--data '{"timeRange":{"pastMinutes":60},"limit":100}'

Expect HTTP 200 with code set to 200. Review the returned records and selected time range; an empty result does not establish that no traffic occurred.

API reference: Query managed access logs for an HTTP group.

Verify with the API​

Use the API host shown in the Balancer portal in place of https://<your-api-host>. Set $BALANCER_API_KEY to your credential for this context. Set $HTTP_LB_ID, $GROUP_ID to the resource identifiers you want to inspect.

curl --fail-with-body --silent --show-error --request GET \
--url "https://<your-api-host>/http-loadbalancers/$HTTP_LB_ID/groups/$GROUP_ID" \
--header "x-api-key: $BALANCER_API_KEY"

Expect HTTP 200 with code set to 200. The response includes data.name, data.description, data.version, data.backendPort. Compare the returned configuration with the screen. A successful configuration read does not verify that an edge has applied it.

API reference: Get HTTP group.

Application domains​

Application domains

Manage hostnames served by an application and their certificate settings.

  1. Open the application and select Domains. Select Add domain.
  2. Enter Domain, choose certificate settings and submit.
  3. Verify the hostname in Domain, then review Certificate and Status. Use Group by suffix to organize the list.
FieldRequiredDescriptionMatching API field
**Domain ***YesDomain or wildcard hostname.domain
Let's EncryptNoRequest managed issuance.doLetsEncrypt
SSL CertificateNoExisting certificate for the domain.sslCertificateId

Verify with the API​

Use the API host shown in the Balancer portal in place of https://<your-api-host>. Set $BALANCER_API_KEY to your credential for this context. Set $HTTP_LB_ID, $GROUP_ID to the resource identifiers you want to inspect.

curl --fail-with-body --silent --show-error --request GET \
--url "https://<your-api-host>/http-loadbalancers/$HTTP_LB_ID/groups/$GROUP_ID/domains" \
--header "x-api-key: $BALANCER_API_KEY"

Expect HTTP 200 with code set to 200. The response includes data.meta, data.data[], data.meta.total, data.meta.offset. Compare the returned configuration with the screen. A successful configuration read does not verify that an edge has applied it.

API reference: List domains for an HTTP group.

Error page bindings​

Error page bindings

Match response status codes to a reusable error document at application or route scope.

  1. Open the application or route and select Error Pages. Select Add rule.
  2. Set Status Match, Error Page and optionally Override Code. Submit the rule.
  3. Verify the entry and its Status. Review the reusable document under Delivery, Error pages.
FieldRequiredDescriptionMatching API field
Status MatchYesNon-empty status match. Validation: Status match is required.statusMatch
Error PageYesExisting error page asset.errorPageAssetId
Override CodeNoWhole status code, 400-599.responseStatusCode
StatusNoEnable or disable the rule.isDisabled

Verify with the API​

Use the API host shown in the Balancer portal in place of https://<your-api-host>. Set $BALANCER_API_KEY to your credential for this context. Set $HTTP_LB_ID, $GROUP_ID to the resource identifiers you want to inspect.

curl --fail-with-body --silent --show-error --request GET \
--url "https://<your-api-host>/http-loadbalancers/$HTTP_LB_ID/groups/$GROUP_ID/error-page-rules" \
--header "x-api-key: $BALANCER_API_KEY"

Expect HTTP 200 with code set to 200. The response includes data.meta, data.data[], data.meta.total, data.meta.offset. Compare the returned configuration with the screen. A successful configuration read does not verify that an edge has applied it.

API reference: List custom error page rules for an HTTP group.

Origin Analysis​

No screenshot is available for this screen.

Add request expressions that seed origin analysis signals without blocking or rewriting requests.

  1. Open an application and select Origin Analysis. If loading fails, select Retry.
  2. Select Add rule, enter When a request matches and choose State. Select Add rule to save.
  3. Verify the expression and active state in the rule list. Use Edit or Delete from row actions to maintain it.
FieldRequiredDescriptionMatching API field
When a request matchesYes1-8192 characters. Validation: Expression is required.requestExpression
StateNoActive unless disabled.isDisabled

Verify with the API​

Use the API host shown in the Balancer portal in place of https://<your-api-host>. Set $BALANCER_API_KEY to your credential for this context. Set $HTTP_LB_ID, $GROUP_ID to the resource identifiers you want to inspect.

curl --fail-with-body --silent --show-error --request GET \
--url "https://<your-api-host>/http-loadbalancers/$HTTP_LB_ID/groups/$GROUP_ID/origin-analysis-rules" \
--header "x-api-key: $BALANCER_API_KEY"

Expect HTTP 200 with code set to 200. The response includes data.meta, data.data[], data.meta.total, data.meta.offset. Compare the returned configuration with the screen. A successful configuration read does not verify that an edge has applied it.

API reference: List origin analysis rules for an HTTP group.

Route overview​

Route overview

Review a route within its parent application and navigate to its overrides.

  1. Open an application, select Routes and open a route.
  2. Use Settings, Upstream Bindings, Auth, Analytics or Error Pages to inspect the corresponding configuration.

Verify with the API​

Use the API host shown in the Balancer portal in place of https://<your-api-host>. Set $BALANCER_API_KEY to your credential for this context. Set $HTTP_LB_ID, $GROUP_ID, $ROUTE_ID to the resource identifiers you want to inspect.

curl --fail-with-body --silent --show-error --request GET \
--url "https://<your-api-host>/http-loadbalancers/$HTTP_LB_ID/groups/$GROUP_ID/routes/$ROUTE_ID" \
--header "x-api-key: $BALANCER_API_KEY"

Expect HTTP 200 with code set to 200. The response includes data.name, data.description, data.version, data.priority. Compare the returned configuration with the screen. A successful configuration read does not verify that an edge has applied it.

API reference: Get HTTP group route.

Application and route analytics (alternate view 2)​

Application and route analytics

Inspect access logs, WAF statistics and image manipulation statistics at the selected scope.

  1. Open the application or route and select Analytics.
  2. Choose Access Logs, WAF Statistics or Image Manipulation, then set the time range.
  3. For logs, use Live tail or Refresh. Check that the selected application or route matches your investigation.

API equivalent​

Query up to 100 access log records for the last 60 minutes. Charts based on sampled records are not a complete traffic count. Use the API host shown in the Balancer portal in place of https://<your-api-host>. Set $BALANCER_API_KEY to your credential for this context. Set $HTTP_LB_ID, $GROUP_ID, $ROUTE_ID to the selected resources.

curl --fail-with-body --silent --show-error --request POST \
--url "https://<your-api-host>/http-loadbalancers/$HTTP_LB_ID/groups/$GROUP_ID/routes/$ROUTE_ID/access-logs/query" \
--header "x-api-key: $BALANCER_API_KEY" \
--header "Content-Type: application/json" \
--data '{"timeRange":{"pastMinutes":60},"limit":100}'

Expect HTTP 200 with code set to 200. Review the returned records and selected time range; an empty result does not establish that no traffic occurred.

API reference: Query managed access logs for an HTTP route.

Verify with the API​

Use the API host shown in the Balancer portal in place of https://<your-api-host>. Set $BALANCER_API_KEY to your credential for this context. Set $HTTP_LB_ID, $GROUP_ID, $ROUTE_ID to the resource identifiers you want to inspect.

curl --fail-with-body --silent --show-error --request GET \
--url "https://<your-api-host>/http-loadbalancers/$HTTP_LB_ID/groups/$GROUP_ID/routes/$ROUTE_ID" \
--header "x-api-key: $BALANCER_API_KEY"

Expect HTTP 200 with code set to 200. The response includes data.name, data.description, data.version, data.priority. Compare the returned configuration with the screen. A successful configuration read does not verify that an edge has applied it.

API reference: Get HTTP group route.

Route authentication​

Route authentication

Manage basic authentication users and JWT providers for a route.

  1. Open a route and select Auth.
  2. Select Basic Auth Users, then Add user. Enter the username and password and submit. Verify the username in the list.
  3. Select JWT Providers to review provider configuration separately.
FieldRequiredDescriptionMatching API field
UsernameYes1-64 characters. Validation: Username is required.username
PasswordYes, when creating a userPassword for this user.password
NameYes, for a JWT provider1-64 characters.name
IssuerYes, for a JWT provider1-255 characters. Validation: Issuer is required.issuer
DescriptionNoUp to 255 characters.description
JWKS sourceNoChoose URI or inline content; this selects which API field is sent.jwksUri / jwks
JWKS URIFor URI sourceUp to 512 characters.jwksUri
Inline JWKSFor inline sourceUp to 32768 characters.jwks
AudiencesNoAccepted audience values.audiences
From headersNoHeaders to read for authentication.fromHeaders
From query paramsNoQuery parameters to read for authentication.fromParams
Forward the tokenNoForward the original credential.forward
Payload headerNoUp to 64 characters.forwardPayloadHeader

Verify with the API​

Use the API host shown in the Balancer portal in place of https://<your-api-host>. Set $BALANCER_API_KEY to your credential for this context. Set $HTTP_LB_ID, $GROUP_ID, $ROUTE_ID to the resource identifiers you want to inspect.

curl --fail-with-body --silent --show-error --request GET \
--url "https://<your-api-host>/http-loadbalancers/$HTTP_LB_ID/groups/$GROUP_ID/routes/$ROUTE_ID/basic-auth-users" \
--header "x-api-key: $BALANCER_API_KEY"

Expect HTTP 200 with code set to 200. The response includes data.meta, data.data[], data.meta.total, data.meta.offset. Compare the returned configuration with the screen. A successful configuration read does not verify that an edge has applied it.

API reference: List basic auth users for a route.

Error page bindings (alternate view 2)​

Error page bindings

Match response status codes to a reusable error document at application or route scope.

  1. Open the application or route and select Error Pages. Select Add rule.
  2. Set Status Match, Error Page and optionally Override Code. Submit the rule.
  3. Verify the entry and its Status. Review the reusable document under Delivery, Error pages.
FieldRequiredDescriptionMatching API field
Status MatchYesNon-empty status match. Validation: Status match is required.statusMatch
Error PageYesExisting error page asset.errorPageAssetId
Override CodeNoWhole status code, 400-599.responseStatusCode
StatusNoEnable or disable the rule.isDisabled

Verify with the API​

Use the API host shown in the Balancer portal in place of https://<your-api-host>. Set $BALANCER_API_KEY to your credential for this context. Set $HTTP_LB_ID, $GROUP_ID, $ROUTE_ID to the resource identifiers you want to inspect.

curl --fail-with-body --silent --show-error --request GET \
--url "https://<your-api-host>/http-loadbalancers/$HTTP_LB_ID/groups/$GROUP_ID/routes/$ROUTE_ID/error-page-rules" \
--header "x-api-key: $BALANCER_API_KEY"

Expect HTTP 200 with code set to 200. The response includes data.meta, data.data[], data.meta.total, data.meta.offset. Compare the returned configuration with the screen. A successful configuration read does not verify that an edge has applied it.

API reference: List custom error page rules for an HTTP route.

Route settings​

Route settings

Set route identity, matching, origin behavior and overrides of application settings.

  1. Open the route and select Settings.
  2. Update Name, Matches when and any overrides. Use Show additional settings for extra controls.
  3. Select Save changes, reopen the route and verify the stored values.
  4. To remove cached responses for this route, select Purge route cache and review the result.
FieldRequiredDescriptionMatching API field
Status MatchYesNon-empty status match. Validation: Status match is required.statusMatch
Error PageYesExisting error page asset.errorPageAssetId
Override CodeNoWhole status code, 400-599.responseStatusCode
StatusNoEnable or disable the rule.isDisabled
Route statusNoWhether this route accepts trafficisDisabled
NameYesShown in the route list and in the APIname
DescriptionNoWhy this route existsdescription
PositionNoWhere this route sits in the evaluation orderpriority
Matches whenNoThe requests this route claimsrequestExpression
HTTPS redirectNoAnswer http:// with a redirect to https://httpsRedirectEnabled
Request timeoutNoThe whole request, edge to origin and back. 0-3600000requestTimeoutMilliseconds
Idle timeoutNoSilence allowed on an open connection. 0-3600000idleTimeoutMilliseconds
Session affinity headerNoHashed to pin a client to one server. Up to 128 characters.stickySessionsHeader
CachingNoWhether the cache runs on this routedoCaching
Cache policyNoThe rules that decide what is cacheablecachePolicyId
Cache key query stringNoWhether the query string varies the cache keycacheQueryStringMode
Response compressionNoWhether the edge compresses responsesdoCompression
Image manipulationNoWhether image transforms run on this routeimageManipulationEnabled
Image manipulation policyNoThe policy that defines the allowed transformsimageManipulationPolicyId
Image path prefixNoThe path segment reserved for transforms. Up to 64 characters.imageManipulationPrefix
Default variantNoUsed when the URL names no ops or variant. Up to 64 characters.defaultImageManipulationVariant
WAFNoWhether a firewall runs on this routewafEnabled
WAF firewallNoWhich firewall runs herewafFirewallId
WAF modeNoOff, log only, or blockwafMode
Request fingerprintingNoIssue the Balancer fingerprint cookierequestFingerprintingEnabled
Body inspection limitNoHow much of a body the WAF reads. 1024-1048576wafBodyInspectionLimitBytes
Body capture timeoutNoHow long the edge waits for that body. 50-5000wafBodyCaptureTimeoutMs
Incomplete bodyNoWhen the body cannot be read in fullwafIncompleteBodyAction
Challenge aggressivenessNoHow hard bot challenges push back. 0-5. 0 turns challenges off, 5 is maximum.challengeAggressiveness
Allow policyNoKeep the group policy, replace it, or switch it offallowPolicyMode
WAF allow-policy bypassNoRoute-level control for the WAF bypass listwafAllowPolicyEnabled
WAF allow policyNoWhich bypass list runs herewafAllowPolicyId
Rate-limit policyNoKeep the group policy, replace it, or switch it offrateLimitPolicyMode
Rate-limit policy IDNoThe policy this route uses insteadrateLimitPolicyId
Block policyNoKeep the group policy, replace it, or switch it offblockPolicyMode
Access log exportNoWhether these requests reach the log exportaccessLogsEnabled
Traffic mirrorNoCopy matching requests to a second groupmirror
Mirror targetNoThe group the copy is sent tomirror.upstreamGroupId
Mirror portNoWhere the copy connects on each server. 1-65535mirror.backendPort
Mirror shareNoPortion of matching requests copied. 0-100mirror.percent
Upstream groupsNoGroup, port and share of trafficupstreamBindings
Cache Status HeaderNoInclude cache status response header.cacheStatusHeaderEnabled
Edge Location HeaderNoInclude edge location response header.cacheEdgeLocationHeaderEnabled
Debug HeadersNoEnable diagnostic headers subject to configured CIDRs.debugHeadersEnabled
Max-Age (seconds)When HSTS is enabled0-63072000 seconds.securityHeaders.strictTransportSecurity.maxAgeSeconds
Include Sub-DomainsNoApply HSTS to subdomains.securityHeaders.strictTransportSecurity.includeSubDomains
PreloadNoSet the HSTS preload directive.securityHeaders.strictTransportSecurity.preload
Add CIDRWhen debug headers are enabledAllowed source network for debug headers.debugHeadersCidrs
HSTSNoEnable the HSTS response header.securityHeaders.strictTransportSecurity.enabled
nosniffNoEnable the content type protection header.securityHeaders.contentTypeOptions.nosniff

Verify with the API​

Use the API host shown in the Balancer portal in place of https://<your-api-host>. Set $BALANCER_API_KEY to your credential for this context. Set $HTTP_LB_ID, $GROUP_ID, $ROUTE_ID to the resource identifiers you want to inspect.

curl --fail-with-body --silent --show-error --request GET \
--url "https://<your-api-host>/http-loadbalancers/$HTTP_LB_ID/groups/$GROUP_ID/routes/$ROUTE_ID" \
--header "x-api-key: $BALANCER_API_KEY"

Expect HTTP 200 with code set to 200. The response includes data.name, data.description, data.version, data.priority. Compare the returned configuration with the screen. A successful configuration read does not verify that an edge has applied it.

API reference: Get HTTP group route.

Upstream Bindings​

Upstream Bindings

Bind a route to upstream groups with a port and traffic weight.

  1. Open a route and select Upstream Bindings, then Add binding.
  2. Choose Upstream group, Port and Weight, then submit.
  3. Verify the binding in the table. Port and weight belong to this binding rather than to the upstream member.
FieldRequiredDescriptionMatching API field
Upstream groupYesPool receiving requests.upstreamGroupId
PortYesOrigin port, 1-65535.backendPort
WeightNoRelative share assigned to this binding.trafficWeight

Verify with the API​

Use the API host shown in the Balancer portal in place of https://<your-api-host>. Set $BALANCER_API_KEY to your credential for this context. Set $HTTP_LB_ID, $GROUP_ID, $ROUTE_ID to the resource identifiers you want to inspect.

curl --fail-with-body --silent --show-error --request GET \
--url "https://<your-api-host>/http-loadbalancers/$HTTP_LB_ID/groups/$GROUP_ID/routes/$ROUTE_ID/upstream-bindings" \
--header "x-api-key: $BALANCER_API_KEY"

Expect HTTP 200 with code set to 200. The response includes data.meta, data.data[], data.meta.total, data.meta.offset. Compare the returned configuration with the screen. A successful configuration read does not verify that an edge has applied it.

API reference: List upstream bindings for a route.

Create Route​

Create Route

Create a route within an existing application.

  1. Open the application, then Routes, and choose the create action.
  2. Enter Name and Matches when. Select Add upstream group if the route needs explicit bindings, then set Group, Port and Weight.
  3. Review overrides and select Create Route. Verify the route under the application.
FieldRequiredDescriptionMatching API field
Upstream groupYesPool receiving requests.upstreamGroupId
PortYesOrigin port, 1-65535.backendPort
WeightNoRelative share assigned to this binding.trafficWeight
Route statusNoWhether this route accepts trafficisDisabled
NameYesShown in the route list and in the APIname
DescriptionNoWhy this route existsdescription
PositionNoWhere this route sits in the evaluation orderpriority
Matches whenNoThe requests this route claimsrequestExpression
HTTPS redirectNoAnswer http:// with a redirect to https://httpsRedirectEnabled
Request timeoutNoThe whole request, edge to origin and back. 0-3600000requestTimeoutMilliseconds
Idle timeoutNoSilence allowed on an open connection. 0-3600000idleTimeoutMilliseconds
Session affinity headerNoHashed to pin a client to one server. Up to 128 characters.stickySessionsHeader
CachingNoWhether the cache runs on this routedoCaching
Cache policyNoThe rules that decide what is cacheablecachePolicyId
Cache key query stringNoWhether the query string varies the cache keycacheQueryStringMode
Response compressionNoWhether the edge compresses responsesdoCompression
Image manipulationNoWhether image transforms run on this routeimageManipulationEnabled
Image manipulation policyNoThe policy that defines the allowed transformsimageManipulationPolicyId
Image path prefixNoThe path segment reserved for transforms. Up to 64 characters.imageManipulationPrefix
Default variantNoUsed when the URL names no ops or variant. Up to 64 characters.defaultImageManipulationVariant
WAFNoWhether a firewall runs on this routewafEnabled
WAF firewallNoWhich firewall runs herewafFirewallId
WAF modeNoOff, log only, or blockwafMode
Request fingerprintingNoIssue the Balancer fingerprint cookierequestFingerprintingEnabled
Body inspection limitNoHow much of a body the WAF reads. 1024-1048576wafBodyInspectionLimitBytes
Body capture timeoutNoHow long the edge waits for that body. 50-5000wafBodyCaptureTimeoutMs
Incomplete bodyNoWhen the body cannot be read in fullwafIncompleteBodyAction
Challenge aggressivenessNoHow hard bot challenges push back. 0-5. 0 turns challenges off, 5 is maximum.challengeAggressiveness
Allow policyNoKeep the group policy, replace it, or switch it offallowPolicyMode
WAF allow-policy bypassNoRoute-level control for the WAF bypass listwafAllowPolicyEnabled
WAF allow policyNoWhich bypass list runs herewafAllowPolicyId
Rate-limit policyNoKeep the group policy, replace it, or switch it offrateLimitPolicyMode
Rate-limit policy IDNoThe policy this route uses insteadrateLimitPolicyId
Block policyNoKeep the group policy, replace it, or switch it offblockPolicyMode
Access log exportNoWhether these requests reach the log exportaccessLogsEnabled
Traffic mirrorNoCopy matching requests to a second groupmirror
Mirror targetNoThe group the copy is sent tomirror.upstreamGroupId
Mirror portNoWhere the copy connects on each server. 1-65535mirror.backendPort
Mirror shareNoPortion of matching requests copied. 0-100mirror.percent
Upstream groupsNoGroup, port and share of trafficupstreamBindings
Cache Status HeaderNoInclude cache status response header.cacheStatusHeaderEnabled
Edge Location HeaderNoInclude edge location response header.cacheEdgeLocationHeaderEnabled
Debug HeadersNoEnable diagnostic headers subject to configured CIDRs.debugHeadersEnabled
Max-Age (seconds)When HSTS is enabled0-63072000 seconds.securityHeaders.strictTransportSecurity.maxAgeSeconds
Include Sub-DomainsNoApply HSTS to subdomains.securityHeaders.strictTransportSecurity.includeSubDomains
PreloadNoSet the HSTS preload directive.securityHeaders.strictTransportSecurity.preload
Add CIDRWhen debug headers are enabledAllowed source network for debug headers.debugHeadersCidrs
HSTSNoEnable the HSTS response header.securityHeaders.strictTransportSecurity.enabled
nosniffNoEnable the content type protection header.securityHeaders.contentTypeOptions.nosniff

Verify with the API​

Use the API host shown in the Balancer portal in place of https://<your-api-host>. Set $BALANCER_API_KEY to your credential for this context. Set $HTTP_LB_ID, $GROUP_ID to the resource identifiers you want to inspect.

curl --fail-with-body --silent --show-error --request GET \
--url "https://<your-api-host>/http-loadbalancers/$HTTP_LB_ID/groups/$GROUP_ID/routes" \
--header "x-api-key: $BALANCER_API_KEY"

Expect HTTP 200 with code set to 200. The response includes data.meta, data.data[], data.meta.total, data.meta.offset. Compare the returned configuration with the screen. A successful configuration read does not verify that an edge has applied it.

API reference: List routes for an HTTP group.

Application security​

Application security

Review security attachments and their effective modes for an application.

  1. Open an application and select Security.
  2. Review Object, Attached at, Mode and Effect.
  3. Select Security hub to open reusable security objects. Verify attachment changes back on the application.

Verify with the API​

Use the API host shown in the Balancer portal in place of https://<your-api-host>. Set $BALANCER_API_KEY to your credential for this context. Set $HTTP_LB_ID, $GROUP_ID to the resource identifiers you want to inspect.

curl --fail-with-body --silent --show-error --request GET \
--url "https://<your-api-host>/http-loadbalancers/$HTTP_LB_ID/groups/$GROUP_ID" \
--header "x-api-key: $BALANCER_API_KEY"

Expect HTTP 200 with code set to 200. The response includes data.name, data.description, data.version, data.backendPort. Compare the returned configuration with the screen. A successful configuration read does not verify that an edge has applied it.

API reference: Get HTTP group.

Session Labels​

No screenshot is available for this screen.

Tag matching sessions with a label key.

  1. Open an application and select Session Labels. If loading fails, select Retry.
  2. Select Add rule, enter Label key and When a request matches, then choose State. Select Add rule to save.
  3. Verify the label key, expression and state in the list.
FieldRequiredDescriptionMatching API field
When a request matchesYes1-8192 characters. Validation: Expression is required.requestExpression
StateNoActive unless disabled.isDisabled
Label keyYes1-96 characters. Validation: Label key is required.sessionLabelKey

Verify with the API​

Use the API host shown in the Balancer portal in place of https://<your-api-host>. Set $BALANCER_API_KEY to your credential for this context. Set $HTTP_LB_ID, $GROUP_ID to the resource identifiers you want to inspect.

curl --fail-with-body --silent --show-error --request GET \
--url "https://<your-api-host>/http-loadbalancers/$HTTP_LB_ID/groups/$GROUP_ID/session-label-rules" \
--header "x-api-key: $BALANCER_API_KEY"

Expect HTTP 200 with code set to 200. The response includes data.meta, data.data[], data.meta.total, data.meta.offset. Compare the returned configuration with the screen. A successful configuration read does not verify that an edge has applied it.

API reference: List session label rules for an HTTP group.

Application settings​

Application settings

Set listener matching, TLS, origin selection, cache and security defaults inherited by routes.

  1. Open the application and select Settings.
  2. Update the relevant fields. Use Show additional settings where needed.
  3. Select Save Changes, reopen settings and verify the saved values.
  4. Select Purge group cache to purge cached responses for this application and check the result.
FieldRequiredDescriptionMatching API field
Status MatchYesNon-empty status match. Validation: Status match is required.statusMatch
Error PageYesExisting error page asset.errorPageAssetId
Override CodeNoWhole status code, 400-599.responseStatusCode
StatusNoEnable or disable the rule.isDisabled
NameYesUsed in the API and in listings. 1-64 characters. Renaming does not move its domains or routes.name
DescriptionNoShown wherever this group is listed. Up to 255 characters.description
Match portsNoThe listener ports this group answers on. Platform default is 80+443.matchPorts
Disable this groupNoThe edge stops accepting traffic for itisDisabled
HTTPS redirectNoAnswer http:// with a redirect to https://httpsRedirectEnabled
TLS profileNoCiphers and versions offered to a client. modern , compatible , legacydownstreamTlsProfile
Accept HTTP/1.0NoFrom the client, not to the origindownstreamHttp10Enabled
Client certificate authorityNoSet one to require a client certificate. PEM, up to 32768 characters. Blank means no client certificate is asked for.downstreamCaCertificate
Origin portYesThe port every pool member is dialled on. 1-65535backendPort
TLS to originNoThe edge re-encrypts towards the origin. API default is off.sslToBackendEnabled
HTTP/2 to originNoOtherwise the origin gets HTTP/1.1. API default is off.http2ToBackendEnabled
Certificate presented to the originNoFor an origin that requires mTLSmtlsClientCertificateId
RequestNoThe whole request, including every retry. 1-3600000requestTimeoutMilliseconds
IdleNoA connection with nothing on it. 1-3600000idleTimeoutMilliseconds
Per tryNoOne attempt, when retries are on. 1-300000perTryTimeoutMilliseconds
Websocket upgrades over HTTP/1.1NoAn exception to HTTP/2 to origin, above. API default is on.websocketHttp1ToBackendEnabled
Host headerNoWhat the origin is asked fororiginRequest.hostHeader
Host header valueNoSent instead of the client's Host. 255 charactersoriginRequest.hostHeader.value
X-Forwarded-HostNoWhether the client's Host is passed onoriginRequest.forwardedHost.mode
Origin TLS SNINoThe name offered in the TLS handshakeoriginTls.sni
SNI valueNoOffered instead of the effective Host. 255 charactersoriginTls.sni.value
Default upstream groupYesThe pool a route falls back toupstreamGroupId
AlgorithmNoHow one member of that pool is picked. Platform default is round-robin.algorithm
Sticky sessionsNoA client keeps its first member. API default is on , this form resends it on every save.stickySessionsEnabled
Session headerNoThe header the session is keyed on. Up to 128 characters. Blank uses a cookie.stickySessionsHeader
Fast Path locationNoThe Balancer location nearest your origin. Blank turns Fast Path off. Receiver failover is configured centrally.originLocationId
AttemptsNoRetries after the first failure. 0-10retry.count
Retry every methodNoIncludes POST and PATCHretry.allMethods
CachingNoRoutes inherit it and can override itdoCaching
Cache policyNoApplied here, overridable per routedefaultCachePolicyId
Cache key query stringNoWhether it varies the cache key. standard , ignoreQueryString , noQueryStringcacheQueryStringMode
CompressionNoOn or off , the API stores nothing else. There is no level, size threshold or content-type list on a group.doCompression
Image manipulationNoResize and re-encode images at the edgeimageManipulationEnabled
Image policyNoThe variants this group may serveimageManipulationPolicyId
Path prefixNoReserved for image requests, e.g. /img. Up to 64 characters.imageManipulationPrefix
Default variantNoUsed when the URL names no variant. Up to 64 characters.defaultImageManipulationVariant
Cache response headersNoWhat the edge says about its own cachecacheStatusHeaderEnabled , debugHeadersEnabled
Error pagesNoWhat a client sees when the origin failserror-page-rules
WAF firewallNoApplied here, overridable per routedefaultWafFirewallId
WAF modeNoWhether a match is logged or blocked. off , shadow , enforcedefaultWafMode
Body readNoSet the displayed option.. 1024-1048576defaultWafBodyInspectionLimitBytes
Capture timeoutNoSet the displayed option.. 50-5000defaultWafBodyCaptureTimeoutMs
Incomplete bodyNoSet the displayed option.. process_partial , rejectdefaultWafIncompleteBodyAction
WAF allow policyNoRules that bypass WAF inspection. The policy id, from Security to auth policies.wafAllowPolicyId
Challenge aggressivenessNoHow readily a request gets challenged. 0-5challengeAggressiveness
Rate-limit policyNoApplied here, overridable per routerateLimitPolicyId
Block policyNoCountry, ASN and CIDR rulesblockPolicyId
Allow policyNoCountry, ASN, CIDR and list rules. The policy id, from Security to allow policies.allowPolicyId
Security headersNoHSTS and the rest, sent on every responsesecurityHeaders
Challenge page messageNoPlain text, shown while the check runs. 1024 characterschallengePage.text
Challenge page logoNoAn inline data:image URL. 131072 characters , the image is stored inline, not uploaded.challengePage.imageDataUrl
Challenge page CSSNoRestricted theme overrides. 4096 characterschallengePage.customCss
Edge OAuthNoHandled before the origin is calledoauth
Authorization endpointNoWhere the client is sent to sign in. Up to 512 characters.oauth.authorizationEndpoint
Token endpointNoWhere the edge exchanges the code. Up to 512 characters.oauth.tokenEndpointUrl
Client IDNoSet the displayed option.. Up to 255 characters.oauth.clientId
Client secretNoEncrypted at rest. Up to 4096 characters.oauth.clientSecret
Redirect URINoRegistered with the provider. Up to 512 characters.oauth.redirectUri
Redirect pathNoThe callback path the edge answers on. Up to 255 characters.oauth.redirectPath
Signout pathNoClears the edge session. Up to 255 characters.oauth.signoutPath
ScopesNoRequested at sign-in. Comma-separated.oauth.authScopes
Forward the bearer tokenNoThe origin receives the access tokenoauth.forwardBearerToken
Use refresh tokensNoThe edge renews the session itselfoauth.useRefreshToken
Access logsNoRoutes inherit it and can override itaccessLogsEnabled
Request fingerprintingNoA client fingerprint on every requestrequestFingerprintingEnabled
Cache Status HeaderNoInclude cache status response header.cacheStatusHeaderEnabled
Edge Location HeaderNoInclude edge location response header.cacheEdgeLocationHeaderEnabled
Debug HeadersNoEnable diagnostic headers subject to configured CIDRs.debugHeadersEnabled
Max-Age (seconds)When HSTS is enabled0-63072000 seconds.securityHeaders.strictTransportSecurity.maxAgeSeconds
Include Sub-DomainsNoApply HSTS to subdomains.securityHeaders.strictTransportSecurity.includeSubDomains
PreloadNoSet the HSTS preload directive.securityHeaders.strictTransportSecurity.preload
Add CIDRWhen debug headers are enabledAllowed source network for debug headers.debugHeadersCidrs
Enable HSTSNoEnable the HSTS response header.securityHeaders.strictTransportSecurity.enabled
Send X-Content-Type-Options: nosniffNoEnable the content type protection header.securityHeaders.contentTypeOptions.nosniff

Verify with the API​

Use the API host shown in the Balancer portal in place of https://<your-api-host>. Set $BALANCER_API_KEY to your credential for this context. Set $HTTP_LB_ID, $GROUP_ID to the resource identifiers you want to inspect.

curl --fail-with-body --silent --show-error --request GET \
--url "https://<your-api-host>/http-loadbalancers/$HTTP_LB_ID/groups/$GROUP_ID" \
--header "x-api-key: $BALANCER_API_KEY"

Expect HTTP 200 with code set to 200. The response includes data.name, data.description, data.version, data.backendPort. Compare the returned configuration with the screen. A successful configuration read does not verify that an edge has applied it.

API reference: Get HTTP group.

Create Application Group​

Create Application Group

Create an application on an existing HTTP load balancer.

  1. Open the load balancer and select Add application or Add Group.
  2. Enter Name and Default upstream group. Review Origin port, Algorithm and the listener and security settings.
  3. Select Create Group. Verify the application appears on the parent load balancer.
FieldRequiredDescriptionMatching API field
NameYesUsed in the API and in listings. 1-64 characters. Renaming does not move its domains or routes.name
DescriptionNoShown wherever this group is listed. Up to 255 characters.description
Match portsNoThe listener ports this group answers on. Platform default is 80+443.matchPorts
Disable this groupNoThe edge stops accepting traffic for itisDisabled
HTTPS redirectNoAnswer http:// with a redirect to https://httpsRedirectEnabled
TLS profileNoCiphers and versions offered to a client. modern , compatible , legacydownstreamTlsProfile
Accept HTTP/1.0NoFrom the client, not to the origindownstreamHttp10Enabled
Client certificate authorityNoSet one to require a client certificate. PEM, up to 32768 characters. Blank means no client certificate is asked for.downstreamCaCertificate
Origin portYesThe port every pool member is dialled on. 1-65535backendPort
TLS to originNoThe edge re-encrypts towards the origin. API default is off.sslToBackendEnabled
HTTP/2 to originNoOtherwise the origin gets HTTP/1.1. API default is off.http2ToBackendEnabled
Certificate presented to the originNoFor an origin that requires mTLSmtlsClientCertificateId
RequestNoThe whole request, including every retry. 1-3600000requestTimeoutMilliseconds
IdleNoA connection with nothing on it. 1-3600000idleTimeoutMilliseconds
Per tryNoOne attempt, when retries are on. 1-300000perTryTimeoutMilliseconds
Websocket upgrades over HTTP/1.1NoAn exception to HTTP/2 to origin, above. API default is on.websocketHttp1ToBackendEnabled
Host headerNoWhat the origin is asked fororiginRequest.hostHeader
Host header valueNoSent instead of the client's Host. 255 charactersoriginRequest.hostHeader.value
X-Forwarded-HostNoWhether the client's Host is passed onoriginRequest.forwardedHost.mode
Origin TLS SNINoThe name offered in the TLS handshakeoriginTls.sni
SNI valueNoOffered instead of the effective Host. 255 charactersoriginTls.sni.value
Default upstream groupYesThe pool a route falls back toupstreamGroupId
AlgorithmNoHow one member of that pool is picked. Platform default is round-robin.algorithm
Sticky sessionsNoA client keeps its first member. API default is on , this form resends it on every save.stickySessionsEnabled
Session headerNoThe header the session is keyed on. Up to 128 characters. Blank uses a cookie.stickySessionsHeader
Fast Path locationNoThe Balancer location nearest your origin. Blank turns Fast Path off. Receiver failover is configured centrally.originLocationId
AttemptsNoRetries after the first failure. 0-10retry.count
Retry every methodNoIncludes POST and PATCHretry.allMethods
CachingNoRoutes inherit it and can override itdoCaching
Cache policyNoApplied here, overridable per routedefaultCachePolicyId
Cache key query stringNoWhether it varies the cache key. standard , ignoreQueryString , noQueryStringcacheQueryStringMode
CompressionNoOn or off , the API stores nothing else. There is no level, size threshold or content-type list on a group.doCompression
Image manipulationNoResize and re-encode images at the edgeimageManipulationEnabled
Image policyNoThe variants this group may serveimageManipulationPolicyId
Path prefixNoReserved for image requests, e.g. /img. Up to 64 characters.imageManipulationPrefix
Default variantNoUsed when the URL names no variant. Up to 64 characters.defaultImageManipulationVariant
Cache response headersNoWhat the edge says about its own cachecacheStatusHeaderEnabled , debugHeadersEnabled
Error pagesNoWhat a client sees when the origin failserror-page-rules
WAF firewallNoApplied here, overridable per routedefaultWafFirewallId
WAF modeNoWhether a match is logged or blocked. off , shadow , enforcedefaultWafMode
Body readNoSet the displayed option.. 1024-1048576defaultWafBodyInspectionLimitBytes
Capture timeoutNoSet the displayed option.. 50-5000defaultWafBodyCaptureTimeoutMs
Incomplete bodyNoSet the displayed option.. process_partial , rejectdefaultWafIncompleteBodyAction
WAF allow policyNoRules that bypass WAF inspection. The policy id, from Security to auth policies.wafAllowPolicyId
Challenge aggressivenessNoHow readily a request gets challenged. 0-5challengeAggressiveness
Rate-limit policyNoApplied here, overridable per routerateLimitPolicyId
Block policyNoCountry, ASN and CIDR rulesblockPolicyId
Allow policyNoCountry, ASN, CIDR and list rules. The policy id, from Security to allow policies.allowPolicyId
Security headersNoHSTS and the rest, sent on every responsesecurityHeaders
Challenge page messageNoPlain text, shown while the check runs. 1024 characterschallengePage.text
Challenge page logoNoAn inline data:image URL. 131072 characters , the image is stored inline, not uploaded.challengePage.imageDataUrl
Challenge page CSSNoRestricted theme overrides. 4096 characterschallengePage.customCss
Edge OAuthNoHandled before the origin is calledoauth
Authorization endpointNoWhere the client is sent to sign in. Up to 512 characters.oauth.authorizationEndpoint
Token endpointNoWhere the edge exchanges the code. Up to 512 characters.oauth.tokenEndpointUrl
Client IDNoSet the displayed option.. Up to 255 characters.oauth.clientId
Client secretNoEncrypted at rest. Up to 4096 characters.oauth.clientSecret
Redirect URINoRegistered with the provider. Up to 512 characters.oauth.redirectUri
Redirect pathNoThe callback path the edge answers on. Up to 255 characters.oauth.redirectPath
Signout pathNoClears the edge session. Up to 255 characters.oauth.signoutPath
ScopesNoRequested at sign-in. Comma-separated.oauth.authScopes
Forward the bearer tokenNoThe origin receives the access tokenoauth.forwardBearerToken
Use refresh tokensNoThe edge renews the session itselfoauth.useRefreshToken
Access logsNoRoutes inherit it and can override itaccessLogsEnabled
Request fingerprintingNoA client fingerprint on every requestrequestFingerprintingEnabled
Cache Status HeaderNoInclude cache status response header.cacheStatusHeaderEnabled
Edge Location HeaderNoInclude edge location response header.cacheEdgeLocationHeaderEnabled
Debug HeadersNoEnable diagnostic headers subject to configured CIDRs.debugHeadersEnabled
Max-Age (seconds)When HSTS is enabled0-63072000 seconds.securityHeaders.strictTransportSecurity.maxAgeSeconds
Include Sub-DomainsNoApply HSTS to subdomains.securityHeaders.strictTransportSecurity.includeSubDomains
PreloadNoSet the HSTS preload directive.securityHeaders.strictTransportSecurity.preload
Add CIDRWhen debug headers are enabledAllowed source network for debug headers.debugHeadersCidrs
Enable HSTSNoEnable the HSTS response header.securityHeaders.strictTransportSecurity.enabled
Send X-Content-Type-Options: nosniffNoEnable the content type protection header.securityHeaders.contentTypeOptions.nosniff

Verify with the API​

Use the API host shown in the Balancer portal in place of https://<your-api-host>. Set $BALANCER_API_KEY to your credential for this context. Set $HTTP_LB_ID to the resource identifiers you want to inspect.

curl --fail-with-body --silent --show-error --request GET \
--url "https://<your-api-host>/http-loadbalancers/$HTTP_LB_ID/groups" \
--header "x-api-key: $BALANCER_API_KEY"

Expect HTTP 200 with code set to 200. The response includes data.meta, data.data[], data.meta.total, data.meta.offset. Compare the returned configuration with the screen. A successful configuration read does not verify that an edge has applied it.

API reference: List HTTP groups.