<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/from-nginx-to-ngrok-dogfooding-our-website-3vvum0okj" -->

---
title: From nginx to ngrok: dogfooding our website | daily.dev
description: ngrok's engineering team recounts migrating ngrok.com and its associated services off a years-old nginx setup and onto ngrok's own Traffic Policy and Endpoints...
canonical: https://daily.dev/posts/from-nginx-to-ngrok-dogfooding-our-website-3vvum0okj
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: From nginx to ngrok: dogfooding our website | daily.dev
og:description: ngrok's engineering team recounts migrating ngrok.com and its associated services off a years-old nginx setup and onto ngrok's own Traffic Policy and Endpoints...
og:url: https://daily.dev/posts/from-nginx-to-ngrok-dogfooding-our-website-3vvum0okj
og:image: https://api.daily.dev/og/posts/3VVum0Okj.png
og:image:alt: From nginx to ngrok: dogfooding our website
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# From nginx to ngrok: dogfooding our website

**[ngrok Blog](https://daily.dev/sources/ngrok)** · 14 min read · 0 upvotes · 0 comments

## Summary

ngrok's engineering team recounts migrating ngrok.com and its associated services off a years-old nginx setup and onto ngrok's own Traffic Policy and Endpoints platform. The post walks through how they replaced nginx's TLS termination, access logging to Datadog, custom headers, redirects, and forwarding to external services like S3-hosted docs, all using ngrok's own Cloud Endpoint CRDs managed via the ngrok Kubernetes Operator. Benefits included eliminating dependency on their own cluster/pods for uptime, leveraging ngrok's global points of presence for lower latency, and letting non-infra teams self-service routing changes. The post closes with upcoming plans to dogfood WAF rules, custom responses, security headers, rate limiting, and IP intelligence features.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://ngrok.com/blog/nginx-ngrok-dogfooding>

## Questions this post answers

### How can I replace nginx redirects and Kubernetes ingress annotations with something simpler?

ngrok's Traffic Policy supports native path-based redirects using CEL (Common Expression Language) to match and rewrite request paths, removing the need for Kubernetes Ingress annotation hacks previously used with nginx for regex-based redirects. This became available once ngrok added redirect support to Traffic Policy, letting teams define from/to path rules directly instead of relying on nginx's annotation-based rewrite tricks.

_daily.dev surfaces gateway and ingress migration writeups for engineers replacing legacy nginx configs._

### How do I forward requests to an external service like an S3-hosted static site without running my own nginx proxy?

Use a forward-external action in Traffic Policy combined with a url-rewrite to strip a path prefix, then proxy the request directly to the external host such as an S3 bucket serving a Docusaurus site, without needing TLS flags, header overrides, or Kubernetes Ingress annotations. This approach was still in developer preview at the time it replaced nginx's manual annotation-heavy setup.

_engineers comparing gateway options for external service forwarding can track these patterns on daily.dev._

### What are the benefits of routing traffic through ngrok's cloud endpoints instead of a self-hosted nginx ingress in Kubernetes?

Ngrok Cloud Endpoints execute entirely on ngrok's network, so traffic no longer depends on a Kubernetes cluster or pod health, and requests are served from the nearest ngrok point of presence rather than traversing AWS networking to a single region. This reduced latency for global users and meant the ngrok Kubernetes operator pods could be deleted without affecting site availability.

_teams weighing self-hosted ingress against managed edge gateways can follow these tradeoffs on daily.dev._

---

Tags: [#devtools](https://daily.dev/tags/devtools), [#kubernetes](https://daily.dev/tags/kubernetes), [#nginx](https://daily.dev/tags/nginx), [#api-gateway](https://daily.dev/tags/api-gateway)

[View this post on daily.dev](https://daily.dev/posts/from-nginx-to-ngrok-dogfooding-our-website-3vvum0okj)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"From nginx to ngrok: dogfooding our website","url":"https://daily.dev/posts/from-nginx-to-ngrok-dogfooding-our-website-3vvum0okj","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/from-nginx-to-ngrok-dogfooding-our-website-3vvum0okj"},"datePublished":"2026-08-23T07:20:31.779Z","dateModified":"2026-08-23T07:23:59.114Z","description":"ngrok's engineering team recounts migrating ngrok.com and its associated services off a years-old nginx setup and onto ngrok's own Traffic Policy and Endpoints...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/8ef374249317c6903af76b253c115d0b?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/8ef374249317c6903af76b253c115d0b?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"ngrok Blog","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"ngrok Blog","logo":"https://media.daily.dev/image/upload/s--718XXxvE--/f_auto,q_auto/v1787469610/logos/ngrok?_a=BAMAMicg0","url":"https://daily.dev/sources/ngrok"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/from-nginx-to-ngrok-dogfooding-our-website-3vvum0okj","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"devtools,kubernetes,nginx,api-gateway","timeRequired":"PT14M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"ngrok Blog","item":"https://daily.dev/sources/ngrok"},{"@type":"ListItem","position":3,"name":"From nginx to ngrok: dogfooding our website"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/from-nginx-to-ngrok-dogfooding-our-website-3vvum0okj#faq","mainEntity":[{"@type":"Question","name":"How can I replace nginx redirects and Kubernetes ingress annotations with something simpler?","acceptedAnswer":{"@type":"Answer","text":"ngrok's Traffic Policy supports native path-based redirects using CEL (Common Expression Language) to match and rewrite request paths, removing the need for Kubernetes Ingress annotation hacks previously used with nginx for regex-based redirects. This became available once ngrok added redirect support to Traffic Policy, letting teams define from/to path rules directly instead of relying on nginx's annotation-based rewrite tricks. daily.dev surfaces gateway and ingress migration writeups for engineers replacing legacy nginx configs."}},{"@type":"Question","name":"How do I forward requests to an external service like an S3-hosted static site without running my own nginx proxy?","acceptedAnswer":{"@type":"Answer","text":"Use a forward-external action in Traffic Policy combined with a url-rewrite to strip a path prefix, then proxy the request directly to the external host such as an S3 bucket serving a Docusaurus site, without needing TLS flags, header overrides, or Kubernetes Ingress annotations. This approach was still in developer preview at the time it replaced nginx's manual annotation-heavy setup. engineers comparing gateway options for external service forwarding can track these patterns on daily.dev."}},{"@type":"Question","name":"What are the benefits of routing traffic through ngrok's cloud endpoints instead of a self-hosted nginx ingress in Kubernetes?","acceptedAnswer":{"@type":"Answer","text":"Ngrok Cloud Endpoints execute entirely on ngrok's network, so traffic no longer depends on a Kubernetes cluster or pod health, and requests are served from the nearest ngrok point of presence rather than traversing AWS networking to a single region. This reduced latency for global users and meant the ngrok Kubernetes operator pods could be deleted without affecting site availability. teams weighing self-hosted ingress against managed edge gateways can follow these tradeoffs on daily.dev."}}]}
```

