zuplo 6.67.32 → 6.68.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -0
- package/docs/_index.md +44 -0
- package/docs/ai-gateway/apps.mdx +28 -0
- package/docs/ai-gateway/custom-providers.mdx +54 -0
- package/docs/ai-gateway/getting-started.mdx +224 -0
- package/docs/ai-gateway/guardrails.mdx +65 -0
- package/docs/ai-gateway/integrations/ai-sdk.mdx +109 -0
- package/docs/ai-gateway/integrations/claude-code.mdx +49 -0
- package/docs/ai-gateway/integrations/codex.mdx +78 -0
- package/docs/ai-gateway/integrations/goose.mdx +104 -0
- package/docs/ai-gateway/integrations/langchain.mdx +66 -0
- package/docs/ai-gateway/integrations/openai.mdx +99 -0
- package/docs/ai-gateway/introduction.mdx +85 -0
- package/docs/ai-gateway/managing-apps.mdx +46 -0
- package/docs/ai-gateway/managing-providers.mdx +66 -0
- package/docs/ai-gateway/managing-teams.mdx +63 -0
- package/docs/ai-gateway/policies/akamai-ai-firewall.mdx +125 -0
- package/docs/ai-gateway/policies/comet-opik-tracing.mdx +139 -0
- package/docs/ai-gateway/policies/galileo-tracing.mdx +147 -0
- package/docs/ai-gateway/providers.mdx +32 -0
- package/docs/ai-gateway/teams.mdx +38 -0
- package/docs/ai-gateway/universal-api.mdx +43 -0
- package/docs/ai-gateway/usage-limits.mdx +89 -0
- package/docs/api-management/introduction.md +127 -0
- package/docs/articles/accounts/audit-logs.mdx +227 -0
- package/docs/articles/accounts/billing.mdx +25 -0
- package/docs/articles/accounts/default-api-key.mdx +30 -0
- package/docs/articles/accounts/delete-account.mdx +36 -0
- package/docs/articles/accounts/enterprise-sso.mdx +116 -0
- package/docs/articles/accounts/managing-account-members.mdx +45 -0
- package/docs/articles/accounts/managing-project-members.mdx +37 -0
- package/docs/articles/accounts/members-and-roles.mdx +21 -0
- package/docs/articles/accounts/roles-and-permissions.mdx +115 -0
- package/docs/articles/accounts/zuplo-api-keys.mdx +94 -0
- package/docs/articles/add-api-to-backstage.mdx +216 -0
- package/docs/articles/advanced-path-matching.mdx +139 -0
- package/docs/articles/api-key-administration.mdx +47 -0
- package/docs/articles/api-key-api.mdx +220 -0
- package/docs/articles/api-key-authentication.mdx +195 -0
- package/docs/articles/api-key-buckets.mdx +61 -0
- package/docs/articles/api-key-end-users.mdx +52 -0
- package/docs/articles/api-key-leak-detection.mdx +75 -0
- package/docs/articles/api-key-management.mdx +100 -0
- package/docs/articles/api-key-react-component.mdx +90 -0
- package/docs/articles/api-key-service-limits.mdx +14 -0
- package/docs/articles/archiving-requests-to-storage.mdx +119 -0
- package/docs/articles/branch-based-deployments.mdx +184 -0
- package/docs/articles/bypass-policy-for-testing.mdx +117 -0
- package/docs/articles/check-ip-address.mdx +17 -0
- package/docs/articles/ci-cd-azure/basic-deployment.mdx +49 -0
- package/docs/articles/ci-cd-azure/deploy-and-test.mdx +47 -0
- package/docs/articles/ci-cd-azure/local-testing.mdx +59 -0
- package/docs/articles/ci-cd-azure/multi-stage-deployment.mdx +88 -0
- package/docs/articles/ci-cd-azure/pr-preview-environments.mdx +50 -0
- package/docs/articles/ci-cd-azure/tag-based-releases.mdx +37 -0
- package/docs/articles/ci-cd-bitbucket/basic-deployment.mdx +27 -0
- package/docs/articles/ci-cd-bitbucket/deploy-and-test.mdx +41 -0
- package/docs/articles/ci-cd-bitbucket/local-testing.mdx +34 -0
- package/docs/articles/ci-cd-bitbucket/multi-stage-deployment.mdx +52 -0
- package/docs/articles/ci-cd-bitbucket/pr-preview-environments.mdx +46 -0
- package/docs/articles/ci-cd-bitbucket/tag-based-releases.mdx +27 -0
- package/docs/articles/ci-cd-circleci/basic-deployment.mdx +34 -0
- package/docs/articles/ci-cd-circleci/deploy-and-test.mdx +44 -0
- package/docs/articles/ci-cd-circleci/local-testing.mdx +50 -0
- package/docs/articles/ci-cd-circleci/multi-stage-deployment.mdx +82 -0
- package/docs/articles/ci-cd-circleci/pr-preview-environments.mdx +47 -0
- package/docs/articles/ci-cd-circleci/tag-based-releases.mdx +38 -0
- package/docs/articles/ci-cd-github/basic-deployment.mdx +48 -0
- package/docs/articles/ci-cd-github/cleanup-on-branch-delete.mdx +123 -0
- package/docs/articles/ci-cd-github/deploy-and-test.mdx +82 -0
- package/docs/articles/ci-cd-github/local-testing.mdx +102 -0
- package/docs/articles/ci-cd-github/multi-stage-deployment.mdx +136 -0
- package/docs/articles/ci-cd-github/pr-preview-environments.mdx +106 -0
- package/docs/articles/ci-cd-github/tag-based-releases.mdx +99 -0
- package/docs/articles/ci-cd-gitlab/basic-deployment.mdx +28 -0
- package/docs/articles/ci-cd-gitlab/deploy-and-test.mdx +44 -0
- package/docs/articles/ci-cd-gitlab/local-testing.mdx +39 -0
- package/docs/articles/ci-cd-gitlab/mr-preview-environments.mdx +52 -0
- package/docs/articles/ci-cd-gitlab/multi-stage-deployment.mdx +64 -0
- package/docs/articles/ci-cd-gitlab/tag-based-releases.mdx +28 -0
- package/docs/articles/composite-policy-reference.mdx +284 -0
- package/docs/articles/configuring-auth0-for-mcp-auth.mdx +186 -0
- package/docs/articles/configuring-okta-for-mcp-auth.mdx +208 -0
- package/docs/articles/convert-urls-to-openapi.mdx +62 -0
- package/docs/articles/cors.mdx +447 -0
- package/docs/articles/custom-audit-log-policy.mdx +95 -0
- package/docs/articles/custom-ci-cd-azure.mdx +81 -0
- package/docs/articles/custom-ci-cd-bitbucket.mdx +80 -0
- package/docs/articles/custom-ci-cd-circleci.mdx +78 -0
- package/docs/articles/custom-ci-cd-github.mdx +99 -0
- package/docs/articles/custom-ci-cd-gitlab.mdx +79 -0
- package/docs/articles/custom-ci-cd.mdx +82 -0
- package/docs/articles/custom-code-patterns.md +418 -0
- package/docs/articles/custom-domains.mdx +258 -0
- package/docs/articles/custom-logging-example.mdx +139 -0
- package/docs/articles/ddos-protection.mdx +138 -0
- package/docs/articles/development-options.mdx +49 -0
- package/docs/articles/environment-variables.mdx +134 -0
- package/docs/articles/environments.mdx +143 -0
- package/docs/articles/fastly-zuplo-host-setup.mdx +41 -0
- package/docs/articles/github-deployment-testing.mdx +101 -0
- package/docs/articles/gke-with-upstream-auth-policy.mdx +192 -0
- package/docs/articles/graphql-security.mdx +180 -0
- package/docs/articles/handling-form-data.mdx +61 -0
- package/docs/articles/health-checks.mdx +109 -0
- package/docs/articles/hosting-options.mdx +70 -0
- package/docs/articles/lazy-load-configuration-into-cache.mdx +92 -0
- package/docs/articles/limits.mdx +98 -0
- package/docs/articles/local-development-debugging.mdx +44 -0
- package/docs/articles/local-development-env-variables.mdx +23 -0
- package/docs/articles/local-development-installing-packages.mdx +23 -0
- package/docs/articles/local-development-routes-designer.mdx +27 -0
- package/docs/articles/local-development-services.mdx +40 -0
- package/docs/articles/local-development-troubleshooting.mdx +56 -0
- package/docs/articles/local-development.mdx +81 -0
- package/docs/articles/log-plugin-aws-cloudwatch.mdx +83 -0
- package/docs/articles/log-plugin-datadog.mdx +84 -0
- package/docs/articles/log-plugin-dynatrace.mdx +75 -0
- package/docs/articles/log-plugin-gcp.mdx +75 -0
- package/docs/articles/log-plugin-loki.mdx +136 -0
- package/docs/articles/log-plugin-new-relic.mdx +84 -0
- package/docs/articles/log-plugin-splunk.mdx +104 -0
- package/docs/articles/log-plugin-sumo.mdx +73 -0
- package/docs/articles/log-plugin-vmware-log-insight.mdx +154 -0
- package/docs/articles/log-request-response-data.mdx +398 -0
- package/docs/articles/logging.mdx +115 -0
- package/docs/articles/manual-mcp-oauth-testing.mdx +193 -0
- package/docs/articles/mcp-quickstart.mdx +135 -0
- package/docs/articles/metrics-plugins.mdx +371 -0
- package/docs/articles/migrate-from-apigee.md +408 -0
- package/docs/articles/migrate-from-aws-api-gateway.md +248 -0
- package/docs/articles/migrate-from-azure-apim.md +292 -0
- package/docs/articles/migrate-from-kong.md +300 -0
- package/docs/articles/migration-overview.md +81 -0
- package/docs/articles/monetization/api-access.mdx +69 -0
- package/docs/articles/monetization/billing-models.md +520 -0
- package/docs/articles/monetization/developer-portal.md +167 -0
- package/docs/articles/monetization/features.mdx +98 -0
- package/docs/articles/monetization/index.mdx +113 -0
- package/docs/articles/monetization/meters.mdx +135 -0
- package/docs/articles/monetization/monetization-policy.md +314 -0
- package/docs/articles/monetization/plan-examples.mdx +366 -0
- package/docs/articles/monetization/plans.mdx +266 -0
- package/docs/articles/monetization/pricing-models.mdx +225 -0
- package/docs/articles/monetization/private-plans.md +154 -0
- package/docs/articles/monetization/quickstart.md +355 -0
- package/docs/articles/monetization/rate-cards.mdx +171 -0
- package/docs/articles/monetization/stripe-integration.md +195 -0
- package/docs/articles/monetization/subscription-lifecycle.md +298 -0
- package/docs/articles/monetization/tax-collection.md +166 -0
- package/docs/articles/monetization/troubleshooting.md +272 -0
- package/docs/articles/monetization-custom.mdx +71 -0
- package/docs/articles/monetization-integrations.mdx +104 -0
- package/docs/articles/monitoring-your-gateway.mdx +53 -0
- package/docs/articles/monorepo-deployment.mdx +350 -0
- package/docs/articles/multiple-auth-policies.mdx +81 -0
- package/docs/articles/non-standard-ports.mdx +30 -0
- package/docs/articles/oauth-authentication.mdx +54 -0
- package/docs/articles/openapi-server-urls.mdx +60 -0
- package/docs/articles/openapi.mdx +130 -0
- package/docs/articles/opentelemetry.mdx +250 -0
- package/docs/articles/per-user-rate-limits-using-db.mdx +112 -0
- package/docs/articles/performance-testing.mdx +304 -0
- package/docs/articles/plugin-akamai-api-security.mdx +76 -0
- package/docs/articles/plugin-azure-blob.mdx +73 -0
- package/docs/articles/plugin-azure-event-hubs.mdx +64 -0
- package/docs/articles/plugin-hydrolix-traffic-peak.mdx +147 -0
- package/docs/articles/policies.mdx +33 -0
- package/docs/articles/rename-or-move-project.mdx +39 -0
- package/docs/articles/rick-and-morty-api-developer-portal-example.mdx +23 -0
- package/docs/articles/routing.mdx +193 -0
- package/docs/articles/s3-signed-url-uploads.mdx +521 -0
- package/docs/articles/secure-tunnel.mdx +84 -0
- package/docs/articles/securing-backend-mtls.mdx +268 -0
- package/docs/articles/securing-your-backend.mdx +148 -0
- package/docs/articles/security.mdx +105 -0
- package/docs/articles/sharing-code-across-projects.mdx +412 -0
- package/docs/articles/source-control-setup-azure.mdx +13 -0
- package/docs/articles/source-control-setup-bitbucket.mdx +43 -0
- package/docs/articles/source-control-setup-github.mdx +172 -0
- package/docs/articles/source-control-setup-gitlab.mdx +12 -0
- package/docs/articles/source-control.mdx +80 -0
- package/docs/articles/step-1-setup-basic-gateway-local.mdx +136 -0
- package/docs/articles/step-1-setup-basic-gateway.mdx +118 -0
- package/docs/articles/step-2-add-rate-limiting-local.mdx +126 -0
- package/docs/articles/step-2-add-rate-limiting.mdx +82 -0
- package/docs/articles/step-3-add-api-key-auth-local.mdx +199 -0
- package/docs/articles/step-3-add-api-key-auth.mdx +166 -0
- package/docs/articles/step-4-deploying-to-the-edge.mdx +220 -0
- package/docs/articles/step-5-dynamic-rate-limiting.mdx +167 -0
- package/docs/articles/support.mdx +144 -0
- package/docs/articles/terraform.mdx +114 -0
- package/docs/articles/testing-graphql.mdx +34 -0
- package/docs/articles/testing.mdx +522 -0
- package/docs/articles/troubleshooting-slow-responses.mdx +301 -0
- package/docs/articles/troubleshooting.md +302 -0
- package/docs/articles/tsconfig.mdx +105 -0
- package/docs/articles/tunnel-setup.mdx +195 -0
- package/docs/articles/tunnel-troubleshooting.mdx +50 -0
- package/docs/articles/update-zup-in-github-action.mdx +110 -0
- package/docs/articles/use-openapi-extension-data.mdx +79 -0
- package/docs/articles/users/multifactor-authentication.mdx +64 -0
- package/docs/articles/users/profile.mdx +13 -0
- package/docs/articles/versioning-on-zuplo.mdx +89 -0
- package/docs/articles/waf-ddos-akamai.md +133 -0
- package/docs/articles/waf-ddos-aws-waf-shield.mdx +85 -0
- package/docs/articles/waf-ddos-fastly.mdx +251 -0
- package/docs/articles/waf-ddos.mdx +140 -0
- package/docs/articles/zuplo-waf.mdx +156 -0
- package/docs/ask.mdx +3 -0
- package/docs/cli/authentication.mdx +56 -0
- package/docs/cli/connectivity.mdx +38 -0
- package/docs/cli/create-zuplo-api.mdx +80 -0
- package/docs/cli/delete.mdx +79 -0
- package/docs/cli/deploy.mdx +156 -0
- package/docs/cli/deploy.partial.mdx +46 -0
- package/docs/cli/dev.mdx +115 -0
- package/docs/cli/docs.mdx +66 -0
- package/docs/cli/editor.mdx +50 -0
- package/docs/cli/global-options.mdx +19 -0
- package/docs/cli/init.mdx +74 -0
- package/docs/cli/link.mdx +74 -0
- package/docs/cli/list.mdx +55 -0
- package/docs/cli/mtls-certificate-create.mdx +94 -0
- package/docs/cli/mtls-certificate-delete.mdx +55 -0
- package/docs/cli/mtls-certificate-describe.mdx +55 -0
- package/docs/cli/mtls-certificate-disable.mdx +55 -0
- package/docs/cli/mtls-certificate-list.mdx +47 -0
- package/docs/cli/mtls-certificate-update.mdx +72 -0
- package/docs/cli/openapi-convert.mdx +111 -0
- package/docs/cli/openapi-merge.mdx +138 -0
- package/docs/cli/openapi-merge.partial.mdx +29 -0
- package/docs/cli/openapi-overlay.mdx +123 -0
- package/docs/cli/overview.mdx +78 -0
- package/docs/cli/project-create.mdx +43 -0
- package/docs/cli/source-migrate.mdx +18 -0
- package/docs/cli/source-upgrade.mdx +41 -0
- package/docs/cli/test.mdx +70 -0
- package/docs/cli/test.partial.mdx +7 -0
- package/docs/cli/tunnel-create.mdx +53 -0
- package/docs/cli/tunnel-create.partial.mdx +9 -0
- package/docs/cli/tunnel-delete.mdx +35 -0
- package/docs/cli/tunnel-delete.partial.mdx +9 -0
- package/docs/cli/tunnel-describe.mdx +45 -0
- package/docs/cli/tunnel-describe.partial.mdx +5 -0
- package/docs/cli/tunnel-list.mdx +35 -0
- package/docs/cli/tunnel-list.partial.mdx +9 -0
- package/docs/cli/tunnel-rate-token.partial.mdx +9 -0
- package/docs/cli/tunnel-rotate-token.mdx +39 -0
- package/docs/cli/tunnel-services-describe.mdx +45 -0
- package/docs/cli/tunnel-services-describe.partial.mdx +9 -0
- package/docs/cli/tunnel-services-update.mdx +48 -0
- package/docs/cli/variable-create.mdx +91 -0
- package/docs/cli/variable-create.partial.mdx +5 -0
- package/docs/cli/variable-update.mdx +75 -0
- package/docs/cli/variable-update.partial.mdx +5 -0
- package/docs/concepts/api-keys.md +146 -0
- package/docs/concepts/authentication.mdx +109 -0
- package/docs/concepts/how-zuplo-works.mdx +120 -0
- package/docs/concepts/project-structure.mdx +174 -0
- package/docs/concepts/rate-limiting.md +246 -0
- package/docs/concepts/request-lifecycle.mdx +56 -0
- package/docs/concepts/source-control-and-deployment.mdx +229 -0
- package/docs/conferences/conference-prize-terms.mdx +80 -0
- package/docs/dedicated/akamai/ai-powered-applications.mdx +223 -0
- package/docs/dedicated/akamai/architecture.mdx +280 -0
- package/docs/dedicated/akamai/caching.mdx +212 -0
- package/docs/dedicated/akamai/cdn.mdx +156 -0
- package/docs/dedicated/architecture.mdx +208 -0
- package/docs/dedicated/custom-domains.mdx +31 -0
- package/docs/dedicated/federated-gateways.mdx +80 -0
- package/docs/dedicated/networking.mdx +69 -0
- package/docs/dedicated/overview.mdx +80 -0
- package/docs/dedicated/source-control.mdx +63 -0
- package/docs/dev-portal/dev-portal-create-consumer-on-auth.mdx +134 -0
- package/docs/dev-portal/introduction.mdx +65 -0
- package/docs/dev-portal/local-development.mdx +72 -0
- package/docs/dev-portal/migration.mdx +526 -0
- package/docs/dev-portal/node-modules.mdx +45 -0
- package/docs/dev-portal/updating.mdx +28 -0
- package/docs/dev-portal/zudoku/components/alert.mdx +130 -0
- package/docs/dev-portal/zudoku/components/badge.mdx +70 -0
- package/docs/dev-portal/zudoku/components/button.mdx +132 -0
- package/docs/dev-portal/zudoku/components/callout.mdx +112 -0
- package/docs/dev-portal/zudoku/components/card.mdx +104 -0
- package/docs/dev-portal/zudoku/components/checkbox.mdx +72 -0
- package/docs/dev-portal/zudoku/components/client-only.mdx +79 -0
- package/docs/dev-portal/zudoku/components/code-tabs.mdx +179 -0
- package/docs/dev-portal/zudoku/components/dialog.mdx +167 -0
- package/docs/dev-portal/zudoku/components/head.mdx +199 -0
- package/docs/dev-portal/zudoku/components/icons.mdx +27 -0
- package/docs/dev-portal/zudoku/components/input.mdx +96 -0
- package/docs/dev-portal/zudoku/components/label.mdx +86 -0
- package/docs/dev-portal/zudoku/components/link.mdx +242 -0
- package/docs/dev-portal/zudoku/components/markdown.mdx +151 -0
- package/docs/dev-portal/zudoku/components/mermaid.mdx +81 -0
- package/docs/dev-portal/zudoku/components/playground.mdx +87 -0
- package/docs/dev-portal/zudoku/components/secret.mdx +78 -0
- package/docs/dev-portal/zudoku/components/select.mdx +176 -0
- package/docs/dev-portal/zudoku/components/shadcn.mdx +73 -0
- package/docs/dev-portal/zudoku/components/slider.mdx +108 -0
- package/docs/dev-portal/zudoku/components/slot.mdx +119 -0
- package/docs/dev-portal/zudoku/components/stepper.mdx +138 -0
- package/docs/dev-portal/zudoku/components/switch.mdx +96 -0
- package/docs/dev-portal/zudoku/components/syntax-highlight.mdx +602 -0
- package/docs/dev-portal/zudoku/components/textarea.mdx +78 -0
- package/docs/dev-portal/zudoku/components/tooltip.mdx +195 -0
- package/docs/dev-portal/zudoku/components/typography.mdx +61 -0
- package/docs/dev-portal/zudoku/configuration/ai-assistants.md +64 -0
- package/docs/dev-portal/zudoku/configuration/api-catalog.md +108 -0
- package/docs/dev-portal/zudoku/configuration/api-reference.md +397 -0
- package/docs/dev-portal/zudoku/configuration/authentication-auth0.md +173 -0
- package/docs/dev-portal/zudoku/configuration/authentication-azure-ad.md +238 -0
- package/docs/dev-portal/zudoku/configuration/authentication-clerk.md +110 -0
- package/docs/dev-portal/zudoku/configuration/authentication-firebase.md +61 -0
- package/docs/dev-portal/zudoku/configuration/authentication-pingfederate.md +136 -0
- package/docs/dev-portal/zudoku/configuration/authentication-supabase.md +225 -0
- package/docs/dev-portal/zudoku/configuration/authentication.md +199 -0
- package/docs/dev-portal/zudoku/configuration/build-configuration.mdx +147 -0
- package/docs/dev-portal/zudoku/configuration/docs.md +282 -0
- package/docs/dev-portal/zudoku/configuration/footer.mdx +214 -0
- package/docs/dev-portal/zudoku/configuration/llms.md +89 -0
- package/docs/dev-portal/zudoku/configuration/navigation.mdx +408 -0
- package/docs/dev-portal/zudoku/configuration/overview.md +380 -0
- package/docs/dev-portal/zudoku/configuration/protected-routes.md +149 -0
- package/docs/dev-portal/zudoku/configuration/search.md +169 -0
- package/docs/dev-portal/zudoku/configuration/sentry.mdx +44 -0
- package/docs/dev-portal/zudoku/configuration/site.md +124 -0
- package/docs/dev-portal/zudoku/configuration/slots.mdx +124 -0
- package/docs/dev-portal/zudoku/configuration/vite-config.md +18 -0
- package/docs/dev-portal/zudoku/custom-plugins.md +287 -0
- package/docs/dev-portal/zudoku/customization/colors-theme.mdx +275 -0
- package/docs/dev-portal/zudoku/customization/fonts.md +110 -0
- package/docs/dev-portal/zudoku/extending/events.md +124 -0
- package/docs/dev-portal/zudoku/guides/custom-pages.md +106 -0
- package/docs/dev-portal/zudoku/guides/environment-variables.md +99 -0
- package/docs/dev-portal/zudoku/guides/mermaid.mdx +70 -0
- package/docs/dev-portal/zudoku/guides/navigation-migration.md +87 -0
- package/docs/dev-portal/zudoku/guides/navigation-rules.mdx +197 -0
- package/docs/dev-portal/zudoku/guides/processors.mdx +234 -0
- package/docs/dev-portal/zudoku/guides/static-files.md +55 -0
- package/docs/dev-portal/zudoku/guides/transforming-examples.md +156 -0
- package/docs/dev-portal/zudoku/guides/using-multiple-apis.md +87 -0
- package/docs/dev-portal/zudoku/markdown/admonitions.md +128 -0
- package/docs/dev-portal/zudoku/markdown/code-blocks.md +196 -0
- package/docs/dev-portal/zudoku/markdown/frontmatter.md +172 -0
- package/docs/dev-portal/zudoku/markdown/mdx.md +68 -0
- package/docs/dev-portal/zudoku/markdown/overview.md +275 -0
- package/docs/dev-portal/zudoku/plugins.md +5 -0
- package/docs/dev-portal/zudoku/writing.mdx +72 -0
- package/docs/errors/bad-request.mdx +39 -0
- package/docs/errors/build-error.mdx +45 -0
- package/docs/errors/fatal-project-error.mdx +39 -0
- package/docs/errors/gateway-timeout.mdx +33 -0
- package/docs/errors/get-head-body-error.mdx +41 -0
- package/docs/errors/main-mod-error.mdx +40 -0
- package/docs/errors/no-project-set.mdx +41 -0
- package/docs/errors/not-found.mdx +43 -0
- package/docs/errors/rate-limit-exceeded.mdx +31 -0
- package/docs/errors/schema-validation-failed.mdx +51 -0
- package/docs/errors/system-configuration-error.mdx +44 -0
- package/docs/errors/unauthorized.mdx +50 -0
- package/docs/errors/unknown-error.mdx +42 -0
- package/docs/errors.mdx +14 -0
- package/docs/guides/canary-routing-for-employees.mdx +385 -0
- package/docs/guides/geolocation-backend-routing.mdx +404 -0
- package/docs/guides/modify-openapi-paths.mdx +371 -0
- package/docs/guides/openapi-overlays.mdx +492 -0
- package/docs/guides/overview.mdx +12 -0
- package/docs/guides/user-based-backend-routing.mdx +437 -0
- package/docs/handlers/aws-lambda.mdx +201 -0
- package/docs/handlers/custom-handler.mdx +112 -0
- package/docs/handlers/legacy-dev-portal-handler.mdx +135 -0
- package/docs/handlers/mcp-server.mdx +730 -0
- package/docs/handlers/openapi.mdx +78 -0
- package/docs/handlers/redirect.mdx +115 -0
- package/docs/handlers/system-handlers.mdx +41 -0
- package/docs/handlers/url-forward.mdx +204 -0
- package/docs/handlers/url-rewrite.mdx +224 -0
- package/docs/handlers/websocket-handler.mdx +154 -0
- package/docs/home.mdx +6 -0
- package/docs/managed-edge/overview.md +78 -0
- package/docs/mcp-server/configuration-migration-guide.mdx +344 -0
- package/docs/mcp-server/custom-tools.mdx +487 -0
- package/docs/mcp-server/graphql.mdx +241 -0
- package/docs/mcp-server/introduction.mdx +122 -0
- package/docs/mcp-server/openai-apps-sdk.mdx +160 -0
- package/docs/mcp-server/prompts.mdx +283 -0
- package/docs/mcp-server/resources.mdx +288 -0
- package/docs/mcp-server/testing.mdx +53 -0
- package/docs/mcp-server/tools.mdx +306 -0
- package/docs/policies/_index.md +92 -0
- package/docs/policies/ab-test-inbound/intro.md +8 -0
- package/docs/policies/ab-test-inbound/policy.ts +14 -0
- package/docs/policies/ab-test-inbound/schema.json +27 -0
- package/docs/policies/ab-test-outbound/intro.md +8 -0
- package/docs/policies/ab-test-outbound/policy.ts +26 -0
- package/docs/policies/ab-test-outbound/schema.json +27 -0
- package/docs/policies/acl-policy-inbound/intro.md +5 -0
- package/docs/policies/acl-policy-inbound/policy.ts +32 -0
- package/docs/policies/acl-policy-inbound/schema.json +52 -0
- package/docs/policies/akamai-ai-firewall/schema.json +98 -0
- package/docs/policies/amberflo-metering-inbound/doc.md +183 -0
- package/docs/policies/amberflo-metering-inbound/intro.md +20 -0
- package/docs/policies/amberflo-metering-inbound/schema.json +108 -0
- package/docs/policies/api-key-inbound/doc.md +77 -0
- package/docs/policies/api-key-inbound/intro.md +30 -0
- package/docs/policies/api-key-inbound/schema.json +84 -0
- package/docs/policies/archive-request-aws-s3-inbound/intro.md +4 -0
- package/docs/policies/archive-request-aws-s3-inbound/policy.ts +58 -0
- package/docs/policies/archive-request-aws-s3-inbound/schema.json +68 -0
- package/docs/policies/archive-request-azure-storage-inbound/doc.md +31 -0
- package/docs/policies/archive-request-azure-storage-inbound/intro.md +4 -0
- package/docs/policies/archive-request-azure-storage-inbound/policy.ts +54 -0
- package/docs/policies/archive-request-azure-storage-inbound/schema.json +53 -0
- package/docs/policies/archive-request-gcp-storage-inbound/doc.md +63 -0
- package/docs/policies/archive-request-gcp-storage-inbound/intro.md +4 -0
- package/docs/policies/archive-request-gcp-storage-inbound/policy.ts +68 -0
- package/docs/policies/archive-request-gcp-storage-inbound/schema.json +47 -0
- package/docs/policies/archive-response-aws-s3-outbound/intro.md +2 -0
- package/docs/policies/archive-response-aws-s3-outbound/policy.ts +59 -0
- package/docs/policies/archive-response-aws-s3-outbound/schema.json +68 -0
- package/docs/policies/archive-response-azure-storage-outbound/doc.md +31 -0
- package/docs/policies/archive-response-azure-storage-outbound/intro.md +3 -0
- package/docs/policies/archive-response-azure-storage-outbound/policy.ts +54 -0
- package/docs/policies/archive-response-azure-storage-outbound/schema.json +53 -0
- package/docs/policies/audit-log-inbound/doc.md +78 -0
- package/docs/policies/audit-log-inbound/intro.md +10 -0
- package/docs/policies/audit-log-inbound/schema.json +81 -0
- package/docs/policies/auth0-jwt-auth-inbound/doc.md +125 -0
- package/docs/policies/auth0-jwt-auth-inbound/intro.md +17 -0
- package/docs/policies/auth0-jwt-auth-inbound/schema.json +74 -0
- package/docs/policies/authzen-inbound/doc.md +24 -0
- package/docs/policies/authzen-inbound/intro.md +31 -0
- package/docs/policies/authzen-inbound/schema.json +126 -0
- package/docs/policies/axiomatics-authz-inbound/doc.md +144 -0
- package/docs/policies/axiomatics-authz-inbound/intro.md +11 -0
- package/docs/policies/axiomatics-authz-inbound/schema.json +161 -0
- package/docs/policies/basic-auth-inbound/intro.md +9 -0
- package/docs/policies/basic-auth-inbound/schema.json +99 -0
- package/docs/policies/bot-detection-inbound/intro.md +4 -0
- package/docs/policies/bot-detection-inbound/schema.json +56 -0
- package/docs/policies/brownout-inbound/doc.md +55 -0
- package/docs/policies/brownout-inbound/intro.md +12 -0
- package/docs/policies/brownout-inbound/schema.json +115 -0
- package/docs/policies/caching-inbound/doc.md +209 -0
- package/docs/policies/caching-inbound/intro.md +23 -0
- package/docs/policies/caching-inbound/schema.json +98 -0
- package/docs/policies/change-method-inbound/schema.json +56 -0
- package/docs/policies/clear-headers-inbound/schema.json +59 -0
- package/docs/policies/clear-headers-outbound/schema.json +59 -0
- package/docs/policies/clerk-jwt-auth-inbound/doc.md +85 -0
- package/docs/policies/clerk-jwt-auth-inbound/intro.md +4 -0
- package/docs/policies/clerk-jwt-auth-inbound/schema.json +68 -0
- package/docs/policies/cognito-jwt-auth-inbound/intro.md +7 -0
- package/docs/policies/cognito-jwt-auth-inbound/schema.json +74 -0
- package/docs/policies/comet-opik-tracing-inbound/schema.json +65 -0
- package/docs/policies/complex-rate-limit-inbound/doc.md +20 -0
- package/docs/policies/complex-rate-limit-inbound/intro.md +23 -0
- package/docs/policies/complex-rate-limit-inbound/schema.json +142 -0
- package/docs/policies/composite-inbound/doc.md +69 -0
- package/docs/policies/composite-inbound/intro.md +15 -0
- package/docs/policies/composite-inbound/schema.json +59 -0
- package/docs/policies/composite-outbound/intro.md +6 -0
- package/docs/policies/composite-outbound/schema.json +59 -0
- package/docs/policies/curity-phantom-token-inbound/doc.md +109 -0
- package/docs/policies/curity-phantom-token-inbound/intro.md +3 -0
- package/docs/policies/curity-phantom-token-inbound/schema.json +68 -0
- package/docs/policies/custom-code-inbound/doc.md +267 -0
- package/docs/policies/custom-code-inbound/intro.md +2 -0
- package/docs/policies/custom-code-inbound/schema.json +48 -0
- package/docs/policies/custom-code-outbound/doc.md +235 -0
- package/docs/policies/custom-code-outbound/intro.md +2 -0
- package/docs/policies/custom-code-outbound/schema.json +43 -0
- package/docs/policies/firebase-jwt-inbound/intro.md +6 -0
- package/docs/policies/firebase-jwt-inbound/schema.json +68 -0
- package/docs/policies/formdata-to-json-inbound/schema.json +60 -0
- package/docs/policies/galileo-tracing-inbound/schema.json +65 -0
- package/docs/policies/geo-filter-inbound/doc.md +33 -0
- package/docs/policies/geo-filter-inbound/schema.json +108 -0
- package/docs/policies/graphql-complexity-limit-inbound/doc.md +48 -0
- package/docs/policies/graphql-complexity-limit-inbound/intro.md +2 -0
- package/docs/policies/graphql-complexity-limit-inbound/schema.json +90 -0
- package/docs/policies/graphql-disable-introspection-inbound/doc.md +66 -0
- package/docs/policies/graphql-disable-introspection-inbound/intro.md +15 -0
- package/docs/policies/graphql-disable-introspection-inbound/schema.json +48 -0
- package/docs/policies/graphql-introspection-filter-outbound/doc.md +148 -0
- package/docs/policies/graphql-introspection-filter-outbound/schema.json +79 -0
- package/docs/policies/hmac-auth-inbound/doc.md +30 -0
- package/docs/policies/hmac-auth-inbound/intro.md +10 -0
- package/docs/policies/hmac-auth-inbound/policy.ts +70 -0
- package/docs/policies/hmac-auth-inbound/schema.json +53 -0
- package/docs/policies/http-deprecation-outbound/doc.md +73 -0
- package/docs/policies/http-deprecation-outbound/schema.json +83 -0
- package/docs/policies/ip-restriction-inbound/intro.md +8 -0
- package/docs/policies/ip-restriction-inbound/policy.ts +40 -0
- package/docs/policies/ip-restriction-inbound/schema.json +58 -0
- package/docs/policies/jwt-scopes-inbound/schema.json +59 -0
- package/docs/policies/ldap-auth-inbound/schema.json +56 -0
- package/docs/policies/mock-api-inbound/schema.json +72 -0
- package/docs/policies/moesif-inbound/doc.md +44 -0
- package/docs/policies/moesif-inbound/intro.md +6 -0
- package/docs/policies/moesif-inbound/schema.json +68 -0
- package/docs/policies/monetization-inbound/doc.md +87 -0
- package/docs/policies/monetization-inbound/intro.md +6 -0
- package/docs/policies/monetization-inbound/schema.json +102 -0
- package/docs/policies/mtls-auth-inbound/intro.md +6 -0
- package/docs/policies/mtls-auth-inbound/schema.json +68 -0
- package/docs/policies/okta-fga-authz-inbound/doc.md +181 -0
- package/docs/policies/okta-fga-authz-inbound/intro.md +20 -0
- package/docs/policies/okta-fga-authz-inbound/schema.json +104 -0
- package/docs/policies/okta-jwt-auth-inbound/intro.md +7 -0
- package/docs/policies/okta-jwt-auth-inbound/schema.json +74 -0
- package/docs/policies/open-id-jwt-auth-inbound/doc.md +58 -0
- package/docs/policies/open-id-jwt-auth-inbound/intro.md +30 -0
- package/docs/policies/open-id-jwt-auth-inbound/schema.json +128 -0
- package/docs/policies/openfga-authz-inbound/doc.md +207 -0
- package/docs/policies/openfga-authz-inbound/intro.md +17 -0
- package/docs/policies/openfga-authz-inbound/schema.json +191 -0
- package/docs/policies/openmeter-inbound/doc.md +163 -0
- package/docs/policies/openmeter-inbound/intro.md +18 -0
- package/docs/policies/openmeter-inbound/schema.json +183 -0
- package/docs/policies/prompt-injection-outbound/doc.md +106 -0
- package/docs/policies/prompt-injection-outbound/intro.md +4 -0
- package/docs/policies/prompt-injection-outbound/schema.json +74 -0
- package/docs/policies/propel-auth-jwt-inbound/doc.md +88 -0
- package/docs/policies/propel-auth-jwt-inbound/intro.md +4 -0
- package/docs/policies/propel-auth-jwt-inbound/schema.json +74 -0
- package/docs/policies/query-param-to-header-inbound/doc.md +70 -0
- package/docs/policies/query-param-to-header-inbound/intro.md +5 -0
- package/docs/policies/query-param-to-header-inbound/schema.json +74 -0
- package/docs/policies/quota-inbound/doc.md +235 -0
- package/docs/policies/quota-inbound/intro.md +7 -0
- package/docs/policies/quota-inbound/schema.json +133 -0
- package/docs/policies/rate-limit-inbound/doc.md +78 -0
- package/docs/policies/rate-limit-inbound/intro.md +30 -0
- package/docs/policies/rate-limit-inbound/schema.json +134 -0
- package/docs/policies/rbac-policy-inbound/intro.md +3 -0
- package/docs/policies/rbac-policy-inbound/policy.ts +42 -0
- package/docs/policies/rbac-policy-inbound/schema.json +52 -0
- package/docs/policies/readme-metrics-inbound/doc.md +1 -0
- package/docs/policies/readme-metrics-inbound/intro.md +3 -0
- package/docs/policies/readme-metrics-inbound/schema.json +84 -0
- package/docs/policies/remove-headers-inbound/schema.json +59 -0
- package/docs/policies/remove-headers-outbound/schema.json +59 -0
- package/docs/policies/remove-query-params-inbound/schema.json +59 -0
- package/docs/policies/replace-string-outbound/schema.json +69 -0
- package/docs/policies/request-size-limit-inbound/schema.json +60 -0
- package/docs/policies/request-validation-inbound/doc.md +72 -0
- package/docs/policies/request-validation-inbound/intro.md +24 -0
- package/docs/policies/request-validation-inbound/schema.json +98 -0
- package/docs/policies/require-origin-inbound/intro.md +12 -0
- package/docs/policies/require-origin-inbound/schema.json +65 -0
- package/docs/policies/secret-masking-outbound/doc.md +41 -0
- package/docs/policies/secret-masking-outbound/intro.md +13 -0
- package/docs/policies/secret-masking-outbound/schema.json +65 -0
- package/docs/policies/semantic-cache-inbound/doc.md +63 -0
- package/docs/policies/semantic-cache-inbound/intro.md +4 -0
- package/docs/policies/semantic-cache-inbound/schema.json +179 -0
- package/docs/policies/set-body-inbound/intro.md +7 -0
- package/docs/policies/set-body-inbound/schema.json +56 -0
- package/docs/policies/set-headers-inbound/doc.md +41 -0
- package/docs/policies/set-headers-inbound/intro.md +2 -0
- package/docs/policies/set-headers-inbound/schema.json +83 -0
- package/docs/policies/set-headers-outbound/schema.json +83 -0
- package/docs/policies/set-query-params-inbound/schema.json +83 -0
- package/docs/policies/set-status-outbound/schema.json +62 -0
- package/docs/policies/sleep-inbound/schema.json +56 -0
- package/docs/policies/stripe-webhook-verification-inbound/intro.md +2 -0
- package/docs/policies/stripe-webhook-verification-inbound/schema.json +60 -0
- package/docs/policies/supabase-jwt-auth-inbound/doc.md +29 -0
- package/docs/policies/supabase-jwt-auth-inbound/intro.md +12 -0
- package/docs/policies/supabase-jwt-auth-inbound/schema.json +86 -0
- package/docs/policies/transform-body-inbound/intro.md +8 -0
- package/docs/policies/transform-body-inbound/policy.ts +16 -0
- package/docs/policies/transform-body-inbound/schema.json +27 -0
- package/docs/policies/transform-body-outbound/intro.md +8 -0
- package/docs/policies/transform-body-outbound/policy.ts +19 -0
- package/docs/policies/transform-body-outbound/schema.json +27 -0
- package/docs/policies/upstream-azure-ad-service-auth-inbound/doc.md +82 -0
- package/docs/policies/upstream-azure-ad-service-auth-inbound/intro.md +20 -0
- package/docs/policies/upstream-azure-ad-service-auth-inbound/schema.json +84 -0
- package/docs/policies/upstream-firebase-admin-auth-inbound/intro.md +10 -0
- package/docs/policies/upstream-firebase-admin-auth-inbound/schema.json +68 -0
- package/docs/policies/upstream-firebase-user-auth-inbound/intro.md +2 -0
- package/docs/policies/upstream-firebase-user-auth-inbound/schema.json +113 -0
- package/docs/policies/upstream-gcp-federated-auth-inbound/doc.md +139 -0
- package/docs/policies/upstream-gcp-federated-auth-inbound/intro.md +21 -0
- package/docs/policies/upstream-gcp-federated-auth-inbound/schema.json +96 -0
- package/docs/policies/upstream-gcp-jwt-inbound/intro.md +10 -0
- package/docs/policies/upstream-gcp-jwt-inbound/schema.json +62 -0
- package/docs/policies/upstream-gcp-service-auth-inbound/doc.md +132 -0
- package/docs/policies/upstream-gcp-service-auth-inbound/intro.md +25 -0
- package/docs/policies/upstream-gcp-service-auth-inbound/schema.json +95 -0
- package/docs/policies/upstream-zuplo-jwt-auth-inbound/doc.md +213 -0
- package/docs/policies/upstream-zuplo-jwt-auth-inbound/intro.md +16 -0
- package/docs/policies/upstream-zuplo-jwt-auth-inbound/schema.json +101 -0
- package/docs/policies/validate-json-schema-inbound/doc.md +129 -0
- package/docs/policies/validate-json-schema-inbound/intro.md +7 -0
- package/docs/policies/validate-json-schema-inbound/schema.json +56 -0
- package/docs/policies/web-bot-auth-inbound/doc.md +104 -0
- package/docs/policies/web-bot-auth-inbound/intro.md +16 -0
- package/docs/policies/web-bot-auth-inbound/schema.json +76 -0
- package/docs/policies/xml-to-json-outbound/doc.md +71 -0
- package/docs/policies/xml-to-json-outbound/intro.md +4 -0
- package/docs/policies/xml-to-json-outbound/schema.json +117 -0
- package/docs/programmable-api/audit-log.mdx +74 -0
- package/docs/programmable-api/background-dispatcher.mdx +124 -0
- package/docs/programmable-api/background-loader.mdx +104 -0
- package/docs/programmable-api/cache.mdx +186 -0
- package/docs/programmable-api/compatibility-dates.mdx +201 -0
- package/docs/programmable-api/console-logging.mdx +48 -0
- package/docs/programmable-api/context-data.mdx +127 -0
- package/docs/programmable-api/custom-cors-policy.mdx +64 -0
- package/docs/programmable-api/environment.mdx +328 -0
- package/docs/programmable-api/hooks.mdx +569 -0
- package/docs/programmable-api/http-problems.mdx +385 -0
- package/docs/programmable-api/jwt-service-plugin.mdx +420 -0
- package/docs/programmable-api/logger.mdx +223 -0
- package/docs/programmable-api/memory-zone-read-through-cache.mdx +96 -0
- package/docs/programmable-api/node-modules.mdx +67 -0
- package/docs/programmable-api/not-found-handler.mdx +47 -0
- package/docs/programmable-api/oauth-protected-resource-plugin.mdx +46 -0
- package/docs/programmable-api/overview.mdx +213 -0
- package/docs/programmable-api/problem-response-formatter.mdx +183 -0
- package/docs/programmable-api/request-user.mdx +289 -0
- package/docs/programmable-api/reusing-code.mdx +26 -0
- package/docs/programmable-api/route-raw.mdx +55 -0
- package/docs/programmable-api/runtime-behaviors.mdx +25 -0
- package/docs/programmable-api/runtime-errors.mdx +246 -0
- package/docs/programmable-api/runtime-extensions.mdx +340 -0
- package/docs/programmable-api/safely-clone-a-request-or-response.mdx +57 -0
- package/docs/programmable-api/streaming-zone-cache.mdx +155 -0
- package/docs/programmable-api/web-crypto-apis.mdx +219 -0
- package/docs/programmable-api/web-standard-apis.mdx +109 -0
- package/docs/programmable-api/zone-cache.mdx +131 -0
- package/docs/programmable-api/zp-body-removed.mdx +32 -0
- package/docs/programmable-api/zuplo-context.mdx +414 -0
- package/docs/programmable-api/zuplo-id-token.mdx +90 -0
- package/docs/programmable-api/zuplo-json.mdx +91 -0
- package/docs/programmable-api/zuplo-request.mdx +200 -0
- package/docs/sample-apis.mdx +78 -0
- package/docs/self-hosted/overview.md +60 -0
- package/package.json +6 -5
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Controlling Akamai CDN Caching
|
|
3
|
+
sidebar_label: CDN Caching
|
|
4
|
+
description:
|
|
5
|
+
How to control Akamai CDN caching behavior using response headers from your
|
|
6
|
+
Zuplo API Gateway.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<!-- vale Vale.Spelling = NO -->
|
|
10
|
+
|
|
11
|
+
When running Zuplo on Akamai Connected Cloud, your API Gateway can control how
|
|
12
|
+
the Akamai CDN caches responses by setting the `Cache-Control` header. This
|
|
13
|
+
allows you to optimize caching behavior for different endpoints without
|
|
14
|
+
modifying Akamai Property Manager configurations.
|
|
15
|
+
|
|
16
|
+
## How Akamai caching works
|
|
17
|
+
|
|
18
|
+
Akamai's CDN can cache responses at edge servers to reduce load to your Zuplo
|
|
19
|
+
API Gateway and improve response times for clients.
|
|
20
|
+
|
|
21
|
+
<Diagram type="sequence" height="h-[420px]">
|
|
22
|
+
<DiagramActor id="client" variant="yellow">
|
|
23
|
+
Client
|
|
24
|
+
</DiagramActor>
|
|
25
|
+
<DiagramActor id="cdn" variant="blue">
|
|
26
|
+
Akamai CDN
|
|
27
|
+
</DiagramActor>
|
|
28
|
+
<DiagramActor id="gateway" variant="zuplo">
|
|
29
|
+
Zuplo
|
|
30
|
+
</DiagramActor>
|
|
31
|
+
<DiagramActor id="backend" variant="green">
|
|
32
|
+
Backend
|
|
33
|
+
</DiagramActor>
|
|
34
|
+
<DiagramMessage from="client" to="cdn">
|
|
35
|
+
Request (cache miss)
|
|
36
|
+
</DiagramMessage>
|
|
37
|
+
<DiagramMessage from="cdn" to="gateway">
|
|
38
|
+
Forward request
|
|
39
|
+
</DiagramMessage>
|
|
40
|
+
<DiagramMessage from="gateway" to="backend">
|
|
41
|
+
Forward request
|
|
42
|
+
</DiagramMessage>
|
|
43
|
+
<DiagramMessage from="backend" to="gateway">
|
|
44
|
+
Response
|
|
45
|
+
</DiagramMessage>
|
|
46
|
+
<DiagramMessage from="gateway" to="cdn">
|
|
47
|
+
Response + Cache-Control headers
|
|
48
|
+
</DiagramMessage>
|
|
49
|
+
<DiagramMessage from="cdn" to="client">
|
|
50
|
+
Response (cached at edge)
|
|
51
|
+
</DiagramMessage>
|
|
52
|
+
</Diagram>
|
|
53
|
+
|
|
54
|
+
When a request arrives, Akamai checks if a cached response exists. On a cache
|
|
55
|
+
miss, the request goes to Zuplo, which can set cache headers on the response.
|
|
56
|
+
Akamai caches the response according to those headers and serves subsequent
|
|
57
|
+
requests directly from the edge cache.
|
|
58
|
+
|
|
59
|
+
The CDN determines caching behavior based on:
|
|
60
|
+
|
|
61
|
+
1. **Akamai Property Manager settings** - Default caching rules configured in
|
|
62
|
+
your CDN property
|
|
63
|
+
2. **Origin response headers** - Headers sent by Zuplo that can override or
|
|
64
|
+
influence default behavior
|
|
65
|
+
|
|
66
|
+
When your Akamai property is configured to "Honor origin Cache-Control and
|
|
67
|
+
Expires" headers, Zuplo can control caching behavior on a per-response basis.
|
|
68
|
+
|
|
69
|
+
For complete details on Akamai's caching behavior, see the
|
|
70
|
+
[Akamai caching documentation](https://techdocs.akamai.com/property-mgr/docs/caching-2).
|
|
71
|
+
|
|
72
|
+
## Cache-Control header
|
|
73
|
+
|
|
74
|
+
The `Cache-Control` header controls caching for both the CDN and downstream
|
|
75
|
+
clients (browsers). Akamai honors the following directives when configured to
|
|
76
|
+
respect origin headers:
|
|
77
|
+
|
|
78
|
+
| Directive | Description |
|
|
79
|
+
| ----------------- | ----------------------------------------------------------- |
|
|
80
|
+
| `max-age` | Cache duration for browsers and downstream caches (seconds) |
|
|
81
|
+
| `s-maxage` | Cache duration for shared caches like CDNs (seconds) |
|
|
82
|
+
| `no-cache` | Revalidate with origin before serving cached content |
|
|
83
|
+
| `no-store` | Don't cache the response at all |
|
|
84
|
+
| `private` | Only allow browser caching, not CDN caching |
|
|
85
|
+
| `public` | Allow caching by CDNs and browsers |
|
|
86
|
+
| `must-revalidate` | Must revalidate after max-age expires |
|
|
87
|
+
|
|
88
|
+
### Using s-maxage for CDN caching
|
|
89
|
+
|
|
90
|
+
The `s-maxage` directive is specifically for shared caches like CDNs. When both
|
|
91
|
+
`max-age` and `s-maxage` are present, Akamai uses `s-maxage` for edge caching
|
|
92
|
+
and forwards `max-age` to browsers:
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
Cache-Control: public, max-age=60, s-maxage=3600
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
This example caches content at the CDN for 1 hour while instructing browsers to
|
|
99
|
+
cache for only 1 minute.
|
|
100
|
+
|
|
101
|
+
### Common Cache-Control patterns
|
|
102
|
+
|
|
103
|
+
| Scenario | Header Value |
|
|
104
|
+
| -------------------------- | ---------------------------------------------------- |
|
|
105
|
+
| CDN: 1 hour, Browser: none | `Cache-Control: public, s-maxage=3600, max-age=0` |
|
|
106
|
+
| CDN: 1 day, Browser: 5 min | `Cache-Control: public, s-maxage=86400, max-age=300` |
|
|
107
|
+
| No caching | `Cache-Control: no-store` |
|
|
108
|
+
| Browser only, no CDN | `Cache-Control: private, max-age=3600` |
|
|
109
|
+
|
|
110
|
+
## Setting cache headers in Zuplo
|
|
111
|
+
|
|
112
|
+
### Using the Set Headers policy
|
|
113
|
+
|
|
114
|
+
The simplest way to add cache headers is using the
|
|
115
|
+
[Set Headers Outbound Policy](../../policies/set-headers-outbound.mdx):
|
|
116
|
+
|
|
117
|
+
```json title="config/policies.json"
|
|
118
|
+
{
|
|
119
|
+
"name": "cache-one-hour",
|
|
120
|
+
"policyType": "set-headers-outbound",
|
|
121
|
+
"handler": {
|
|
122
|
+
"export": "SetHeadersOutboundPolicy",
|
|
123
|
+
"module": "$import(@zuplo/runtime)",
|
|
124
|
+
"options": {
|
|
125
|
+
"headers": [
|
|
126
|
+
{
|
|
127
|
+
"name": "Cache-Control",
|
|
128
|
+
"value": "public, max-age=60, s-maxage=3600"
|
|
129
|
+
}
|
|
130
|
+
]
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
This configuration caches responses at the CDN for 1 hour while allowing
|
|
137
|
+
browsers to cache for only 1 minute.
|
|
138
|
+
|
|
139
|
+
### Using custom code
|
|
140
|
+
|
|
141
|
+
For dynamic cache control based on response content or status, use a custom
|
|
142
|
+
outbound policy:
|
|
143
|
+
|
|
144
|
+
```typescript title="modules/cache-control.ts"
|
|
145
|
+
import { ZuploContext, ZuploRequest } from "@zuplo/runtime";
|
|
146
|
+
|
|
147
|
+
export default async function (
|
|
148
|
+
response: Response,
|
|
149
|
+
request: ZuploRequest,
|
|
150
|
+
context: ZuploContext,
|
|
151
|
+
) {
|
|
152
|
+
const headers = new Headers(response.headers);
|
|
153
|
+
|
|
154
|
+
// Cache successful responses for 1 hour at CDN, 1 minute in browser
|
|
155
|
+
if (response.status >= 200 && response.status < 300) {
|
|
156
|
+
headers.set("Cache-Control", "public, max-age=60, s-maxage=3600");
|
|
157
|
+
}
|
|
158
|
+
// Don't cache error responses
|
|
159
|
+
else if (response.status >= 400) {
|
|
160
|
+
headers.set("Cache-Control", "no-store");
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
return new Response(response.body, {
|
|
164
|
+
status: response.status,
|
|
165
|
+
statusText: response.statusText,
|
|
166
|
+
headers,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Downstream cacheability
|
|
172
|
+
|
|
173
|
+
By default, Akamai sends the smaller of the origin's `Cache-Control` max-age and
|
|
174
|
+
the remaining edge cache lifetime to clients. This ensures browsers don't cache
|
|
175
|
+
content longer than it remains valid at the edge.
|
|
176
|
+
|
|
177
|
+
You can control downstream (client) caching independently using Property Manager
|
|
178
|
+
settings or by setting explicit `max-age` values in your `Cache-Control` header.
|
|
179
|
+
|
|
180
|
+
For more information, see
|
|
181
|
+
[Akamai's downstream cacheability documentation](https://techdocs.akamai.com/property-mgr/docs/downstream-cacheability).
|
|
182
|
+
|
|
183
|
+
## Best practices
|
|
184
|
+
|
|
185
|
+
1. **Use s-maxage for CDN caching** - Separate CDN and browser cache durations
|
|
186
|
+
for better control
|
|
187
|
+
2. **Don't cache authenticated responses** - Use `private` or `no-store` for
|
|
188
|
+
user-specific data
|
|
189
|
+
3. **Set appropriate Vary headers** - If responses vary by header (like
|
|
190
|
+
`Accept-Language`), include a `Vary` header
|
|
191
|
+
|
|
192
|
+
## Akamai Property Manager configuration
|
|
193
|
+
|
|
194
|
+
For Zuplo to control caching via headers, ensure your Akamai CDN property is
|
|
195
|
+
configured to honor origin headers:
|
|
196
|
+
|
|
197
|
+
1. In Property Manager, navigate to your property's caching behavior
|
|
198
|
+
2. Set **Caching Option** to "Honor origin Cache-Control and Expires"
|
|
199
|
+
3. Enable the Cache-Control directives you want to honor (max-age, s-maxage,
|
|
200
|
+
etc.)
|
|
201
|
+
4. Set a **Default Max-age** as a fallback when origin headers are missing
|
|
202
|
+
|
|
203
|
+
For detailed CDN setup instructions, see [Setting up Akamai CDNs](./cdn.mdx).
|
|
204
|
+
|
|
205
|
+
## Related resources
|
|
206
|
+
|
|
207
|
+
- [Set Headers Policy](../../policies/set-headers-outbound.mdx) - Add headers to
|
|
208
|
+
responses
|
|
209
|
+
- [Caching Policy](../../policies/caching-inbound.mdx) - Zuplo's built-in
|
|
210
|
+
response caching
|
|
211
|
+
- [Akamai Caching Documentation](https://techdocs.akamai.com/property-mgr/docs/caching-2) -
|
|
212
|
+
Complete Akamai caching reference
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Setting up Akamai CDNs
|
|
3
|
+
sidebar_label: Akamai CDN
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- vale Vale.Spelling["Edgescape","Maxage"] = NO -->
|
|
7
|
+
|
|
8
|
+
When running managed dedicated on the Akamai Cloud, you need to set up 2 CDNs,
|
|
9
|
+
one for your API endpoint deployments, and one for your developer portal.
|
|
10
|
+
|
|
11
|
+
This document outlines the configurations you need to add to your Akamai CDNs to
|
|
12
|
+
set them up to access your API gateway and developer portal.
|
|
13
|
+
|
|
14
|
+
All configurations in this guide were done on the Akamai Property Manager, see
|
|
15
|
+
the
|
|
16
|
+
[Akamai docs](https://techdocs.akamai.com/property-mgr/docs/know-your-around)
|
|
17
|
+
for more details.
|
|
18
|
+
|
|
19
|
+
### Domains
|
|
20
|
+
|
|
21
|
+
Before you configure the CDN for your API Gateway and Developer Portal, you will
|
|
22
|
+
to decide how you would like your domains to be set up. Generally, you will
|
|
23
|
+
provision two types of domains - a static domain for production and wildcard
|
|
24
|
+
domains for preview environments.
|
|
25
|
+
|
|
26
|
+
For preview environments, you will use wildcard domains so that each environment
|
|
27
|
+
(normally each git branch) will have its own subdomain. For example, you might
|
|
28
|
+
use `*.api.example.com` for the API gateway and `*.dev.example.com` for the
|
|
29
|
+
developer portal. This will allow you to have URLs for each environment like
|
|
30
|
+
`https://my-environment-123.api.example.com` and
|
|
31
|
+
`https://my-environment-123.dev.example.com`.
|
|
32
|
+
|
|
33
|
+
For production, you will want to use friendly domains like `api.example.com` and
|
|
34
|
+
`developers.example.com`. Some customers also choose to host environments like
|
|
35
|
+
staging on custom domains as well. This is up to you, just let your Zuplo
|
|
36
|
+
account manager know how you would like to set up your domains.
|
|
37
|
+
|
|
38
|
+
The setup for both configurations is the same, but the domain name and
|
|
39
|
+
certificates will be different.
|
|
40
|
+
|
|
41
|
+
### Prerequisites
|
|
42
|
+
|
|
43
|
+
1. Provision the domains that you would like these CDNs to have and certificates
|
|
44
|
+
for those domains, according to the domain section.
|
|
45
|
+
2. Request the Origin URLs for your API gateway and developer portal from your
|
|
46
|
+
Zuplo account manager.
|
|
47
|
+
3. Let your Zuplo account manager know what hostnames/domains you will be using
|
|
48
|
+
in your CDNs.
|
|
49
|
+
|
|
50
|
+
## API Gateway CDN
|
|
51
|
+
|
|
52
|
+
This section guides you on how to configure your API Gateway CDN.
|
|
53
|
+
|
|
54
|
+
Add the API gateway domain you provisioned to the Property Hostname for the API
|
|
55
|
+
Gateway CDN. See the Akamai docs on
|
|
56
|
+
[configuring HTTPS host names](https://techdocs.akamai.com/property-mgr/docs/serve-content-over-https).
|
|
57
|
+
|
|
58
|
+
An example of how you might configure your API Gateway CDN domains for your
|
|
59
|
+
preview environment and your production environment is below. Note that for your
|
|
60
|
+
development environment CDN, you would need the wildcard domain since many
|
|
61
|
+
development environments are named things like
|
|
62
|
+
"api-main-someuuid.your-account.zuplo.work".
|
|
63
|
+
|
|
64
|
+

|
|
65
|
+
|
|
66
|
+
In this example, the preview environment domain is the wildcard domain
|
|
67
|
+
`*.zuplo.apidemo.org`, and the production domain is `ftest.zuplo.apidemo.org`.
|
|
68
|
+
|
|
69
|
+
After configuring the CDN domains, make the following behavior changes:
|
|
70
|
+
|
|
71
|
+
1. Create a Set Variable behavior with the following configurations (also shown
|
|
72
|
+
in the screenshot below):
|
|
73
|
+
|
|
74
|
+
a. Create a variable. This is called PMUSER_REPLACE_URL in the example below,
|
|
75
|
+
but you can name this anything. This is used for a URL REGEX replacement to
|
|
76
|
+
forward the proper host header to the Zuplo Origin.
|
|
77
|
+
|
|
78
|
+
b. The "Create Value From" field should be "Extract".
|
|
79
|
+
|
|
80
|
+
c. The "Get Data From" field should be "Request Header".
|
|
81
|
+
|
|
82
|
+
d. The "Header Name" field should be "Host".
|
|
83
|
+
|
|
84
|
+
e. The "Operation" field should be "Substitute (Regular Expression)".
|
|
85
|
+
|
|
86
|
+
f. The "Regex" field should be ^([^.]+)\..\*$.
|
|
87
|
+
|
|
88
|
+
g. The "Replacement" field should be something like
|
|
89
|
+
$1.your-account.zuplo.work. This is modeled off the origin URL. For example,
|
|
90
|
+
if the origin URL is "cname.your-account.zuplo.work", then the replacement
|
|
91
|
+
should be $1.your-account.zuplo.work.
|
|
92
|
+
|
|
93
|
+
h. Case Sensitive and Global Substitution should be set to "Off".
|
|
94
|
+
|
|
95
|
+

|
|
96
|
+
|
|
97
|
+
2. Configure the Origin URL to point to the URL given to you by Zuplo for your
|
|
98
|
+
API gateway. Ensure that the Forward Host Header is configured to be a Custom
|
|
99
|
+
Value, and the value should be the variable you created in the previous step.
|
|
100
|
+
This would look something similar to below:
|
|
101
|
+

|
|
102
|
+
|
|
103
|
+
3. Turn on Content Targeting (Edgescape) in the Geolocation rule in the Property
|
|
104
|
+
Manager Sidebar.
|
|
105
|
+

|
|
106
|
+
4. Enable all Allowed Methods rules (POST, OPTIONS, PUT, DELETE, PATCH) in the
|
|
107
|
+
Property Manager sidebar.
|
|
108
|
+
|
|
109
|
+
## Developer Portal CDN
|
|
110
|
+
|
|
111
|
+
This section guides you on how to set up the Developer Portal CDN.
|
|
112
|
+
|
|
113
|
+
Add the Developer Portal gateway domain you provisioned to the Property Hostname
|
|
114
|
+
for the API Gateway CDN. See the Akamai docs on
|
|
115
|
+
[configuring HTTPS host names](https://techdocs.akamai.com/property-mgr/docs/serve-content-over-https).
|
|
116
|
+
This is done similarly to your API gateway CDN hostname configuration, but with
|
|
117
|
+
the domains you provisioned for your Developer Portal.
|
|
118
|
+
|
|
119
|
+
An example of how you might configure your Developer Portal CDN domains for your
|
|
120
|
+
preview environment and your production environment is below.
|
|
121
|
+
|
|
122
|
+

|
|
123
|
+
|
|
124
|
+
In this example, the preview environment domain is the wildcard domain
|
|
125
|
+
`*.zuplo.apidemo.org`, and the production domain is `ftest.zuplo.apidemo.org`.
|
|
126
|
+
|
|
127
|
+
Under the Default Rule page, add the following behaviors:
|
|
128
|
+
|
|
129
|
+
1. Configure the origin URL to be the URL given to be the one given to you by
|
|
130
|
+
Zuplo for your Developer Portal. This will look similarly to how you
|
|
131
|
+
configured it for your API Gateway CDN. Take note that the Forward Host
|
|
132
|
+
header should also be set as the Origin Hostname.
|
|
133
|
+
|
|
134
|
+
2. Modify Incoming Request Header behavior, with the following fields:
|
|
135
|
+
- Action: Add
|
|
136
|
+
- Select Header Name: Other
|
|
137
|
+
- Custom Header Name: `X-Forwarded-Host`
|
|
138
|
+
- Header Value: `\{\{builtin.AK_HOST\}\}`.
|
|
139
|
+
|
|
140
|
+
This should look like the picture below:
|
|
141
|
+
|
|
142
|
+

|
|
143
|
+
|
|
144
|
+
3. Caching, which should have the following configurations: Caching Option
|
|
145
|
+
should be set to "Honor origin Cache-Control and Expires", Force Validation
|
|
146
|
+
of stale objects should be set to "Always revalidate with origin", Default
|
|
147
|
+
Maxage should be set to 0 seconds, and all the Cache-Control header
|
|
148
|
+
directives should be enabled. This will look like below:
|
|
149
|
+
|
|
150
|
+

|
|
151
|
+
|
|
152
|
+
Congratulations, you've set up your Akamai CDN to serve your API Gateway and
|
|
153
|
+
Developer Portal! At this point, you should be able to test that these things
|
|
154
|
+
are working by either hitting an endpoint in your API gateway (e.g.,
|
|
155
|
+
mygateway.com/my/endpoint), or navigating to a page in your developer portal
|
|
156
|
+
(e.g., myportal.com/home).
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Managed Dedicated: Architecture"
|
|
3
|
+
sidebar_label: Architecture
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Zuplo's managed dedicated instances are highly available, scalable, and secure.
|
|
7
|
+
With a managed dedicated instance of Zuplo, your API Gateway runs on isolated
|
|
8
|
+
instances and, when running on a cloud provider that supports it, a dedicated
|
|
9
|
+
VPC. This document outlines the components and architecture of a managed
|
|
10
|
+
dedicated instance of a Zuplo API Gateway.
|
|
11
|
+
|
|
12
|
+
## Components
|
|
13
|
+
|
|
14
|
+
A managed dedicated instance of Zuplo consists of the following components:
|
|
15
|
+
|
|
16
|
+
- **API Gateway**: The API Gateway is the core component of Zuplo. It receives
|
|
17
|
+
incoming requests, routes them to the appropriate backend, and returns the
|
|
18
|
+
response to the client. The API Gateway handles authentication, authorization,
|
|
19
|
+
rate limiting, and other features.
|
|
20
|
+
- **Gateway Services**: Zuplo, being a highly distributed API Gateway, uses
|
|
21
|
+
services to facilitate features such as
|
|
22
|
+
[Rate Limiting](../articles/step-2-add-rate-limiting.mdx) and
|
|
23
|
+
[API Key Authentication](../articles/api-key-management.mdx).
|
|
24
|
+
- **Control Plane**: The Control Plane manages the configuration of the API
|
|
25
|
+
Gateway. It deploys new configurations, manages the lifecycle of the API
|
|
26
|
+
Gateway, and monitors its health.
|
|
27
|
+
- **Analytics and Logging**: Zuplo provides analytics and logging for your API
|
|
28
|
+
Gateway. This includes request/response logging, error logging, and analytics
|
|
29
|
+
on request volume, latency, and other metrics.
|
|
30
|
+
- **Developer Portal**: The Developer Portal is a web-based interface that
|
|
31
|
+
enables developers to interact with your API. It provides documentation,
|
|
32
|
+
testing tools, and other features to help developers integrate with your API.
|
|
33
|
+
|
|
34
|
+
## Custom requirements
|
|
35
|
+
|
|
36
|
+
Customize a managed dedicated instance of Zuplo to meet your specific
|
|
37
|
+
requirements. Examples include:
|
|
38
|
+
|
|
39
|
+
- **Regions & Availability Zones** - Zuplo can deploy to multiple regions,
|
|
40
|
+
availability zones, or data centers to provide high availability and low
|
|
41
|
+
latency.
|
|
42
|
+
- **Developer Portal Hosting** - Zuplo manages the developer portal hosting from
|
|
43
|
+
a CDN. By default, the developer portal's static assets serve from a global
|
|
44
|
+
CDN. However, you can configure it to use only regional CDN locations if
|
|
45
|
+
required.
|
|
46
|
+
- **Networking** - Zuplo can deploy with a variety of network configurations. To
|
|
47
|
+
learn more, see [Networking](./networking.mdx).
|
|
48
|
+
- **Disabling Features** - Zuplo can disable unnecessary features for specific
|
|
49
|
+
use cases or those that don't meet security or compliance requirements. For
|
|
50
|
+
example, if you prefer custom analytics over the built-in API analytics, you
|
|
51
|
+
can disable the built-in analytics. When disabled, Zuplo stops collecting or
|
|
52
|
+
storing analytics data for the APIs.
|
|
53
|
+
- **Custom Logging & Monitoring** - Zuplo can integrate with your existing
|
|
54
|
+
logging and monitoring systems. Logs and other data go directly from the API
|
|
55
|
+
Gateway to your logging provider. Zuplo doesn't collect or store this data.
|
|
56
|
+
|
|
57
|
+
## Security
|
|
58
|
+
|
|
59
|
+
All deployment models of Zuplo are secure and provide isolation between each
|
|
60
|
+
customer and environment. Managed dedicated instances of Zuplo add the ability
|
|
61
|
+
for you to customize the networking and connectivity to meet your specific
|
|
62
|
+
security requirements.
|
|
63
|
+
|
|
64
|
+
- **IAM Authorization**: Managed dedicated instances of Zuplo can use the IAM
|
|
65
|
+
capabilities to control traffic between the API Gateway and other services.
|
|
66
|
+
- **Encryption**: Zuplo encrypts data both in transit and at rest. TLS secures
|
|
67
|
+
all data sent to or from the API Gateway. Zuplo encrypts stored data at rest.
|
|
68
|
+
- **Access Control**: Zuplo provides robust authentication and access control
|
|
69
|
+
mechanisms. You control who has access to your API Gateway management
|
|
70
|
+
capabilities, what they can do, and what data they can access.
|
|
71
|
+
- **Audit Logs**: Zuplo provides detailed audit logs of all management
|
|
72
|
+
operations. You can see who did what, when they did it, and what data they
|
|
73
|
+
accessed. Additionally, Zuplo maintains internal audit logs of all activity
|
|
74
|
+
performed by the Zuplo team.
|
|
75
|
+
|
|
76
|
+
## Architecture
|
|
77
|
+
|
|
78
|
+
The architecture of a managed dedicated instance of Zuplo provides you with all
|
|
79
|
+
the benefits of a SaaS platform while giving you the control and isolation of a
|
|
80
|
+
dedicated instance. The architecture is highly available, scalable, and secure.
|
|
81
|
+
|
|
82
|
+
The following diagram shows the high-level architecture of a managed dedicated
|
|
83
|
+
instance of Zuplo and how the components interact with each other.
|
|
84
|
+
|
|
85
|
+
<Diagram height="h-64">
|
|
86
|
+
<DiagramNode id="client">Client</DiagramNode>
|
|
87
|
+
<DiagramGroup id="dedicated-vpc" label="Dedicated VPC">
|
|
88
|
+
<DiagramNode id="gateway" variant="zuplo">
|
|
89
|
+
Zuplo API Gateway
|
|
90
|
+
</DiagramNode>
|
|
91
|
+
<DiagramNode id="services" variant="zuplo">
|
|
92
|
+
Gateway Services
|
|
93
|
+
</DiagramNode>
|
|
94
|
+
</DiagramGroup>
|
|
95
|
+
<DiagramGroup id="customer-vpc" label="Customer VPC">
|
|
96
|
+
<DiagramNode id="backend">Backend</DiagramNode>
|
|
97
|
+
</DiagramGroup>
|
|
98
|
+
<DiagramNode id="control" variant="zuplo">
|
|
99
|
+
Control Plane
|
|
100
|
+
</DiagramNode>
|
|
101
|
+
<DiagramEdge from="client" to="gateway" />
|
|
102
|
+
<DiagramEdge from="gateway" to="backend" />
|
|
103
|
+
<DiagramEdge from="gateway" to="services" fromSide="bottom" toSide="top" />
|
|
104
|
+
<DiagramEdge from="control" to="gateway" />
|
|
105
|
+
</Diagram>
|
|
106
|
+
|
|
107
|
+
### Deployments
|
|
108
|
+
|
|
109
|
+
When you deploy to your managed dedicated instance of Zuplo, you upload your
|
|
110
|
+
source code and configuration files to the Control Plane. The Control Plane then
|
|
111
|
+
deploys your API Gateway to the appropriate infrastructure. The API Gateway
|
|
112
|
+
deploys to multiple nodes in multiple regions to provide high availability and
|
|
113
|
+
low latency. If you run in multiple regions, the Control Plane manages the
|
|
114
|
+
deployment to each region without any downtime.
|
|
115
|
+
|
|
116
|
+
If you use Zuplo's Developer Portal, the control plane also deploys the web
|
|
117
|
+
application that powers the Developer Portal. The Developer Portal hosts on a
|
|
118
|
+
CDN to provide low latency access to end-users. The CDN configuration can be
|
|
119
|
+
customized to meet your specific requirements.
|
|
120
|
+
|
|
121
|
+
<Diagram height="h-56">
|
|
122
|
+
<DiagramNode id="source">Source Control</DiagramNode>
|
|
123
|
+
<DiagramNode id="control" variant="zuplo">
|
|
124
|
+
Control Plane
|
|
125
|
+
</DiagramNode>
|
|
126
|
+
<DiagramNode id="gateway" variant="zuplo">
|
|
127
|
+
Zuplo API Gateway
|
|
128
|
+
</DiagramNode>
|
|
129
|
+
<DiagramNode id="portal" variant="zuplo">
|
|
130
|
+
Dev Portal
|
|
131
|
+
</DiagramNode>
|
|
132
|
+
<DiagramEdge from="source" to="control" label="Deploy" />
|
|
133
|
+
<DiagramEdge from="control" to="gateway" />
|
|
134
|
+
<DiagramEdge from="control" to="portal" />
|
|
135
|
+
</Diagram>
|
|
136
|
+
|
|
137
|
+
### Multiple regions
|
|
138
|
+
|
|
139
|
+
It's common practice to deploy your API Gateway to multiple regions to provide
|
|
140
|
+
higher availability, lower latency, and meet regulatory requirements. Zuplo can
|
|
141
|
+
deploy your API Gateway to multiple regions and manage the deployment to each
|
|
142
|
+
region without any downtime.
|
|
143
|
+
|
|
144
|
+
When you deploy your API Gateway to multiple regions, Zuplo uses a global load
|
|
145
|
+
balancer to route traffic to the closest region. This provides low latency
|
|
146
|
+
access to your APIs for end-users around the world. The load balancer also
|
|
147
|
+
handles failover in case of an outage in one region.
|
|
148
|
+
|
|
149
|
+
<Diagram height="h-64">
|
|
150
|
+
<DiagramNode id="client">Client</DiagramNode>
|
|
151
|
+
<DiagramNode id="lb">Load Balancer</DiagramNode>
|
|
152
|
+
<DiagramNode id="region1" variant="zuplo">
|
|
153
|
+
API Gateway (Region 1)
|
|
154
|
+
</DiagramNode>
|
|
155
|
+
<DiagramNode id="region2" variant="zuplo">
|
|
156
|
+
API Gateway (Region 2)
|
|
157
|
+
</DiagramNode>
|
|
158
|
+
<DiagramNode id="region3" variant="zuplo">
|
|
159
|
+
API Gateway (Region 3)
|
|
160
|
+
</DiagramNode>
|
|
161
|
+
<DiagramEdge from="client" to="lb" />
|
|
162
|
+
<DiagramEdge from="lb" to="region1" />
|
|
163
|
+
<DiagramEdge from="lb" to="region2" />
|
|
164
|
+
<DiagramEdge from="lb" to="region3" />
|
|
165
|
+
</Diagram>
|
|
166
|
+
|
|
167
|
+
### Instances
|
|
168
|
+
|
|
169
|
+
Customers running managed dedicated Zuplo typically have multiple instances of
|
|
170
|
+
Zuplo deployed. The most common case is to have a production instance and a
|
|
171
|
+
non-production instance. The non-production instance is used to deploy and test
|
|
172
|
+
changes to your API Gateway before deploying them to production. Each instance
|
|
173
|
+
can run many different deployments. A typical setup, the production instance
|
|
174
|
+
hosts only the production deployment, while the non-production instance hosts
|
|
175
|
+
many other deployments (for example staging, development, QA, or any feature
|
|
176
|
+
branch deployments).
|
|
177
|
+
|
|
178
|
+
Each instance operates in isolation and runs within its own VPC or network.
|
|
179
|
+
|
|
180
|
+
It's possible to have multiple instances depending on your requirements. For
|
|
181
|
+
example, some customers have separate instances for production, staging, and
|
|
182
|
+
development. For most customers, though, a single production and a single
|
|
183
|
+
development instance are sufficient.
|
|
184
|
+
|
|
185
|
+
During the onboarding process to Zuplo, an account manager will assist in
|
|
186
|
+
determining the configuration that best meets the requirements. The project will
|
|
187
|
+
be pre-configured with the agreed-upon number of instances, and rules will be
|
|
188
|
+
set up to determine where each environment gets deployed.
|
|
189
|
+
|
|
190
|
+
The most common setup is where your `main` branch deploys to production and all
|
|
191
|
+
other branches deploy to a non-production environment, but this is fully
|
|
192
|
+
customizable.
|
|
193
|
+
|
|
194
|
+
<Diagram height="h-56">
|
|
195
|
+
<DiagramNode id="source">Source Control</DiagramNode>
|
|
196
|
+
<DiagramNode id="control" variant="zuplo">
|
|
197
|
+
Control Plane
|
|
198
|
+
</DiagramNode>
|
|
199
|
+
<DiagramNode id="prod" variant="zuplo">
|
|
200
|
+
API Gateway (Production)
|
|
201
|
+
</DiagramNode>
|
|
202
|
+
<DiagramNode id="non-prod" variant="zuplo">
|
|
203
|
+
API Gateway (Non-Production)
|
|
204
|
+
</DiagramNode>
|
|
205
|
+
<DiagramEdge from="source" to="control" label="Deploy" />
|
|
206
|
+
<DiagramEdge from="control" to="prod" />
|
|
207
|
+
<DiagramEdge from="control" to="non-prod" />
|
|
208
|
+
</Diagram>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Managed Dedicated: Custom Domains"
|
|
3
|
+
sidebar_label: Custom Domains
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Configuration of custom domains with your managed dedicated instance of Zuplo
|
|
7
|
+
varies depending on how your
|
|
8
|
+
[instance networking is configured](./networking.mdx). For customers using their
|
|
9
|
+
Zuplo API Gateway as the ingress the bulk of the configuration is managed by
|
|
10
|
+
Zuplo. You will be provided an IP address or CNAME to point your DNS to.
|
|
11
|
+
Normally, Zuplo manages the SSL certificates in this type of configuration as
|
|
12
|
+
well.
|
|
13
|
+
|
|
14
|
+
Custom configurations are supported with Zuplo Managed Dedicated instances. For
|
|
15
|
+
example, you can use your own SSL certificates, or if you are using your own VPC
|
|
16
|
+
as the ingress, you can even use your own IP addresses.
|
|
17
|
+
|
|
18
|
+
For the full details on how to configure custom domains with your managed
|
|
19
|
+
dedicated instance of Zuplo, please contact your account manager.
|
|
20
|
+
|
|
21
|
+
## Preview environments
|
|
22
|
+
|
|
23
|
+
By default, preview environments are deployed to a wildcard subdomain managed by
|
|
24
|
+
Zuplo. For example, if your account name is `acme`, the preview environment URLs
|
|
25
|
+
are hosted at `*.acme.zuplo.work`, so each environment will have a URL like
|
|
26
|
+
`https://my-environment-123.acme.zuplo.work`.
|
|
27
|
+
|
|
28
|
+
Some customer want to use their own domain for preview environments. For
|
|
29
|
+
example, `*.dev.acme.com`. This is supported with Zuplo Managed Dedicated
|
|
30
|
+
instances. Depending on your cloud provider, this may require you to create a
|
|
31
|
+
wildcard certificate for your domain.
|