Note: If you are using the EU cloud then use
eu
instead ofus
in all domains (e.g.us.i.posthog.com
->eu.i.posthog.com
)
If you are using Next.js and rewrites aren't working for you, you can write custom middleware to proxy requests to PostHog.
To do this using the app router, create a file named middleware.js
in your base directory (same level as the app
folder). In this file, set up code to match requests to a custom route, set a new host
header, change the URL to point to PostHog, and rewrite the response.
import { NextResponse } from 'next/server'export function middleware(request) {const hostname = url.pathname.startsWith("/ingest/static/") ? 'us-assets.i.posthog.com' : 'us.i.posthog.com'const requestHeaders = new Headers(request.headers)requestHeaders.set('host', hostname)let url = request.nextUrl.clone()url.protocol = 'https'url.hostname = hostnameurl.port = 443url.pathname = url.pathname.replace(/^\/ingest/, '');return NextResponse.rewrite(url, {headers: requestHeaders,})}export const config = {matcher: '/ingest/:path*',}
Once done, configure the PostHog client to send requests via your rewrite.
posthog.init(process.env.NEXT_PUBLIC_POSTHOG_KEY, {api_host: "https://your-host.com/ingest"ui_host: "https://app.posthog.com" // or "https://eu.posthog.com" if your PostHog is hosted in Europe})