import http from 'node:http' import net from 'node:net' const upstreamHost = 'qualification-ingress' const upstreamPort = 80 const server = http.createServer((request, response) => { const upstream = http.request( { host: upstreamHost, port: upstreamPort, method: request.method, path: request.url, headers: { ...request.headers, host: upstreamHost }, }, (upstreamResponse) => { response.writeHead( upstreamResponse.statusCode ?? 502, upstreamResponse.headers, ) upstreamResponse.pipe(response) }, ) upstream.on('error', () => { response.writeHead(502) response.end() }) request.pipe(upstream) }) server.on('upgrade', (request, socket, head) => { const upstream = net.connect(upstreamPort, upstreamHost, () => { const headers = Object.entries(request.headers) .filter(([name]) => name.toLowerCase() !== 'host') .map(([name, value]) => `${name}: ${String(value)}`) .join('\r\n') upstream.write( `${request.method} ${request.url} HTTP/${request.httpVersion}\r\nHost: ${upstreamHost}\r\n${headers}\r\n\r\n`, ) if (head.length > 0) upstream.write(head) socket.pipe(upstream).pipe(socket) }) upstream.on('error', () => socket.destroy()) }) server.listen(4174, '127.0.0.1')