CINXE.COM
ngrok blog: News and tutorials for devs, SREs, and platform engineers
<!DOCTYPE html><!-- Last Published: Wed Mar 19 2025 18:00:36 GMT+0000 (Coordinated Universal Time) --><html data-wf-domain="webflow.ngrok.com" data-wf-page="650320fb1373496e89e6d235" data-wf-site="63ed4bc7a4b189da942a6b8c" lang="en"><head><meta charset="utf-8"/><title>ngrok blog: News and tutorials for devs, SREs, and platform engineers</title><meta content="Discover valuable articles on networking, development, and APIs on the ngrok blog. Stay informed with tips, updates, and technical insights." name="description"/><meta content="ngrok blog: News and tutorials for devs, SREs, and platform engineers" property="og:title"/><meta content="Discover valuable articles on networking, development, and APIs on the ngrok blog. Stay informed with tips, updates, and technical insights." property="og:description"/><meta content="https://cdn.prod.website-files.com/63ed4bc7a4b189da942a6b8c/675a253959cbf67a8aac0290_web-feature-1200x628-blog.png" property="og:image"/><meta content="ngrok blog: News and tutorials for devs, SREs, and platform engineers" property="twitter:title"/><meta content="Discover valuable articles on networking, development, and APIs on the ngrok blog. Stay informed with tips, updates, and technical insights." property="twitter:description"/><meta content="https://cdn.prod.website-files.com/63ed4bc7a4b189da942a6b8c/675a253959cbf67a8aac0290_web-feature-1200x628-blog.png" property="twitter:image"/><meta property="og:type" content="website"/><meta content="summary_large_image" name="twitter:card"/><meta content="width=device-width, initial-scale=1" name="viewport"/><meta content="google-site-verification=j0vjqZkk-L879XcfC6AN7gsHUlNADGphHmjhoZ80fGw" name="google-site-verification"/><link href="https://cdn.prod.website-files.com/63ed4bc7a4b189da942a6b8c/css/ngrok.87a40ecdf.min.css" rel="stylesheet" type="text/css"/><link href="https://fonts.googleapis.com" rel="preconnect"/><link href="https://fonts.gstatic.com" rel="preconnect" crossorigin="anonymous"/><script src="https://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js" type="text/javascript"></script><script type="text/javascript">WebFont.load({ google: { families: ["IBM Plex Mono:regular,500,600"] }});</script><script type="text/javascript">!function(o,c){var n=c.documentElement,t=" w-mod-";n.className+=t+"js",("ontouchstart"in o||o.DocumentTouch&&c instanceof DocumentTouch)&&(n.className+=t+"touch")}(window,document);</script><link href="https://cdn.prod.website-files.com/63ed4bc7a4b189da942a6b8c/63ef8624e010d9861920be4e_ngrok-favicon.svg" rel="shortcut icon" type="image/x-icon"/><link href="https://cdn.prod.website-files.com/63ed4bc7a4b189da942a6b8c/63ef861b114f2bbd3e038582_Untitled%20design%20(3).svg" rel="apple-touch-icon"/><script async="" src="https://www.googletagmanager.com/gtag/js?id=G-94F3ZL4GLW"></script><script type="text/javascript">window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments);}gtag('js', new Date());gtag('set', 'developer_id.dZGVlNj', true);gtag('config', 'G-94F3ZL4GLW');</script><!-- Preconnect, prefetch, preload (pagespeed improvements) --> <link rel="preconnect" href="https://d3e54v103j8qbb.cloudfront.net"> <link rel="preconnect" href="https://cdn.jsdelivr.net"> <link rel="preconnect" href="https://global.ketchcdn.com"> <link rel="preconnect" href="https://cdn.ketchjs.com"> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com"> <link rel="preconnect" href="https://assets-global.website-files.com"> <link rel="preconnect" href="https://assets.website-files.com"> <link rel="preconnect" href="https://www.googletagmanager.com"> <link rel="preconnect" href="https://www.google-analytics.com"> <link rel="preconnect" href="https://www.clarity.ms"> <link rel="preconnect" href="https://hubspotonwebflow.com"> <link rel="preconnect" href="https://js.hs-scripts.com"> <link rel="preconnect" href="https://s.hs-analytics.net"> <link rel="preconnect" href="https://js.hs-banner.com"> <link rel="preconnect" href="https://js.hscollectedforms.net"> <link rel="preconnect" href="https://forms.hscollectedforms.net"> <link rel="preconnect" href="https://track.hubspot.com"> <link rel="preconnect" href="https://static.zdassets.com"> <link rel="preconnect" href="https://ekr.zdassets.com"> <link rel="preconnect" href="https://ngrok.zendesk.com"> <link rel="preconnect" href="https://tag.clearbitscripts.com"> <link rel="preconnect" href="https://x.clearbitjs.com"> <link rel="preconnect" href="https://app.clearbit.com"> <!-- Ketch Consent Platform --> <style> #lanyard_root [class^="content"] { padding-top: 12px; padding-bottom: 12px; line-height: 14px; } #lanyard_root [class^="titleWrapper"] { margin-bottom: 8px; } #lanyard_root #banner-description { min-height: min-content; } #lanyard_root [class^="buttons"] button { padding-top: 4px; padding-bottom: 4px; } #lanyard_root #banner-description + div { display: none; } #lanyard_root [role="dialog"] > [class^="root"]:not(:last-child) { border-bottom: 1px solid #d9d9d9; } #lanyard_root [role="dialog"] > [class^="root"]:last-child { border-top: 1px solid #d9d9d9; } </style> <script type="text/javascript"> window.semaphore = window.semaphore || []; window.ketch = function () { window.semaphore.push(arguments); }; </script> <script type="text/javascript" defer async src="https://global.ketchcdn.com/web/v2/config/ngrok/ngrok_ketch_tag/boot.js"></script> <!-- END Ketch --> <!-- Please keep this css code to improve the font quality--> <style> * { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } </style> <!-- Google Tag Manager --> <script> (function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ "gtm.start": new Date().getTime(), event: "gtm.js" }); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != "dataLayer" ? "&l=" + l : ""; j.async = true; j.src = "https://www.googletagmanager.com/gtm.js?id=" + i + dl; f.parentNode.insertBefore(j, f); })(window, document, "script", "dataLayer", "GTM-P4F37ZW"); </script> <!-- End Google Tag Manager --> <meta property="og:url" content="https://ngrok.com/blog"/> <link rel="canonical" href="https://ngrok.com/blog"> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "WebPage", "name": "Blog", "description": "Catch up on the latest news and see how we’re building the future of ingress-as-a-service", "url": "https://ngrok.com/blog" } </script><script type="text/javascript">window.__WEBFLOW_CURRENCY_SETTINGS = {"currencyCode":"USD","symbol":"$","decimal":".","fractionDigits":2,"group":",","template":"{{wf {\"path\":\"symbol\",\"type\":\"PlainText\"} }} {{wf {\"path\":\"amount\",\"type\":\"CommercePrice\"} }} {{wf {\"path\":\"currencyCode\",\"type\":\"PlainText\"} }}","hideDecimalForWholeNumbers":false};</script></head><body><div class="page-wrapper"><div class="global-styles w-embed"><style> .post-wysiwyg-content .text-rich-text h1, .post-wysiwyg-content .text-rich-text h2, .post-wysiwyg-content .text-rich-text h3, .post-wysiwyg-content .text-rich-text h4, .post-wysiwyg-content .text-rich-text h5, .post-wysiwyg-content .text-rich-text h6 { margin-bottom: 0.50em; margin-top: 1.50em; padding-bottom: 0; padding-top: 0; } /* Get rid of top margin on first element in any rich text element */ .w-richtext > :not(div):first-child, .w-richtext > div:first-child > :first-child { margin-top: 0 !important; } /* Get rid of bottom margin on last element in any rich text element */ .w-richtext>:last-child, .w-richtext ol li:last-child, .w-richtext ul li:last-child { margin-bottom: 0 !important; } /* Make the following elements inherit typography styles from the parent and not have hardcoded values. Important: You will not be able to style for example "All Links" in Designer with this CSS applied. Uncomment this CSS to use it in the project. Leave this message for future hand-off. */ /* a, .w-input, .w-select, .w-tab-link, .w-nav-link, .w-dropdown-btn, .w-dropdown-toggle, .w-dropdown-link { color: inherit; text-decoration: inherit; font-size: inherit; } */ /* Prevent all click and hover interaction with an element */ .pointer-events-off { pointer-events: none; } /* Enables all click and hover interaction with an element */ .pointer-events-on { pointer-events: auto; } /* Snippet enables you to add class of div-square which creates and maintains a 1:1 dimension of a div.*/ .div-square::after { content: ""; display: block; padding-bottom: 100%; } /*Hide focus outline for main content element*/ main:focus-visible { outline: -webkit-focus-ring-color auto 0px; } /* Make sure containers never lose their center alignment*/ .container-medium, .container-small, .container-large { margin-right: auto !important; margin-left: auto !important; } /*Reset selects, buttons, and links styles*/ .w-input, .w-select, a { color: inherit; text-decoration: inherit; font-size: inherit; } /*Apply "..." after 3 lines of text */ .text-style-3lines { display: -webkit-box; overflow: hidden; -webkit-line-clamp: 3; -webkit-box-orient: vertical; } /* Apply "..." after 2 lines of text */ .text-style-2lines { display: -webkit-box; overflow: hidden; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } /* Apply "..." at 100% width */ .truncate-width { width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } /* Removes native scrollbar */ .no-scrollbar { -ms-overflow-style: none; // IE 10+ overflow: -moz-scrollbars-none; // Firefox } .no-scrollbar::-webkit-scrollbar { display: none; // Safari and Chrome } /* Adds inline flex display */ .display-inlineflex { display: inline-flex; } /* These classes are never overwritten */ .hide { display: none !important; } @media screen and (max-width: 991px) { .hide, .hide-tablet { display: none !important; } } @media screen and (max-width: 767px) { .hide-mobile-landscape{ display: none !important; } } @media screen and (max-width: 479px) { .hide-mobile{ display: none !important; } } .margin-0 { margin: 0rem !important; } .padding-0 { padding: 0rem !important; } .spacing-clean { padding: 0rem !important; margin: 0rem !important; } .margin-top { margin-right: 0rem !important; margin-bottom: 0rem !important; margin-left: 0rem !important; } .padding-top { padding-right: 0rem !important; padding-bottom: 0rem !important; padding-left: 0rem !important; } .margin-right { margin-top: 0rem !important; margin-bottom: 0rem !important; margin-left: 0rem !important; } .padding-right { padding-top: 0rem !important; padding-bottom: 0rem !important; padding-left: 0rem !important; } .margin-bottom { margin-top: 0rem !important; margin-right: 0rem !important; margin-left: 0rem !important; } .padding-bottom { padding-top: 0rem !important; padding-right: 0rem !important; padding-left: 0rem !important; } .margin-left { margin-top: 0rem !important; margin-right: 0rem !important; margin-bottom: 0rem !important; } .padding-left { padding-top: 0rem !important; padding-right: 0rem !important; padding-bottom: 0rem !important; } .margin-horizontal { margin-top: 0rem !important; margin-bottom: 0rem !important; } .padding-horizontal { padding-top: 0rem !important; padding-bottom: 0rem !important; } .margin-vertical { margin-right: 0rem !important; margin-left: 0rem !important; } .padding-vertical { padding-right: 0rem !important; padding-left: 0rem !important; } .hljs-copy-wrapper code { font-size: 14px !important; border-radius: 5px; } /* ===== BL CUSTOM CSS ===== */ /* Code snippets inside blog post */ div[fs-richtext-element="rich-text"] code:not([class]) { --tw-bg-opacity: 1; background-color: rgb(244 244 245/var(--tw-bg-opacity)); font-weight: 500; font-family: "IBM Plex Mono",Courier New,Courier,monospace; font-size: 0.95rem; padding-left: 0.4rem; padding-right: 0.4rem; border-radius: 0.2rem; } div[fs-richtext-element="rich-text"] pre.w-code-block { background: #f9fafb !important; border: 1px solid hsl(222 12% 83.9% / 1); border-radius: .375rem; } div[fs-richtext-element="rich-text"] pre.w-code-block code.hljs { font-weight: 500; font-family: "IBM Plex Mono",Courier New,Courier,monospace; font-size: 0.9rem; border: 0px; color: hsl(236 20% 11.5%/0.75); } .hljs-attr, .hljs-number { color: hsl(228 82% 55%); } .hljs-string, .hljs-bullet, .hljs-meta{ color: hsl(236 20% 11.5%/0.75); } .hljs-literal { color: hsl(40.6 96.1% 40.4%); font-weight: 600; } .hljs-subst { color: hsl(142.1 76.2% 36.3%); } /* Utilities */ .checkmark-bullets ul { list-style-image: url('https://cdn.prod.website-files.com/63ed4bc7a4b189da942a6b8c/65497815cad2197f542d7e80_checkmark-green.svg'); } .checkmark-bullets-white ul { list-style-image: url('https://cdn.prod.website-files.com/63ed4bc7a4b189da942a6b8c/642304f99e59e83efbb28106_Frame%203590.svg'); padding-left: 30px; } .wrapper-pricing-features .feature-col2 ul { padding-left: 0; } .add-on-list-item .feature-col2 li { background-image: url('https://cdn.prod.website-files.com/63ed4bc7a4b189da942a6b8c/65e21760a46d5aadb4300c8c_checkmark-pricing.svg'); background-repeat: no-repeat; list-style-type: none; margin-bottom: 1rem; padding-left: 1.75rem; } .included-feature-body ul { padding-left: 0; } .included-feature-body li { background-image: url('https://cdn.prod.website-files.com/63ed4bc7a4b189da942a6b8c/65fdc717b315140401454ca2_checkmark-pricing-2.svg'); background-repeat: no-repeat; background-position: -0.25rem -0.25rem; list-style-type: none; margin-bottom: 1rem; margin-bottom: 0.5rem; padding-left: 1.75rem; } .add-on-list-item .feature-col2 h3 { color: var(--black); font-size: 1.25rem; font-weight: 700; line-height: 1.5rem; } .wrapper-pricing-highlight-section figcaption {display: none !important;} .w-richtext a {text-decoration: underline;} .cards-border-solid .cmp-card {border: 1px solid var(--bl-colors-border-light);} .card-heading-color-black .card-heading {color: var(--black)} .card-heading-weight-semibold .card-heading {font-weight: 600 !important;} .bl-card-bg-gray-light .cmp-card {background-color: var(--bl-colors-border-light); margin-top: 0;} .bl-card-bg-gray-light .item-latest {border-radius: 0;} .bl-card-bg-gray-light div:empty {display: none;} .rich-text-li-space-increase li {margin-bottom: 1.25em;} .card-boost .gap-6, .card-boost-red .gap-6 {gap: 24px;} .hide-icon .ic-40-40 {display: none !important;} .card-pricing-feature p + ul {margin-top: 0;} :root .w-dyn-empty {padding: 0;} .card-to-blog-list-item .item-latest.cmp-card { border-color: var(--secondary-gray); border-radius: 0; border-width: 0 0 1px 0; padding-left: 0; padding-right: 0; } .card-to-blog-list-item .text-24-28.text-weight-bold.text-color-blue.card-heading { color: var(--black-soft); font-weight: normal; } .hero-force-wrap .hero-col1, .hero-force-wrap .hero-col2 { flex-basis: 100%; margin-bottom: var(--activetheme--spc-lg); } /* Forms */ :root .w-richtext-figure-type-image figcaption { display: none !important; } /* === VARIABLES ===*/ :root { --bl-colors-black: #0B0C0E; --bl-colors-blueng-500: #2e54ea; --bl-colors-gray-400: #8C91A2; --bl-colors-gray-600: #535968; --bl-colors-grayng-500: #595959; --bl-colors-peach-500: #fa8080; --bl-colors-red-500: #E53E3E; --bl-colors-white: #ffffff; --bl-fontSizes-txs: calc(12rem / 16); --bl-fontSizes-tsm: calc(14rem / 16); --bl-fontSizes-tmd: calc(15rem / 16); --bl-fontSizes-tlg: calc(16rem / 16); --bl-lineHeights-txs: 1.5; --bl-lineHeights-tsm: 1.5; --bl-lineHeights-tmd: 1.5; --bl-lineHeights-tlg: 1.5; --bl-fontWeights-thin: font-weight: 200; --bl-fontWeights-light: font-weight: 300; --bl-fontWeights-normal: font-weight: 400; --bl-fontWeights-medium: font-weight: 500; --bl-fontWeights-semibold: font-weight: 600; --bl-fontWeights-bold: font-weight: 700; --bl-radii-none: 0; --bl-radii-sm: 0.125rem; --bl-radii-base: 0.25rem; --bl-radii-md: 0.25rem; --bl-radii-lg: 0.5rem; --bl-radii-xl: 0.75rem; --bl-radii-2xl: 1rem; --bl-radii-3xl: 1.25rem; --bl-radii-4xl: 1.5rem; --bl-radii-full: 100%; --bl-space-xs: calc(8rem / 16); --bl-space-sm: calc(12rem / 16); --bl-space-smmd: calc(16rem / 16); --bl-space-md: calc(24rem / 16); } /* === FIELDS ===*/ .hs-richtext, .hs-form-field { margin-bottom: var(--bl-space-sm); } .hs-form-field * { font-size: var(--bl-fontSizes-tlg); line-height: var(--bl-lineHeights-tlg); } .legal-consent-container .hs-richtext, .hs-form-field label { font-weight: var(--bl-fontWeights-normal); } .hs-form-booleancheckbox label { font-weight: var(--bl-fontWeights-normal); } .hs-form-field input[type="date"], .hs-form-field input[type="email"], .hs-form-field input[type="number"], .hs-form-field input[type="phone"], .hs-form-field input[type="tel"], .hs-form-field input[type="text"], .hs-form-field textarea, .hs-form-field select { background-color: var(--bl-colors-white); border: 1px solid var(--bl-colors-gray-400); color: var(--bl-colors-black); padding: var(--bl-space-xs) var(--bl-space-smmd) !important; width: 100% !important; } .hs-form fieldset { max-width: 100% !important; } .hbspt-form .inputs-list { list-style-type: none; margin-bottom: var(--bl-space-sm); padding-left: 0; } .hbspt-form .inputs-list .hs-form-booleancheckbox { padding-left: 0; } .hbspt-form .inputs-list input[type="checkbox"] { height: 1.5rem; } div[class*="hs_LEGAL_CONSENT"] .inputs-list { margin: 0; } .hs_use_cases { clear: both; color: var(--bl-colors-black); width: 100% !important; } .hs_use_cases > label { font-weight: 600 !important; } .hs_use_cases ul { margin-bottom: 0 !important; margin-top: 0 !important; } .hs_use_cases li { margin-bottom: 0 !important; margin-top: 0; } .hs_use_cases .hs-form-checkbox-display span { display: inline-block; margin-left: .5rem; vertical-align: top; width: calc(100% - 1.5rem); } .hs_other_use_case { margin-left: 2rem; margin-top: -1rem; width: calc(100% - 2rem) !important; } /* === CONTENT === */ .hs-field-desc { color: var(--bl-colors-black); line-height: var(--activetheme--lh-base); margin-bottom: .5rem; } .hs-richtext { font-size: var(--bl-fontSizes-tsm); line-height: var(--bl-lineHeights-tsm); } .hs-richtext a { text-decoration: underline; } .legal-consent-container .hs-richtext { color: var(--bl-colors-grayng-500); font-size: var(--bl-fontSizes-txs); line-height: var(--bl-lineHeights-txs); } li.hs-form-booleancheckbox label span { font-size: var(--bl-fontSizes-tsm); } /* === STATES === */ .hs-form-field .hs-input.invalid { border-color: var(--bl-colors-red-500); } ::placeholder { color: var(--bl-colors-black); } .hs-form-field .is-placeholder { color: var(--bl-colors-black); } .hs-error-msgs { color: var(--bl-colors-red-500); } /* === CAPTCHA AND SUBMIT === */ .hs-submit { float: right; } .hs_recaptcha::before { clear: both; content: ""; display: block; padding-top: var(--bl-space-sm); } .hs_recaptcha:after, .form-component:after { clear: both; content: ""; display: block; } @media (max-width: 767px) { .hs-submit { float: none; } .hs-submit { text-align: center; } .hs-submit .hs-button { margin-left: auto; margin-right: auto; max-width: 400px; width: 100%; } } input[type="submit"] { background-color: var(--bl-colors-blueng-500); border-color: transparent; border-radius: .625rem; border-width: 0; color: var(--bl-colors-white); cursor: pointer; font-size: var(--bl-fontSizes-tlg); line-height: var(--bl-lineHeights-tlg); padding: 0.75rem 1.5rem; } .submitted-message { font-size: 1.1em; } .submitted-message a { text-decoration: underline; } .submitted-message p:first-child:before { content: "✅"; display: inline; padding-right: .5em; } img[src="https://21124867.fs1.hubspotusercontent-na1.net/hubfs/21124867/ngrok-email-header-03.png"] {display: none !important;} /* Noms ngrok marketing design system */ :root { --grid-gap-size: var(--activetheme--spc-lg); --grid-gap-count: 0; } @media screen and (min-width: 962px) { .twelfths-1 {width: calc( 1*(100% / 12) - (var(--grid-gap-count)*var(--grid-gap-size)/(12/1)) );} .twelfths-2 {width: calc( 2*(100% / 12) - (var(--grid-gap-count)*var(--grid-gap-size)/(12/2)) );} .twelfths-3 {width: calc( 3*(100% / 12) - (var(--grid-gap-count)*var(--grid-gap-size)/(12/3)) );} .twelfths-4 {width: calc( 4*(100% / 12) - (var(--grid-gap-count)*var(--grid-gap-size)/(12/4)) );} .twelfths-5 {width: calc( 5*(100% / 12) - (var(--grid-gap-count)*var(--grid-gap-size)/(12/5)) );} .twelfths-5 {width: calc( 5*(100% / 12) - (var(--grid-gap-count)*var(--grid-gap-size)/(12/5)) );} .twelfths-6 {width: calc( 6*(100% / 12) - (var(--grid-gap-count)*var(--grid-gap-size)/(12/6)) );} .twelfths-7 {width: calc( 7*(100% / 12) - (var(--grid-gap-count)*var(--grid-gap-size)/(12/7)) );} .twelfths-8 {width: calc( 8*(100% / 12) - (var(--grid-gap-count)*var(--grid-gap-size)/(12/8)) );} .twelfths-9 {width: calc( 9*(100% / 12) - (var(--grid-gap-count)*var(--grid-gap-size)/(12/9)) );} .twelfths-10 {width: calc( 10*(100% / 12) - (var(--grid-gap-count)*var(--grid-gap-size)/(12/10)) );} .twelfths-11 {width: calc( 11*(100% / 12) - (var(--grid-gap-count)*var(--grid-gap-size)/(12/11)) );} .twelfths-12 {width: 100%;} .max-twelfths-1 {max-width: calc( 1*(100% / 12) - (var(--grid-gap-count)*var(--grid-gap-size)/(12/1)) );} .max-twelfths-2 {max-width: calc( 2*(100% / 12) - (var(--grid-gap-count)*var(--grid-gap-size)/(12/2)) );} .max-twelfths-3 {max-width: calc( 3*(100% / 12) - (var(--grid-gap-count)*var(--grid-gap-size)/(12/3)) );} .max-twelfths-4 {max-width: calc( 4*(100% / 12) - (var(--grid-gap-count)*var(--grid-gap-size)/(12/4)) );} .max-twelfths-5 {max-width: calc( 5*(100% / 12) - (var(--grid-gap-count)*var(--grid-gap-size)/(12/5)) );} .max-twelfths-6 {max-width: calc( 6*(100% / 12) - (var(--grid-gap-count)*var(--grid-gap-size)/(12/6)) );} .max-twelfths-7 {max-width: calc( 7*(100% / 12) - (var(--grid-gap-count)*var(--grid-gap-size)/(12/7)) );} .max-twelfths-8 {max-width: calc( 8*(100% / 12) - (var(--grid-gap-count)*var(--grid-gap-size)/(12/8)) );} .max-twelfths-9 {max-width: calc( 9*(100% / 12) - (var(--grid-gap-count)*var(--grid-gap-size)/(12/9)) );} .max-twelfths-10 {max-width: calc( 10*(100% / 12) - (var(--grid-gap-count)*var(--grid-gap-size)/(12/10)) );} .max-twelfths-11 {max-width: calc( 11*(100% / 12) - (var(--grid-gap-count)*var(--grid-gap-size)/(12/11)) );} .max-twelfths-12 {max-width: calc( 12*(100% / 12) - (var(--grid-gap-count)*var(--grid-gap-size)/(12/12)) );} } @media screen and (max-width: 768px) { .twelfths-1, .twelfths-2, .twelfths-3, .twelfths-4, .twelfths-5, .twelfths-6, .twelfths-7, .twelfths-8, .twelfths-9, .twelfths-10, .twelfths-11, .twelfths-12, .max-twelfths-1, .max-twelfths-2, .max-twelfths-3, .max-twelfths-4, .max-twelfths-5, .max-twelfths-6, .max-twelfths-7, .max-twelfths-8, .max-twelfths-9, .max-twelfths-10, .max-twelfths-11, .max-twelfths-12 { flex-basis: 100%; width: 100%; } } .main-wrapper .nom-section-base:first-child { margin-top: 60px; } .nom-section-base .w-richtext p { line-height: var(--activetheme--lh-base); } .nom-button-wrapper-100 a[class*="button"] { width: 100%; } .nom-body-xl .hero-body, .nom-body-xl .nom-zigzag-body { line-height: var(--activetheme--lh-sm); font-size: var(--activetheme--fs-2xl); } </style></div><div class="navbar-block"><div class="navbar-block-new"><div class="theme-switch w-embed"><style> .nav-link, .dropdown-nav-title { color: white; opacity: 70%; } .logo { color: white; } .menu-burger, .menu-burger.w--open { color: #ffffff; } @media screen and (max-width: 991px) { .nav-menu-inner { background: #242526; } .nav-menu { background: #242526; } .text-dropdown { color: white; opacity: 70%; } .text-dropdown { color: white; opacity: 70%; } } .bg-dark { display: block; } </style></div><section class="announcement_banner"><div class="padding-global background-color-primary-dark"><div class="announcement_content-wrapper"><div class="announcement_content"><div class="w-dyn-list"><div role="list" class="w-dyn-items"><div role="listitem" class="w-dyn-item"><a id="news-banner-link" href="https://ngrok.com/blog-post/introducing-cloud-endpoints" class="news-banner-link w-inline-block"><div class="text-block-5">New Cloud Endpoints: persistent, always-on, and managed centrally from the dash or API →</div></a></div></div></div></div></div></div></section><div data-animation="over-right" data-collapse="medium" data-duration="400" data-easing="ease" data-easing2="ease" role="banner" class="navbar w-nav"><div class="embed-pop-up-copy w-embed"><style> .right-pop-up { background-color: #000000; } .left-pop-up { background-color: #0E0228; } .blck{ background-color: #1B1033; } .embed-color-white{ color: white; } .embed-color-gray{ color: #A1A0CF; } .indicator-on{ background-color: white; } </style></div><div class="container-large-nav"><div class="wrapper-nav"><a href="/" class="link-logo w-nav-brand"><div class="logo w-embed"><svg width="86" height="32" viewBox="0 0 86 32" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M29.1488 10.9052C27.962 9.57399 26.494 8.90381 24.7495 8.90381C23.6742 8.90381 22.6837 9.11352 21.7734 9.53752C20.8632 9.96151 20.078 10.536 19.4131 11.27C18.7528 12.0085 18.2308 12.8656 17.8471 13.8595C17.4633 14.8488 17.2715 15.9202 17.2715 17.0782C17.2715 18.2134 17.45 19.2483 17.8024 20.1829C18.1594 21.113 18.6546 21.9108 19.2971 22.5764C19.9396 23.242 20.7026 23.7618 21.586 24.1356C22.4695 24.5095 23.4377 24.6964 24.4907 24.6964C24.9681 24.6964 25.4098 24.6599 25.8114 24.5915C26.2129 24.5231 26.5967 24.4092 26.9625 24.2542C27.3284 24.0946 27.6853 23.894 28.0423 23.6524C28.3948 23.4062 28.7651 23.0962 29.1488 22.7269V26.6796H29.1443V27.0625H24.2721L20.6089 31.2751V32H34.3557V30.2903V9.31868H29.1488V10.9052ZM29.1354 18.1496C28.9525 18.569 28.7115 18.9383 28.4171 19.2529C28.1181 19.5674 27.7656 19.8091 27.3552 19.9869C26.9447 20.1647 26.5074 20.2513 26.0479 20.2513C25.566 20.2513 25.1198 20.1647 24.7093 19.9869C24.2988 19.8091 23.9419 19.5674 23.6429 19.2529C23.344 18.9383 23.112 18.569 22.938 18.1496C22.764 17.7301 22.6792 17.2697 22.6792 16.7819C22.6792 16.3123 22.7684 15.87 22.9514 15.4597C23.1343 15.0494 23.3752 14.6938 23.6876 14.3884C23.9954 14.0829 24.3479 13.8413 24.7495 13.6543C25.151 13.4674 25.5838 13.3762 26.0434 13.3762C26.4851 13.3762 26.909 13.4629 27.3239 13.6407C27.7344 13.8139 28.0958 14.0601 28.4037 14.3747C28.7115 14.6893 28.9525 15.0494 29.1399 15.4597C29.3228 15.87 29.4121 16.3214 29.4121 16.8138C29.4076 17.2834 29.3184 17.7301 29.1354 18.1496Z" fill="currentColor"/> <path d="M14.6213 11.1515C14.3447 10.8187 14.0324 10.5315 13.6977 10.2762C13.3988 10.0528 13.082 9.85674 12.7385 9.69718C12.5734 9.61967 12.3994 9.55584 12.2164 9.49658C11.9532 9.40995 11.6676 9.35069 11.3731 9.30054H7.66092L5.20693 12.1591V11.8263V9.3598H0V24.4412H5.20693V17.9719V14.2653H5.92974H7.37983H10.0346H10.0971L10.5031 14.2562V24.4366H15.71V15.0039C15.71 14.2015 15.6342 13.4857 15.4825 12.8566C15.3308 12.232 15.0452 11.6667 14.6213 11.1515Z" fill="currentColor"/> <path d="M49.6685 9.3186H45.809C45.809 9.3186 44.4303 9.3186 43.9886 9.3186L41.7309 11.9173V9.3186H36.5195V24.4H41.7399L41.7443 14.3062H43.4577H45.5324L49.6685 9.52832V9.3186V9.3186Z" fill="currentColor"/> <path d="M77.8051 16.2849L84.9262 9.57402V9.31871H78.0639L72.6027 14.7577V0H67.3958V24.3955H72.6027V18.2545L78.3272 24.3955H85.3333V24.1083L77.8051 16.2849Z" fill="currentColor"/> <path d="M63.3262 11.0374C62.532 10.3216 61.5906 9.76544 60.5064 9.36425C59.4221 8.96305 58.2487 8.76245 56.9815 8.76245C55.6965 8.76245 54.5097 8.96761 53.4299 9.37792C52.3457 9.78824 51.4132 10.3536 50.6234 11.0648C49.8382 11.7805 49.2224 12.624 48.7807 13.5951C48.339 14.5661 48.1204 15.6102 48.1204 16.7271C48.1204 17.9626 48.339 19.0842 48.7807 20.0917C49.2224 21.0993 49.8292 21.9655 50.6101 22.6904C51.3864 23.4153 52.31 23.976 53.3853 24.3681C54.4606 24.7602 55.6296 24.9562 56.8968 24.9562C58.1818 24.9562 59.3731 24.7602 60.4796 24.3681C61.5817 23.976 62.5276 23.4244 63.3128 22.704C64.0981 21.9883 64.7183 21.1357 65.169 20.1464C65.6196 19.1571 65.8472 18.0675 65.8472 16.8685C65.8472 15.674 65.6241 14.5798 65.1868 13.5905C64.7406 12.6057 64.1204 11.7532 63.3262 11.0374ZM60.0736 18.1769C59.8906 18.5963 59.6497 18.9656 59.3552 19.2802C59.0563 19.5948 58.7038 19.8364 58.2933 20.0142C57.8784 20.192 57.4456 20.2786 56.986 20.2786C56.5264 20.2786 56.0892 20.192 55.6742 20.0142C55.2637 19.8364 54.9068 19.5948 54.6123 19.2802C54.3134 18.9656 54.0769 18.5963 53.894 18.1769C53.711 17.7575 53.6218 17.2924 53.6218 16.7818C53.6218 16.3122 53.711 15.87 53.894 15.4597C54.0769 15.0494 54.3134 14.6892 54.6123 14.3747C54.9112 14.0601 55.2637 13.8139 55.6742 13.6406C56.0892 13.4628 56.522 13.3762 56.986 13.3762C57.4456 13.3762 57.8828 13.4628 58.2933 13.6406C58.7038 13.8139 59.0607 14.0601 59.3552 14.3747C59.6542 14.6892 59.8906 15.0585 60.0736 15.4779C60.2565 15.8974 60.3457 16.3442 60.3457 16.8137C60.3457 17.3016 60.2565 17.7575 60.0736 18.1769Z" fill="currentColor"/> </svg></div></a><nav role="navigation" class="nav-menu-copy nav-menu-bl w-nav-menu"><div class="nav-menu-inner"><div class="nav-links nav-links-bl"><a href="/our-product/platform" class="nav-link nav-link-bl w-nav-link">Platform</a><div data-hover="true" data-delay="0" class="drop-link-wrapper w-dropdown"><div class="head-drop head-drop-bl w-dropdown-toggle"><a href="/use-cases" class="link-block-3 w-inline-block"><div class="text-block-4">Use cases</div></a><div class="ic-16x16 desktop-hide w-embed"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M6 13L11 8L6 3" stroke="CurrentColor" stroke-width="2"/> </svg></div></div><aside class="dropdown-list-2 w-dropdown-list"><div class="pop-up-menu"><div id="w-node-_0317a723-def7-78b8-800f-77c3e5a07016-e5a06ffa" class="color-wrapper-drop size-pop-up mobile-menu-height mobile-menu-height-bl"><div class="container-large-menu top"><div class="main-grid-copy _100"><div class="grid-pop _100 grid-pop-bl"><div class="w-layout-hflex nav-dropdown-group"><div class="div-block-40"><a href="https://ngrok.com/use-cases#development" class="w-inline-block"><div class="nav-dropdown-uc-section-head">ngrok for development</div></a><div class="w-dyn-list"><div role="list" class="w-dyn-items"><div role="listitem" class="w-dyn-item"><div class="top-nav-dropdown-uc-list-item"><a href="/use-cases/developer-preview" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/6679eb465cc1904fde624de3_icon-uc-dev-previews.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">Developer Preview</div></div></a></div></div><div role="listitem" class="w-dyn-item"><div class="top-nav-dropdown-uc-list-item"><a href="/use-cases/webhook-testing" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/6679d60b6c8e34d766b5ce13_icon-uc-webhook-testing.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">Webhook Testing</div></div></a></div></div></div></div></div><div class="div-block-41"><a href="https://ngrok.com/use-cases#production" class="w-inline-block"><div class="nav-dropdown-uc-section-head">ngrok for production</div></a><div class="w-dyn-list"><div role="list" class="collection-list-17 w-dyn-items"><div role="listitem" class="collection-item-13 w-dyn-item"><div class="top-nav-dropdown-uc-list-item"><a href="/use-cases/api-gateway" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/666cae8c8cf878a8b673375e_icon-uc-api-gateway.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">API Gateway</div></div></a></div></div><div role="listitem" class="collection-item-13 w-dyn-item"><div class="top-nav-dropdown-uc-list-item"><a href="/use-cases/device-gateway" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/667442887492bd1247e44186_icon-uc-device-gateway.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">Device Gateway</div></div></a></div></div><div role="listitem" class="collection-item-13 w-dyn-item"><div class="top-nav-dropdown-uc-list-item"><a href="/use-cases/global-load-balancer" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/6675c1ae09326601909fb334_icon-uc-glb.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">Global Load Balancer</div></div></a></div></div><div role="listitem" class="collection-item-13 w-dyn-item"><div class="top-nav-dropdown-uc-list-item"><a href="/use-cases/identity-aware-proxy" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/6675c9af5cc9e9c9c81626d9_icon-uc-iap.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">Identity-Aware Proxy</div></div></a></div></div><div role="listitem" class="collection-item-13 w-dyn-item"><div class="top-nav-dropdown-uc-list-item"><a href="/use-cases/kubernetes-operator" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/6674842b9b041daf04544e57_icon-uc-kubernetes-ingress.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">Kubernetes Operator</div></div></a></div></div><div role="listitem" class="collection-item-13 w-dyn-item"><div class="top-nav-dropdown-uc-list-item"><a href="/use-cases/site-to-site-connectivity" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/666a0aba8900e94ee9112d13_icon-uc-s2sc.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">Site-to-site connectivity</div></div></a></div></div></div></div></div><div class="top-nav-dropdown-uc-highlight"><div class="nav-dropdown-uc-section-head mb-0">More from ngrok</div><a href="/contact" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed4bc7a4b189da942a6b8c/668466e051116b5919b6e028_icon-talk-to-an-expert-1.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">Talk to an expert</div></div></a><a href="https://ngrok.com/resources/office-hours" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed4bc7a4b189da942a6b8c/670d6b29debdfa4790ad9ec0_nav-icon-any-office-hours.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">Join our Office Hours</div></div></a></div></div></div></div></div></div></div></aside></div><a href="/blog" aria-current="page" class="nav-link nav-link-bl w-nav-link w--current">Blog</a><div data-hover="true" data-delay="0" class="drop-link-wrapper w-dropdown"><div class="head-drop head-drop-bl w-dropdown-toggle"><a href="/resources" class="link-block-3 w-inline-block"><div class="text-block-4">Resources</div></a><div class="ic-16x16 desktop-hide w-embed"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M6 13L11 8L6 3" stroke="CurrentColor" stroke-width="2"/> </svg></div></div><aside class="dropdown-list-2 w-dropdown-list"><div class="pop-up-menu"><div id="w-node-_0317a723-def7-78b8-800f-77c3e5a07068-e5a06ffa" class="color-wrapper-drop size-pop-up mobile-menu-height mobile-menu-height-bl"><div class="container-large-menu top"><div class="main-grid-copy _100"><div class="grid-pop _100 grid-pop-bl"><div class="w-layout-hflex nav-dropdown-group"><div class="nav-content-fullwidth"><div class="top-nav-content-list-wrapper w-dyn-list"><div role="list" class="top-nav-content-list w-dyn-items"><div role="listitem" class="top-nav-content-list-item twelfths-4 w-dyn-item"><div class="top-nav-dropdown-uc-list-item"><a href="https://ngrok.com/customers" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/670d52f3ca5f2d2451c7a191_nav-icon-resources-customers.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">Customers</div></div></a></div></div><div role="listitem" class="top-nav-content-list-item twelfths-4 w-dyn-item"><div class="top-nav-dropdown-uc-list-item"><a href="https://ngrok.com/security" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/670d5327be3ce0e0b57a216e_nav-icon-resources-security.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">Security</div></div></a></div></div><div role="listitem" class="top-nav-content-list-item twelfths-4 w-dyn-item"><div class="top-nav-dropdown-uc-list-item"><a href="https://ngrok.com/docs/guides/" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/670d53e944cb3daf0c40b5ac_nav-icon-resources-guides.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">Guides</div></div></a></div></div><div role="listitem" class="top-nav-content-list-item twelfths-4 w-dyn-item"><div class="top-nav-dropdown-uc-list-item"><a href="https://ngrok.com/partners" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/670d53f3dafae8ac23abeafd_nav-icon-resources-partners.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">Partners</div></div></a></div></div><div role="listitem" class="top-nav-content-list-item twelfths-4 w-dyn-item"><div class="top-nav-dropdown-uc-list-item"><a href="https://ngrok.com/resources/events" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/670d5438ca5f2d2451c8b595_nav-icon-resources-events.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">Live Events</div></div></a></div></div><div role="listitem" class="top-nav-content-list-item twelfths-4 w-dyn-item"><div class="top-nav-dropdown-uc-list-item"><a href="https://ngrok.com/resources/videos" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/670d578991275ea25a9d5435_nav-icon-resources-videos.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">Videos</div></div></a></div></div></div></div></div><div class="top-nav-dropdown-uc-highlight"><div class="nav-dropdown-uc-section-head mb-0">More from ngrok</div><a href="/contact" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed4bc7a4b189da942a6b8c/668466e051116b5919b6e028_icon-talk-to-an-expert-1.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">Talk to an expert</div></div></a><a href="https://ngrok.com/resources/office-hours" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed4bc7a4b189da942a6b8c/670d6b29debdfa4790ad9ec0_nav-icon-any-office-hours.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">Join our Office Hours</div></div></a></div></div></div></div></div></div></div></aside></div><div data-hover="true" data-delay="0" class="drop-link-wrapper w-dropdown"><div class="head-drop head-drop-bl w-dropdown-toggle"><a href="https://ngrok.com/docs" class="link-block-3 w-inline-block"><div class="text-block-4">Docs</div></a><div class="ic-16x16 desktop-hide w-embed"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M6 13L11 8L6 3" stroke="CurrentColor" stroke-width="2"/> </svg></div></div><aside class="dropdown-list-2 w-dropdown-list"><div class="pop-up-menu"><div id="w-node-_0317a723-def7-78b8-800f-77c3e5a0709b-e5a06ffa" class="color-wrapper-drop size-pop-up mobile-menu-height mobile-menu-height-bl"><div class="container-large-menu top"><div class="main-grid-copy _100"><div class="grid-pop _100 grid-pop-bl"><div class="w-layout-hflex nav-dropdown-group"><div class="nav-content-fullwidth"><div class="collection-list-wrapper-16 w-dyn-list"><div role="list" class="collection-list-20 w-dyn-items"><div role="listitem" class="twelfths-4 w-dyn-item"><div class="top-nav-dropdown-uc-list-item"><a href="https://ngrok.com/docs/" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/670d64219e1d8b79c8600a88_nav-icon-docs-all.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">View all docs</div></div></a></div></div><div role="listitem" class="twelfths-4 w-dyn-item"><div class="top-nav-dropdown-uc-list-item"><a href="https://ngrok.com/docs/api/" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/670d64a46cc4da4f80fbfa90_nav-icon-docs-api.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">API</div></div></a></div></div><div role="listitem" class="twelfths-4 w-dyn-item"><div class="top-nav-dropdown-uc-list-item"><a href="https://ngrok.com/docs/integrations/" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/670d64d02546ff96a07e2a20_nav-icon-docs-integrations.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">Integrations</div></div></a></div></div><div role="listitem" class="twelfths-4 w-dyn-item"><div class="top-nav-dropdown-uc-list-item"><a href="https://ngrok.com/docs/getting-started/" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/670d652fd549ce6167f8c206_nav-icon-docs-quickstart.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">Quickstart</div></div></a></div></div><div role="listitem" class="twelfths-4 w-dyn-item"><div class="top-nav-dropdown-uc-list-item"><a href="https://ngrok.com/docs/agent-sdks/" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/670d657de93ebfc0a3ac5586_nav-icon-docs-sdk.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">SDKs</div></div></a></div></div><div role="listitem" class="twelfths-4 w-dyn-item"><div class="top-nav-dropdown-uc-list-item"><a href="https://github.com/ngrok" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/670d65bc0d0eafc0e88dfee8_nav-icon-docs-github.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">GitHub</div></div></a></div></div></div></div></div><div class="top-nav-dropdown-uc-highlight"><div class="nav-dropdown-uc-section-head mb-0">More from ngrok</div><a href="/contact" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed4bc7a4b189da942a6b8c/668466e051116b5919b6e028_icon-talk-to-an-expert-1.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">Talk to an expert</div></div></a><a href="https://ngrok.com/resources/office-hours" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed4bc7a4b189da942a6b8c/670d6b29debdfa4790ad9ec0_nav-icon-any-office-hours.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">Join our Office Hours</div></div></a></div></div></div></div></div></div></div></aside></div><a href="https://ngrok.com/pricing" class="nav-link nav-link-bl w-nav-link">Pricing</a><div data-hover="true" data-delay="0" class="drop-link-wrapper w-dropdown"><div class="head-drop head-drop-bl w-dropdown-toggle"><a href="https://download.ngrok.com/" class="link-block-3 w-inline-block"><div class="text-block-4">Get ngrok</div></a><div class="ic-16x16 desktop-hide w-embed"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M6 13L11 8L6 3" stroke="CurrentColor" stroke-width="2"/> </svg></div></div><aside class="dropdown-list-2 w-dropdown-list"><div class="pop-up-menu"><div id="w-node-_0317a723-def7-78b8-800f-77c3e5a070e0-e5a06ffa" class="color-wrapper-drop size-pop-up mobile-menu-height mobile-menu-height-bl"><div class="container-large-menu top"><div class="main-grid-copy _100"><div class="grid-pop _100 grid-pop-bl"><div class="w-layout-hflex nav-dropdown-group"><div class="nav-content-fullwidth"><div class="collection-list-wrapper-16 w-dyn-list"><div role="list" class="collection-list-20 w-dyn-items"><div role="listitem" class="twelfths-4 w-dyn-item"><div class="top-nav-dropdown-uc-list-item"><a href="https://download.ngrok.com/" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/670d684549010795adbee0cd_nav-get-download.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">Download</div></div></a></div></div><div role="listitem" class="twelfths-4 w-dyn-item"><div class="top-nav-dropdown-uc-list-item"><a href="https://ngrok.com/docs/agent-sdks/" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/670d686c01bbc0b5b9d3485d_nav-get-sdk.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">SDKs</div></div></a></div></div><div role="listitem" class="twelfths-4 w-dyn-item"><div class="top-nav-dropdown-uc-list-item"><a href="https://ngrok.com/contact" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/670d6984012d90f4ebe61576_nav-get-contact.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">Contact Us</div></div></a></div></div><div role="listitem" class="twelfths-4 w-dyn-item"><div class="top-nav-dropdown-uc-list-item"><a href="https://ngrok.com/docs/getting-started/" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/670d652fd549ce6167f8c206_nav-icon-docs-quickstart.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">Getting started</div></div></a></div></div></div></div></div><div class="top-nav-dropdown-uc-highlight"><div class="nav-dropdown-uc-section-head mb-0">More from ngrok</div><a href="/contact" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed4bc7a4b189da942a6b8c/668466e051116b5919b6e028_icon-talk-to-an-expert-1.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">Talk to an expert</div></div></a><a href="https://ngrok.com/resources/office-hours" class="nav-item-resource w-inline-block"><div class="currentcolor ic-30x30"><img src="https://cdn.prod.website-files.com/63ed4bc7a4b189da942a6b8c/670d6b29debdfa4790ad9ec0_nav-icon-any-office-hours.svg" loading="lazy" alt=""/></div><div class="gap-2"><div class="nav-dropdown-uc-heading">Join our Office Hours</div></div></a></div></div></div></div></div></div></div></aside></div></div></div><div class="nav-buttons-wrapper hide-desktop"><a href="https://dashboard.ngrok.com/login" class="button-secondary btn-small width-100 w-button">Login</a><a href="https://dashboard.ngrok.com/signup" class="button-primary btn-small width-100 text-style-nowrap w-button">Sign up</a></div></nav><div class="nav-buttons-wrapper hide-tablet"><a id="header_logIn" href="https://dashboard.ngrok.com/login" class="button-secondary btn-small width-100 w-button">Log in</a><a id="header_signUp" href="https://dashboard.ngrok.com/signup" class="button-primary btn-small width-100 text-style-nowrap w-button">Sign up</a></div><div class="menu-burger w-nav-button"><div class="menu-close w-embed"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M13.2139 12L19.3662 4.66641C19.4694 4.54453 19.3826 4.35938 19.2233 4.35938H17.3529C17.2428 4.35938 17.1373 4.40859 17.0647 4.49297L11.9904 10.5422L6.91623 4.49297C6.84592 4.40859 6.74045 4.35938 6.62795 4.35938H4.75763C4.59826 4.35938 4.51154 4.54453 4.61467 4.66641L10.767 12L4.61467 19.3336C4.59156 19.3608 4.57674 19.394 4.57196 19.4293C4.56718 19.4647 4.57264 19.5006 4.5877 19.533C4.60275 19.5653 4.62676 19.5926 4.65689 19.6117C4.68701 19.6308 4.72197 19.6408 4.75763 19.6406H6.62795C6.7381 19.6406 6.84357 19.5914 6.91623 19.507L11.9904 13.4578L17.0647 19.507C17.135 19.5914 17.2404 19.6406 17.3529 19.6406H19.2233C19.3826 19.6406 19.4694 19.4555 19.3662 19.3336L13.2139 12Z" fill="currentColor"/> </svg></div><div class="menu-open w-embed"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M21.1875 3.75H2.8125C2.70937 3.75 2.625 3.83437 2.625 3.9375V5.4375C2.625 5.54062 2.70937 5.625 2.8125 5.625H21.1875C21.2906 5.625 21.375 5.54062 21.375 5.4375V3.9375C21.375 3.83437 21.2906 3.75 21.1875 3.75ZM21.1875 18.375H2.8125C2.70937 18.375 2.625 18.4594 2.625 18.5625V20.0625C2.625 20.1656 2.70937 20.25 2.8125 20.25H21.1875C21.2906 20.25 21.375 20.1656 21.375 20.0625V18.5625C21.375 18.4594 21.2906 18.375 21.1875 18.375ZM21.1875 11.0625H2.8125C2.70937 11.0625 2.625 11.1469 2.625 11.25V12.75C2.625 12.8531 2.70937 12.9375 2.8125 12.9375H21.1875C21.2906 12.9375 21.375 12.8531 21.375 12.75V11.25C21.375 11.1469 21.2906 11.0625 21.1875 11.0625Z" fill="currentColor"/> </svg></div></div></div></div><div class="bg-wrapper"><div class="bg-light"></div><div class="bg-dark"></div></div></div></div></div><main class="main-wrapper"><section class="nom-section-base"><div class="nom-bg-gradient-left-small-wrap"><img src="https://cdn.prod.website-files.com/63ed4bc7a4b189da942a6b8c/6658f90c18389e5ec542811e_gradient-tile.png" loading="lazy" sizes="(max-width: 991px) 100vw, 1322px" srcset="https://cdn.prod.website-files.com/63ed4bc7a4b189da942a6b8c/6658f90c18389e5ec542811e_gradient-tile-p-500.png 500w, https://cdn.prod.website-files.com/63ed4bc7a4b189da942a6b8c/6658f90c18389e5ec542811e_gradient-tile-p-800.png 800w, https://cdn.prod.website-files.com/63ed4bc7a4b189da942a6b8c/6658f90c18389e5ec542811e_gradient-tile-p-1080.png 1080w, https://cdn.prod.website-files.com/63ed4bc7a4b189da942a6b8c/6658f90c18389e5ec542811e_gradient-tile-p-1600.png 1600w, https://cdn.prod.website-files.com/63ed4bc7a4b189da942a6b8c/6658f90c18389e5ec542811e_gradient-tile.png 1974w" alt="" class="nom-bg-gradient-small-image"/></div><div class="w-layout-blockcontainer nom-container-base w-container"><div class="max-twelfths-8 mx-auto"><div class="w-layout-hflex nom-hero-component"><div class="w-layout-vflex nom-hero-col1"><h1 class="hero-h1">The ngrok blog</h1><div class="hero-body w-richtext"><p>Subscribe to our <a href="/newsletter">newsletter</a> or follow our <a href="https://ngrok.com/blog-post/rss.xml">RSS feed</a> for the latest news about unified ingress for development and production.</p></div></div></div></div><div class="nom-bottom-gap-smaller"></div></div></section><section class="nom-section-base nom-bg-white nom-pt-smaller"><div class="w-layout-blockcontainer nom-container-base w-container"><div class="container-small"><div class="blog1_component"><div class="blog1_list-wrapper w-dyn-list"><div role="list" class="blog1_list w-dyn-items"><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/ishan-jain" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Ishan Jain" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/67acca76fe632ec5a35ff375_ishan-jain-thumb.jpeg" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Ishan Jain</div></div></div></a><a href="/blog-post/secure-access-remote-devices" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">Modernize and secure how you access remote devices</h2></a><div class="text-size-regular padding-bottom padding-xsmall">Ditch complex SSH/RDP chains and VPNs—here's how I help folks use ngrok to create secure and dynamic access to remote services or sites with a single agent.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">March 27, 2025</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">5</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/device-gateway" class="blogpost3_tag-item w-inline-block"><div class="text-block">Device Gateway</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/joel-hans" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Joel Hans" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/66c78117e87215b0390f0a73_jhans-thumb.jpg" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Joel Hans</div></div></div></a><a href="/blog-post/ngrok-kubecon-eu-2025" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">All the ways to hang with an ngrokker (and see what they built) at KubeCon + CloudNativeCon Europe 2025</h2></a><div class="text-size-regular padding-bottom padding-xsmall">From Platform Engineering Day, to our booth at N611, to talks on Gateway API implementations and API gateway maturity, there are plenty of places to find us.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">March 20, 2025</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">3</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/kubernetes-operator" class="blogpost3_tag-item w-inline-block"><div class="text-block">Kubernetes Operator</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/gateway-api" class="blogpost3_tag-item w-inline-block"><div class="text-block">Kubernetes Gateway API</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/networking" class="blogpost3_tag-item w-inline-block"><div class="text-block">Networking</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/ishan-jain" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Ishan Jain" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/67acca76fe632ec5a35ff375_ishan-jain-thumb.jpeg" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Ishan Jain</div></div></div></a><a href="/blog-post/secure-industrial-iot-connectivity" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">How I build secure (and VPN-less!) industrial IoT connectivity</h2></a><div class="text-size-regular padding-bottom padding-xsmall">One ngrok agent per factory = secure IoT access, no open firewalls, no VPN pain. Learn how cloud endpoints simplify industrial connectivity.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">March 19, 2025</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">12</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/api-gateway" class="blogpost3_tag-item w-inline-block"><div class="text-block">API gateway</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/authentication" class="blogpost3_tag-item w-inline-block"><div class="text-block">Authentication</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/device-gateway" class="blogpost3_tag-item w-inline-block"><div class="text-block">Device Gateway</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/joel-hans" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Joel Hans" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/66c78117e87215b0390f0a73_jhans-thumb.jpg" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Joel Hans</div></div></div></a><a href="/blog-post/multicloud-api-gateways" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">Four ways multicloud breaks you (and how API gateways help)</h2></a><div class="text-size-regular padding-bottom padding-xsmall">Multicloud isn’t magic—it’s a mess of networking, configuration, security, and observability pain. API gateways can help—here’s how to fix it the easy way.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">March 11, 2025</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">8</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/api-gateway" class="blogpost3_tag-item w-inline-block"><div class="text-block">API gateway</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/joel-hans" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Joel Hans" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/66c78117e87215b0390f0a73_jhans-thumb.jpg" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Joel Hans</div></div></div></a><a href="/blog-post/api-gateway-easy-composable" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">Put your APIs online the easy and composable way</h2></a><div class="text-size-regular padding-bottom padding-xsmall">A composable API gateway means total flexibility. Learn how ngrok's endpoints and Traffic Policy make exposing, routing to, securing, and scaling APIs a cinch.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">March 6, 2025</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">8</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/api-gateway" class="blogpost3_tag-item w-inline-block"><div class="text-block">API gateway</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/nijiko-yonskai" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Nijiko Yonskai" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/641485930bfeeb275f1ef55c_nijiko-yonskai_min.png" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Nijiko Yonskai</div></div></div></a><a href="/blog-post/introducing-cloud-endpoints" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">Introducing Cloud Endpoints</h2></a><div class="text-size-regular padding-bottom padding-xsmall">Have you ever wanted an ngrok endpoint that doesn’t go offline when you get disconnected from the internet? Now possible with always-on cloud endpoints.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">February 24, 2025</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">6</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/api-gateway" class="blogpost3_tag-item w-inline-block"><div class="text-block">API gateway</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/cloud-edge" class="blogpost3_tag-item w-inline-block"><div class="text-block">Cloud edge</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/networking" class="blogpost3_tag-item w-inline-block"><div class="text-block">Networking</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/team-ngrok" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Team ngrok" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/6580aa01ff30ecc7873d650d_ngrok-author-bio-54px.png" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Team ngrok</div></div></div></a><a href="/blog-post/sam-develop-test-llm-rag" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">How ngrok helps Sam develop and test LLM-powered RAG applications</h2></a><div class="text-size-regular padding-bottom padding-xsmall">Building LLM-fueled apps? See how one AI startup uses ngrok to develop locally against remote services and safely test LLM prompt changes without breaking prod.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">February 6, 2025</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">3</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/python" class="blogpost3_tag-item w-inline-block"><div class="text-block">Python</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/joel-hans" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Joel Hans" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/66c78117e87215b0390f0a73_jhans-thumb.jpg" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Joel Hans</div></div></div></a><a href="/blog-post/unlock-remote-ai-power-with-ngrok-a-game-changer-for-developers" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">Fast and secure ingress to remote AIs with ngrok, Deepseek, and Ollama</h2></a><div class="text-size-regular padding-bottom padding-xsmall">Your simplest path to AI collaboration or development using ngrok and Deepseek with an assist from Ollama and a GPU-accelerated virtual machine.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">January 27, 2025</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">8</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/ai" class="blogpost3_tag-item w-inline-block"><div class="text-block">AI</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/russ" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Russ Savage" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/63f7a2dfbc703dbc33b197ca_russ.png" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Russ Savage</div></div></div></a><a href="/blog-post/introducing-ip-intelligence" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">Introducing IP Intelligence to control unwanted traffic</h2></a><div class="text-size-regular padding-bottom padding-xsmall">Learn how ngrok's IP Intelligence gives you powerful tools to identify and block bots, scrapers, and malicious traffic at your API gateway.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">January 15, 2025</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">7</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/api-gateway" class="blogpost3_tag-item w-inline-block"><div class="text-block">API gateway</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/networking" class="blogpost3_tag-item w-inline-block"><div class="text-block">Networking</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/traffic-inspector" class="blogpost3_tag-item w-inline-block"><div class="text-block">Traffic Inspector</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/joel-hans" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Joel Hans" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/66c78117e87215b0390f0a73_jhans-thumb.jpg" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Joel Hans</div></div></div></a><a href="/blog-post/circuit-breaker-api-gateway" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">Protect services with a circuit breaker at your API gateway</h2></a><div class="text-size-regular padding-bottom padding-xsmall">Implement circuit breaking at your API gateway to prevent cascading failures and protect services, and without having to add more complexity to your APIs.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">January 6, 2025</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">8</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/api-gateway" class="blogpost3_tag-item w-inline-block"><div class="text-block">API gateway</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/traffic-inspector" class="blogpost3_tag-item w-inline-block"><div class="text-block">Traffic Inspector</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/traffic-policy" class="blogpost3_tag-item w-inline-block"><div class="text-block">Traffic Policy</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/mandy-hubbard" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Mandy Hubbard" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/657b9fdc333718149bba6ff7_mhubbard-thumb.jpg" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Mandy Hubbard</div></div></div></a><a href="/blog-post/basic-auth-traffic-policy-action" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">Introducing the Basic Auth Traffic Policy action</h2></a><div class="text-size-regular padding-bottom padding-xsmall">Secure your endpoints with ngrok’s Basic Auth Traffic Policy, compatible with both interactive and programmatic access to your APIs or apps, in a few minutes.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">January 2, 2025</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">5</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/api-gateway" class="blogpost3_tag-item w-inline-block"><div class="text-block">API gateway</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/authentication" class="blogpost3_tag-item w-inline-block"><div class="text-block">Authentication</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/secure-tunnels" class="blogpost3_tag-item w-inline-block"><div class="text-block">Secure tunnels</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/karthik-krishnaswamy" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Karthik Krishnaswamy" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/652835319f7fddc04a9d795a_karthik-54.jpg" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Karthik Krishnaswamy</div></div></div></a><a href="/blog-post/dynamic-routing-cel" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">Dynamic routing with CEL interpolation and the forward-internal action</h2></a><div class="text-size-regular padding-bottom padding-xsmall">Simplify and scale complex traffic routing topologies by dynamically routing requests based on subdomains, headers, and other request attributes.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">December 19, 2024</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">4</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/api-gateway" class="blogpost3_tag-item w-inline-block"><div class="text-block">API gateway</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/traffic-policy" class="blogpost3_tag-item w-inline-block"><div class="text-block">Traffic Policy</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/joel-hans" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Joel Hans" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/66c78117e87215b0390f0a73_jhans-thumb.jpg" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Joel Hans</div></div></div></a><a href="/blog-post/3-problems-api-gateway-observability" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">The 3 big problems holding back API gateway observability</h2></a><div class="text-size-regular padding-bottom padding-xsmall">Deployment complexity, environment constraints, and poor debugging tools create more barriers to API gateway maturity than they do benefits.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">December 18, 2024</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">6</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/api-gateway" class="blogpost3_tag-item w-inline-block"><div class="text-block">API gateway</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/traffic-inspector" class="blogpost3_tag-item w-inline-block"><div class="text-block">Traffic Inspector</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/ryan-grant" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Ryan Grant" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/6671f94dbf32ebe3f0205db0_rgrant-cropped-thumb.jpg" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Ryan Grant</div></div></div></a><a href="/blog-post/traffic-policy-string" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">Why and how we ‘stringified’ your API gateway policies</h2></a><div class="text-size-regular padding-bottom padding-xsmall">By replacing highly typed configs with raw YAML/JSON, we’ve eliminated a major UX papercut and given you feature updates “for free.” Let’s see what’s changed.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">December 12, 2024</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">5</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/api-gateway" class="blogpost3_tag-item w-inline-block"><div class="text-block">API gateway</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/traffic-policy" class="blogpost3_tag-item w-inline-block"><div class="text-block">Traffic Policy</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/product-updates" class="blogpost3_tag-item w-inline-block"><div class="text-block">Product updates</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/joel-hans" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Joel Hans" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/66c78117e87215b0390f0a73_jhans-thumb.jpg" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Joel Hans</div></div></div></a><a href="/blog-post/developer-self-service-composability" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5"> Create a self-service app and API delivery platform with composable Traffic Policy</h2></a><div class="text-size-regular padding-bottom padding-xsmall">ngrok lets you manipulate traffic at multiple moments in the request lifecycle, allowing API developers to compose, not compromise, powerful API gateway rules.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">December 10, 2024</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">12</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/api-gateway" class="blogpost3_tag-item w-inline-block"><div class="text-block">API gateway</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/traffic-policy" class="blogpost3_tag-item w-inline-block"><div class="text-block">Traffic Policy</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/joel-hans" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Joel Hans" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/66c78117e87215b0390f0a73_jhans-thumb.jpg" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Joel Hans</div></div></div></a><a href="/blog-post/api-traffic-management-region" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">Manage traffic on a region-aware API gateway—without the networking</h2></a><div class="text-size-regular padding-bottom padding-xsmall">Build a region-aware API gateway with ngrok's Traffic Policy. Route requests, manage failover, and enforce regional compliance with simple YAML configs.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">December 4, 2024</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">10</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/api-gateway" class="blogpost3_tag-item w-inline-block"><div class="text-block">API gateway</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/traffic-policy" class="blogpost3_tag-item w-inline-block"><div class="text-block">Traffic Policy</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/networking" class="blogpost3_tag-item w-inline-block"><div class="text-block">Networking</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/mandy-hubbard" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Mandy Hubbard" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/657b9fdc333718149bba6ff7_mhubbard-thumb.jpg" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Mandy Hubbard</div></div></div></a><a href="/blog-post/verify-webhooks-with-ngroks-new-traffic-policy-action" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">Verify webhooks with ngrok’s new Traffic Policy action</h2></a><div class="text-size-regular padding-bottom padding-xsmall">Ensure secure, verified webhook interactions with ngrok’s Traffic Policy Action, enhancing protection and reliability for your endpoints.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">December 3, 2024</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">5</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/product-updates" class="blogpost3_tag-item w-inline-block"><div class="text-block">Product updates</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/secure-tunnels" class="blogpost3_tag-item w-inline-block"><div class="text-block">Secure tunnels</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/news" class="blogpost3_tag-item w-inline-block"><div class="text-block">News</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/scott-mcallister" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Scott McAllister" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/647e64a7b2a07d1916b3f7be_scott-mcallister-kcdc-2021-square-54.jpeg" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Scott McAllister</div></div></div></a><a href="/blog-post/geoblocking-api-gateway" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">How can I geoblock with an API gateway?</h2></a><div class="text-size-regular padding-bottom padding-xsmall">Use geoblocking in your API gateway to control traffic by location, enhancing security, compliance, and performance</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">November 22, 2024</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">5</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/api-gateway" class="blogpost3_tag-item w-inline-block"><div class="text-block">API gateway</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/traffic-policy" class="blogpost3_tag-item w-inline-block"><div class="text-block">Traffic Policy</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/nijiko-yonskai" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Nijiko Yonskai" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/641485930bfeeb275f1ef55c_nijiko-yonskai_min.png" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Nijiko Yonskai</div></div></div></a><a href="/blog-post/manage-traffic-traffic-policy-phases" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">Manage traffic at critical connection points with Traffic Policy phases</h2></a><div class="text-size-regular padding-bottom padding-xsmall">Learn how ngrok's phase-based Traffic Policy gives you granular traffic control in more places, from TCP connect through HTTP response, to take decisive action.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">November 21, 2024</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">8</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/product-updates" class="blogpost3_tag-item w-inline-block"><div class="text-block">Product updates</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/traffic-policy" class="blogpost3_tag-item w-inline-block"><div class="text-block">Traffic Policy</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/networking" class="blogpost3_tag-item w-inline-block"><div class="text-block">Networking</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/tammy-bailey" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Tammy Bailey" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/66d887c9fe99bf4931c144e2_tbailey-thumb.jpg" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Tammy Bailey</div></div></div></a><a href="/blog-post/agent-endpoints" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">Goodbye tunnels, hello agent endpoints</h2></a><div class="text-size-regular padding-bottom padding-xsmall">We've collapsed many flags into one for simplicity and unified naming conventions to flatten the learning curve. Join us in saying bye by updating your configs!</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">November 13, 2024</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">8</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/ngrok-agent" class="blogpost3_tag-item w-inline-block"><div class="text-block">ngrok agent</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/product-updates" class="blogpost3_tag-item w-inline-block"><div class="text-block">Product updates</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/secure-tunnels" class="blogpost3_tag-item w-inline-block"><div class="text-block">Secure tunnels</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/joel-hans" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Joel Hans" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/66c78117e87215b0390f0a73_jhans-thumb.jpg" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Joel Hans</div></div></div></a><a href="/blog-post/traffic-policy-devenv" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">Debug traffic flows with cloud endpoints and custom responses</h2></a><div class="text-size-regular padding-bottom padding-xsmall">By using the custom-response Traffic Policy action and a public endpoint, you can quickly develop new policy rules without standing up a whole infrastructure.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">November 12, 2024</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">5</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/api-gateway" class="blogpost3_tag-item w-inline-block"><div class="text-block">API gateway</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/traffic-policy" class="blogpost3_tag-item w-inline-block"><div class="text-block">Traffic Policy</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/nijiko-yonskai" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Nijiko Yonskai" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/641485930bfeeb275f1ef55c_nijiko-yonskai_min.png" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Nijiko Yonskai</div></div></div></a><a href="/blog-post/introducing-internal-endpoints" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">Flexible and expressive traffic orchestration: introducing internal endpoints</h2></a><div class="text-size-regular padding-bottom padding-xsmall">Internal endpoints are secure, non-public endpoints that end with .internal, allowing you to route traffic based on headers, paths, subdomains, and more.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">October 29, 2024</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">8</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/product-updates" class="blogpost3_tag-item w-inline-block"><div class="text-block">Product updates</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/api-gateway" class="blogpost3_tag-item w-inline-block"><div class="text-block">API gateway</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/networking" class="blogpost3_tag-item w-inline-block"><div class="text-block">Networking</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/rachel-kolavo" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Rachel Kolavo" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/65cd3cf8f95774d081cbe917_rkolavo-thumb.jpg" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Rachel Kolavo</div></div></div></a><a href="/blog-post/engineering-traffic-policy" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">How we built the Traffic Policy module and its actions</h2></a><div class="text-size-regular padding-bottom padding-xsmall">Traffic Policy is now the one true (and final!) way to shape your requests and responses. Let’s explore why we built it, how, and what it means for you.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">October 23, 2024</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">15</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/api-gateway" class="blogpost3_tag-item w-inline-block"><div class="text-block">API gateway</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/traffic-policy" class="blogpost3_tag-item w-inline-block"><div class="text-block">Traffic Policy</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/product-updates" class="blogpost3_tag-item w-inline-block"><div class="text-block">Product updates</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/joel-hans" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Joel Hans" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/66c78117e87215b0390f0a73_jhans-thumb.jpg" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Joel Hans</div></div></div></a><a href="/blog-post/api-gateway-policy-headers" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">Drop-in API gateway policy examples for manipulating headers</h2></a><div class="text-size-regular padding-bottom padding-xsmall">With these ready-for-prod Traffic Policy rules, you can boost your security, give customers SLA metrics, and create geo-aware APIs in a few lines of YAML.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">October 17, 2024</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">8</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/api-gateway" class="blogpost3_tag-item w-inline-block"><div class="text-block">API gateway</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/traffic-policy" class="blogpost3_tag-item w-inline-block"><div class="text-block">Traffic Policy</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/joel-hans" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Joel Hans" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/66c78117e87215b0390f0a73_jhans-thumb.jpg" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Joel Hans</div></div></div></a><a href="/blog-post/nuanced-rate-limiting-tns" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">How nuanced rate limiting transforms your API and business</h2></a><div class="text-size-regular padding-bottom padding-xsmall">Master the dynamics of API rate limiting with ngrok’s gateway: a key to enhanced security, efficiency, and user satisfaction.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">October 3, 2024</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">5</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/gslb" class="blogpost3_tag-item w-inline-block"><div class="text-block">GSLB</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/networking" class="blogpost3_tag-item w-inline-block"><div class="text-block">Networking</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/ngrok-agent" class="blogpost3_tag-item w-inline-block"><div class="text-block">ngrok agent</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/joel-hans" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Joel Hans" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/66c78117e87215b0390f0a73_jhans-thumb.jpg" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Joel Hans</div></div></div></a><a href="/blog-post/office-hours-websockets-twilio" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">CliffsNotes your voicemails with WebSockets, Twilio, and OpenAI</h2></a><div class="text-size-regular padding-bottom padding-xsmall">Explore ngrok's WebSocket capabilities with a demo crafted for Office Hours, integrating with OpenAI’s API to create a secure phone call summarization app.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">October 2, 2024</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">5</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/javascript" class="blogpost3_tag-item w-inline-block"><div class="text-block">JavaScript</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/secure-tunnels" class="blogpost3_tag-item w-inline-block"><div class="text-block">Secure tunnels</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/office-hours" class="blogpost3_tag-item w-inline-block"><div class="text-block">Office Hours</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/christian-hollinger" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Christian Hollinger" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/6556900da92145b17d7c0ef4_1674608572122-thumb.jpeg" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Christian Hollinger</div></div></div></a><a href="/blog-post/how-we-built-ngroks-data-platform" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">How we built ngrok's data platform</h2></a><div class="text-size-regular padding-bottom padding-xsmall">At ngrok, we manage a ~100TiB, 500+ table data lake, managed by a very small team. Here's a look at how we built it and what unique challenges we solved.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">September 26, 2024</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">15</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/python" class="blogpost3_tag-item w-inline-block"><div class="text-block">Python</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/scott-m-fulton-iii" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Scott M. Fulton III" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/66eb4dbe84bc2bd5f27d7379_scott-fulton-thumb.jpg" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Scott M. Fulton III</div></div></div></a><a href="/blog-post/not-just-testing-anymore" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">ngrok in production: Not just for testing anymore</h2></a><div class="text-size-regular padding-bottom padding-xsmall">Transform how you handle production traffic with ngrok, enhancing security and management for your applications beyond just testing.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">September 18, 2024</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">4</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/news" class="blogpost3_tag-item w-inline-block"><div class="text-block">News</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/api-gateway" class="blogpost3_tag-item w-inline-block"><div class="text-block">API gateway</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/networking" class="blogpost3_tag-item w-inline-block"><div class="text-block">Networking</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/team-ngrok" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Team ngrok" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/6580aa01ff30ecc7873d650d_ngrok-author-bio-54px.png" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Team ngrok</div></div></div></a><a href="/blog-post/aws-privatelink-vs-vpc-peering" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">AWS PrivateLink vs. VPC peering vs. ngrok</h2></a><div class="text-size-regular padding-bottom padding-xsmall">Explore the pros/cons of AWS PrivateLink vs VPC peering for connecting AWS clouds securely—and whether ngrok could be a simpler and more flexible alternative.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">September 17, 2024</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">5</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/cloud-edge" class="blogpost3_tag-item w-inline-block"><div class="text-block">Cloud edge</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/networking" class="blogpost3_tag-item w-inline-block"><div class="text-block">Networking</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/secure-tunnels" class="blogpost3_tag-item w-inline-block"><div class="text-block">Secure tunnels</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/joel-hans" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Joel Hans" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/66c78117e87215b0390f0a73_jhans-thumb.jpg" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Joel Hans</div></div></div></a><a href="/blog-post/http-traffic-request-variables" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">Deploy advanced HTTP traffic shaping with request variables and CEL</h2></a><div class="text-size-regular padding-bottom padding-xsmall">Explore ngrok's request variables and Common Expression Language to create flexible, powerful HTTP traffic shaping rules for your API endpoints.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">September 12, 2024</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">6</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/traffic-policy" class="blogpost3_tag-item w-inline-block"><div class="text-block">Traffic Policy</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/api-gateway" class="blogpost3_tag-item w-inline-block"><div class="text-block">API gateway</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/joel-hans" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Joel Hans" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/66c78117e87215b0390f0a73_jhans-thumb.jpg" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Joel Hans</div></div></div></a><a href="/blog-post/office-hours-learn-ngrok" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">Introducing Office Hours: Learn about and build on ngrok together</h2></a><div class="text-size-regular padding-bottom padding-xsmall">Join ngrok's Office Hours: A monthly livestream for developers to learn, ask questions, and explore ngrok's capabilities beyond secure tunneling.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">September 11, 2024</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">6</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/community-projects" class="blogpost3_tag-item w-inline-block"><div class="text-block">Community projects</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/tutorials" class="blogpost3_tag-item w-inline-block"><div class="text-block">Tutorials</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/team-ngrok" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Team ngrok" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/6580aa01ff30ecc7873d650d_ngrok-author-bio-54px.png" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Team ngrok</div></div></div></a><a href="/blog-post/api-gateway-digitalocean" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">Deploy a globally-distributed API gateway with DigitalOcean and ngrok</h2></a><div class="text-size-regular padding-bottom padding-xsmall">Deliver low-latency, resilient APIs without vendor lock-in or complex networking with ngrok’s global server load balancer, automatically deployed with your API.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">September 10, 2024</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">7</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/api-gateway" class="blogpost3_tag-item w-inline-block"><div class="text-block">API gateway</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/networking" class="blogpost3_tag-item w-inline-block"><div class="text-block">Networking</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/sam-richard" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Sam Richard" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/64148b45036e350a274dedda_sam-richard_min.png" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Sam Richard</div></div></div></a><a href="/blog-post/usage-visibility-limits-updates" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">Visibility and limits: Keep track of your ngrok usage</h2></a><div class="text-size-regular padding-bottom padding-xsmall">Track your ngrok usage effectively with our dashboard, offering visibility into metrics like traffic, endpoints, and data transfers.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">September 5, 2024</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">4</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/product-updates" class="blogpost3_tag-item w-inline-block"><div class="text-block">Product updates</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/jonathan-stacks" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Jonathan Stacks" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/65d79f4d2c93c3f1e7fc2239_stacks-50.jpeg" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Jonathan Stacks</div></div></div></a><a href="/blog-post/kubernetes-operator-load-balancer-support" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">Introducing Load Balancer support for ngrok Kubernetes Operator</h2></a><div class="text-size-regular padding-bottom padding-xsmall">Enhance Kubernetes operations with ngrok’s Load Balancer support, streamlining access and connectivity for services in your clusters.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">August 29, 2024</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">10</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/networking" class="blogpost3_tag-item w-inline-block"><div class="text-block">Networking</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/product-updates" class="blogpost3_tag-item w-inline-block"><div class="text-block">Product updates</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/kubernetes-operator" class="blogpost3_tag-item w-inline-block"><div class="text-block">Kubernetes Operator</div></a></div></div></div></div></div></div><div role="listitem" class="blog1_item w-dyn-item"><div><a href="/blog-author/joel-hans" class="w-inline-block"><div class="blog31_author-wrapper padding-bottom padding-tiny"><div class="blog31_author-image-wrapper"><img loading="lazy" alt="Joel Hans" src="https://cdn.prod.website-files.com/63ed707844acb1ccf1ccb700/66c78117e87215b0390f0a73_jhans-thumb.jpg" class="blog31_author-image"/></div><div class="blog31_author-text"><div class="text-size-medium">Joel Hans</div></div></div></a><a href="/blog-post/search-ai-bots-traffic-policy" class="blog31_title-link w-inline-block"><h2 class="heading-style-h5">Battle against search and AI bots on your ngrok endpoints</h2></a><div class="text-size-regular padding-bottom padding-xsmall">Are search and AI bots invading your ngrok endpoints? Fight back with three developer-friendly traffic policies you can deploy in minutes.</div><div class="w-layout-grid grid margin-bottom margin-xxsmall"><div id="w-node-dda70c65-bda2-7e15-3ae5-275525e1d935-89e6d235" class="blog31_date-wrapper"><div class="text-size-small">August 28, 2024</div><div class="blog31_text-divider">•</div><div class="text-size-small blog31_text-spacing">8</div><div class="text-size-small"> min read</div></div><div class="blogpost3_tag-list-wrapper w-dyn-list"><div role="list" class="blogpost3_tag-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog-tag/traffic-policy" class="blogpost3_tag-item w-inline-block"><div class="text-block">Traffic Policy</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/authentication" class="blogpost3_tag-item w-inline-block"><div class="text-block">Authentication</div></a></div><div role="listitem" class="w-dyn-item"><a href="/blog-tag/traffic-inspector" class="blogpost3_tag-item w-inline-block"><div class="text-block">Traffic Inspector</div></a></div></div></div></div></div></div></div><div role="navigation" aria-label="List" class="w-pagination-wrapper margin-top margin-small"><a href="?06271a69_page=2" aria-label="Next Page" class="w-pagination-next button is-link"><div class="w-inline-block">Next</div><svg class="w-pagination-next-icon" height="12px" width="12px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 12" transform="translate(0, 1)"><path fill="none" stroke="currentColor" fill-rule="evenodd" d="M4 2l4 4-4 4"></path></svg></a><link rel="prerender" href="?06271a69_page=2"/></div></div></div></div><div class="nom-bottom-gap"></div></div></section><header id="blog-header-1" class="section_blog1"><div class="padding-global"></div></header></main><footer class="footer5_component background-color-gray"><section class="section-footer"><div class="w-layout-blockcontainer nom-container-base w-container"><div class="wrapper-footer"><div class="top-footer"><div class="column-1-footer"><div class="heading-footer">Platform</div><a href="/our-product" class="link-footer w-inline-block"><div>Product</div></a><a href="/our-product/cloud-edge" class="link-footer w-inline-block"><div>Cloud Edge</div></a><a href="/our-product/secure-tunnels" class="link-footer w-inline-block"><div>Secure Tunnels</div></a><a href="/our-product/platform" class="link-footer w-inline-block"><div>Platform Features</div></a></div><div class="column-1-footer"><div class="heading-footer">Use Cases</div><a href="https://ngrok.com/use-cases#development" class="link-footer w-inline-block"><div>ngrok for development</div></a><a href="https://ngrok.com/use-cases#production" class="link-footer w-inline-block"><div>ngrok for production</div></a><div class="w-dyn-list"><div role="list" class="collection-list-19 w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/use-cases/site-to-site-connectivity" class="link-footer w-inline-block"><div>Site-to-site connectivity</div></a></div><div role="listitem" class="w-dyn-item"><a href="/use-cases/api-gateway" class="link-footer w-inline-block"><div>API Gateway</div></a></div><div role="listitem" class="w-dyn-item"><a href="/use-cases/device-gateway" class="link-footer w-inline-block"><div>Device Gateway</div></a></div><div role="listitem" class="w-dyn-item"><a href="/use-cases/kubernetes-operator" class="link-footer w-inline-block"><div>Kubernetes Operator</div></a></div><div role="listitem" class="w-dyn-item"><a href="/use-cases/global-load-balancer" class="link-footer w-inline-block"><div>Global Load Balancer</div></a></div><div role="listitem" class="w-dyn-item"><a href="/use-cases/identity-aware-proxy" class="link-footer w-inline-block"><div>Identity-Aware Proxy</div></a></div><div role="listitem" class="w-dyn-item"><a href="/use-cases/webhook-testing" class="link-footer w-inline-block"><div>Webhook Testing</div></a></div><div role="listitem" class="w-dyn-item"><a href="/use-cases/developer-preview" class="link-footer w-inline-block"><div>Developer Preview</div></a></div></div></div><a href="/use-cases" class="link-footer w-inline-block"><div>View all use cases</div></a></div><div class="column-1-footer"><div class="heading-footer">Resources</div><a href="/security" class="link-footer w-inline-block"><div>Security</div></a><a href="https://trust.ngrok.com/" class="link-footer w-inline-block"><div>Trust</div></a><a href="/our-product/platform" class="link-footer w-inline-block"><div>Platform</div></a><a href="/customers" class="link-footer w-inline-block"><div>Customers</div></a><a href="/partners" class="link-footer w-inline-block"><div>Integrations</div></a><a href="/blog" aria-current="page" class="link-footer w-inline-block w--current"><div>Blog</div></a><a href="/support" class="link-footer w-inline-block"><div>Support</div></a><a href="/abuse" class="link-footer w-inline-block"><div>Abuse</div></a></div><div class="column-1-footer"><div class="heading-footer">Get Started</div><a href="https://download.ngrok.com/" class="link-footer w-inline-block"><div>Download</div></a><a href="https://ngrok.com/pricing" class="link-footer w-inline-block"><div>Pricing</div></a><a href="https://ngrok.com/docs" class="link-footer w-inline-block"><div>Docs</div></a><a href="/contact" class="link-footer w-inline-block"><div>Contact</div></a><a href="/partners" class="link-footer w-inline-block"><div>Partners</div></a><a href="https://status.ngrok.com/" class="link-footer w-inline-block"><div>Service Status</div></a></div><div class="column-1-footer"><div class="heading-footer">Company</div><a href="/about" class="link-footer w-inline-block"><div>About</div></a><a href="/newsletter" class="link-footer w-inline-block"><div>Newsletter</div></a><a href="/resources/events" class="link-footer w-inline-block"><div>Events</div></a><a href="/press" class="link-footer w-inline-block"><div>Press</div></a><a href="/brand" class="link-footer w-inline-block"><div>Brand</div></a><a href="/careers" class="link-footer w-inline-block"><div>Careers</div></a><a href="/tos" class="link-footer w-inline-block"><div>Terms of Service</div></a><a href="/privacy" class="link-footer w-inline-block"><div>Privacy Policy</div></a><a href="/privacy-preferences" class="link-footer w-inline-block"><div>Privacy Preferences</div></a><a href="/dpa" class="link-footer w-inline-block"><div>DPA</div></a></div></div><div class="line-between"></div><div class="bottom-footer footer5_credit-text-copy"><div class="w-layout-hflex flex-block"><div>© </div><div class="w-embed w-script"><script type="text/javascript">document.write(new Date().getFullYear());</script></div><div> ngrok, Inc.</div></div><div class="link-block-footer"><div class="w-layout-grid footer5_social-icons-copy"><a rel="noopener noreferrer" href="https://ngrok.com/blog-post/rss.xml" target="_blank" class="footer5_social-link-copy w-inline-block"><div class="social-icon-copy w-embed"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"> <path d="M6.54809 20.7489C6.54809 22.5008 5.12775 23.9216 3.37422 23.9216C1.62224 23.9216 0.201172 22.5008 0.201172 20.7489C0.201172 18.9946 1.62224 17.5742 3.37422 17.5742C5.12775 17.5742 6.54809 18.9946 6.54809 20.7489Z" fill="currentColor"/> <path d="M0 11.9438C0 12.3829 0.343591 12.7437 0.782052 12.7661C3.91931 12.9261 6.02928 14.068 7.97261 16.0211C9.88228 17.9385 11.097 20.6896 11.3056 23.1867C11.3413 23.6133 11.6978 23.9422 12.1259 23.9422H15.075C15.3009 23.9422 15.517 23.8494 15.6725 23.6855C15.8281 23.5216 15.9094 23.3011 15.8979 23.0754C15.4779 14.8496 9.10153 8.59883 0.86574 8.18804C0.64032 8.17676 0.420309 8.25852 0.256731 8.41398C0.0932055 8.56945 0 8.78524 0 9.01092V11.9438Z" fill="currentColor"/> <path d="M0 3.81802C0 4.26064 0.349157 4.62327 0.791415 4.6408C10.8927 5.04041 19.012 13.0562 19.4168 23.1508C19.4345 23.5924 19.7975 23.9418 20.2395 23.9418H23.176C23.3995 23.9418 23.6133 23.8511 23.7685 23.6904C23.9238 23.5296 24.007 23.3128 23.9995 23.0895C23.5709 10.3716 13.5764 0.481921 0.851957 0.0580749C0.628773 0.0506371 0.412195 0.134116 0.251634 0.289372C0.091073 0.444524 0 0.658293 0 0.881581V3.81802Z" fill="currentColor"/> </svg></div></a><a rel="noopener noreferrer" href="https://github.com/ngrok" target="_blank" class="footer5_social-link-copy w-inline-block"><div class="social-icon-copy w-embed"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--simple-icons" width="24" height="24" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><path fill="currentColor" d="M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"></path></svg></div></a><a rel="noopener noreferrer" href="https://twitter.com/ngrokHQ" target="_blank" class="footer5_social-link-copy w-inline-block"><div class="social-icon-copy w-embed"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--simple-icons" width="24" height="24" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><path fill="currentColor" d="M23.953 4.57a10 10 0 0 1-2.825.775a4.958 4.958 0 0 0 2.163-2.723c-.951.555-2.005.959-3.127 1.184a4.92 4.92 0 0 0-8.384 4.482C7.69 8.095 4.067 6.13 1.64 3.162a4.822 4.822 0 0 0-.666 2.475c0 1.71.87 3.213 2.188 4.096a4.904 4.904 0 0 1-2.228-.616v.06a4.923 4.923 0 0 0 3.946 4.827a4.996 4.996 0 0 1-2.212.085a4.936 4.936 0 0 0 4.604 3.417a9.867 9.867 0 0 1-6.102 2.105c-.39 0-.779-.023-1.17-.067a13.995 13.995 0 0 0 7.557 2.209c9.053 0 13.998-7.496 13.998-13.985c0-.21 0-.42-.015-.63A9.935 9.935 0 0 0 24 4.59z"></path></svg></div></a><a rel="noopener noreferrer" href="https://www.linkedin.com/company/ngrok" target="_blank" class="footer5_social-link-copy w-inline-block"><div class="social-icon-copy w-embed"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--simple-icons" width="24" height="24" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><path fill="currentColor" d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037c-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85c3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065a2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"></path></svg></div></a><a rel="noopener noreferrer" href="https://www.youtube.com/@ngrokHQ" target="_blank" class="footer5_social-link-copy w-inline-block"><div class="social-icon-copy w-embed"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <g clip-path="url(#clip0_2262_2)"> <path fill-rule="evenodd" clip-rule="evenodd" d="M9.522 15.135L9.52125 8.34387L16.0058 11.7511L9.522 15.135ZM23.76 7.16708C23.76 7.16708 23.5252 5.5016 22.806 4.76819C21.8932 3.80515 20.8702 3.80061 20.4015 3.74472C17.043 3.5 12.0052 3.5 12.0052 3.5H11.9948C11.9948 3.5 6.957 3.5 3.5985 3.74472C3.129 3.80061 2.10675 3.80515 1.19325 4.76819C0.474003 5.5016 0.239998 7.16708 0.239998 7.16708C0.239998 7.16708 0 9.12336 0 11.0789V12.9128C0 14.8691 0.239998 16.8246 0.239998 16.8246C0.239998 16.8246 0.474003 18.4901 1.19325 19.2235C2.10675 20.1865 3.306 20.1563 3.84 20.2568C5.76 20.4426 12 20.5 12 20.5C12 20.5 17.043 20.4924 20.4015 20.2477C20.8702 20.1911 21.8932 20.1865 22.806 19.2235C23.5252 18.4901 23.76 16.8246 23.76 16.8246C23.76 16.8246 24 14.8691 24 12.9128V11.0789C24 9.12336 23.76 7.16708 23.76 7.16708Z" fill="currentColor"/> </g> <defs> <clipPath id="clip0_2262_2"> <rect width="24" height="24" fill="currentColor"/> </clipPath> </defs> </svg></div></a></div></div></div></div></div><div></div></section></footer></div><script src="https://d3e54v103j8qbb.cloudfront.net/js/jquery-3.5.1.min.dc5e7f18c8.js?site=63ed4bc7a4b189da942a6b8c" type="text/javascript" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script><script src="https://cdn.prod.website-files.com/63ed4bc7a4b189da942a6b8c/js/ngrok.schunk.4a394eb5af8156f2.js" type="text/javascript"></script><script src="https://cdn.prod.website-files.com/63ed4bc7a4b189da942a6b8c/js/ngrok.schunk.37a051e84da8d26b.js" type="text/javascript"></script><script src="https://cdn.prod.website-files.com/63ed4bc7a4b189da942a6b8c/js/ngrok.c27fb4a5.42518d20947bacfa.js" type="text/javascript"></script><script> window.populateFormUrl = function() { var formElement = document.querySelector('form input[name="form_url"]'); if (formElement !== undefined && formElement !== null) { formElement.value = window.location.origin + window.location.pathname; }; }; </script><script src="https://hubspotonwebflow.com/assets/js/form-124.js" type="text/javascript" integrity="sha384-bjyNIOqAKScdeQ3THsDZLGagNN56B4X2Auu9YZIGu+tA/PlggMk4jbWruG/P6zYj" crossorigin="anonymous"></script></body></html>