From 10413a6379ac4404b876c9a12a3ee7c016518ae9 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Tue, 1 Jul 2025 14:41:37 +0100 Subject: [PATCH] fix(dev): set xfwd headers --- packages/nuxi/src/commands/dev.ts | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/nuxi/src/commands/dev.ts b/packages/nuxi/src/commands/dev.ts index d041352b5..3dfed828e 100644 --- a/packages/nuxi/src/commands/dev.ts +++ b/packages/nuxi/src/commands/dev.ts @@ -3,6 +3,7 @@ import type { ParsedArgs } from 'citty' import type { HTTPSOptions, ListenOptions } from 'listhen' import type { ChildProcess } from 'node:child_process' import type { IncomingMessage, ServerResponse } from 'node:http' +import type { TLSSocket } from 'node:tls' import type { NuxtDevContext, NuxtDevIPCMessage } from '../dev/utils' import { fork } from 'node:child_process' @@ -190,6 +191,25 @@ async function createDevProxy(nuxtOptions: NuxtOptions, listenOptions: Partial { + if (!proxyReq.hasHeader('x-forwarded-for')) { + const address = req.socket.remoteAddress + if (address) { + proxyReq.appendHeader('x-forwarded-for', address) + } + } + if (!proxyReq.hasHeader('x-forwarded-port')) { + const localPort = req?.socket?.localPort + if (localPort) { + proxyReq.setHeader('x-forwarded-port', req.socket.localPort) + } + } + if (!proxyReq.hasHeader('x-forwarded-Proto')) { + const encrypted = (req?.connection as TLSSocket)?.encrypted + proxyReq.setHeader('x-forwarded-proto', encrypted ? 'https' : 'http') + } + }) + const listener = await listen((req: IncomingMessage, res: ServerResponse) => { if (error) { renderError(req, res, error) @@ -232,7 +252,7 @@ async function createDevProxy(nuxtOptions: NuxtOptions, listenOptions: Partial