Registry / http-networking / http-proxy

http-proxy

JSON →
library1.0.16jsnpmunverified

http-proxy is a robust and programmable HTTP proxying library for Node.js, designed to facilitate the creation of components such as reverse proxies and load balancers. It offers comprehensive support for both HTTP(S) and WebSockets. The current stable version is 1.18.1. While its release cadence is not rapid, the project undergoes periodic maintenance, as highlighted by the 1.17.0 release which delivered numerous bug fixes and feature additions, indicating active, albeit slower, development. A key differentiator is its `createProxyServer` factory, which returns a flexible proxy instance, allowing developers to customize request and response pipelines for fine-grained control over proxied traffic, making it suitable for complex proxying scenarios beyond basic URL forwarding.

npm install http-proxy
INSTALL
IMPORT
SIG · HTTP-PROXY
H
http-proxy
http-networkingjavascriptv1.0.16
Install
Import
Disk
Pass rate
0/ 6
Env Coverage0 / 6
glibc
1822
musl
1822
Install & Compatibility
Where this runs
tested against v? · npm install
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
musl
node 18226 runs
build_error
glibc
node 18226 runs
build_error
Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

httpProxy (Module Object, CommonJS)
const httpProxy = require('http-proxy');
import httpProxy from 'http-proxy';
This imports the entire CommonJS module object, which contains the `createProxyServer` factory function as a property.
httpProxy (Module Object, ESM)
import httpProxy from 'http-proxy';
const httpProxy = require('http-proxy');
For ESM, the CommonJS module is typically imported as a default export. The `createProxyServer` function is then accessed as `httpProxy.createProxyServer`.
createProxyServer (Factory Function, CommonJS Destructuring)
const { createProxyServer } = require('http-proxy');
const createProxyServer = require('http-proxy').createProxyServer;
This directly destructures the `createProxyServer` function from the CommonJS module object for convenience.
createProxyServer (Factory Function, ESM Named Import)
import { createProxyServer } from 'http-proxy';
import createProxyServer from 'http-proxy';
This assumes `http-proxy` provides a named export for `createProxyServer` for direct ESM access. If not, use `import httpProxy from 'http-proxy'; const { createProxyServer } = httpProxy;`.

This example sets up a basic `http-proxy` server on port 8000 that forwards both HTTP and WebSocket requests to a target server running on port 9000. It includes basic error handling and logging.

const http = require('http'); const httpProxy = require('http-proxy'); // --- Target Server --- const targetPort = 9000; const targetServer = http.createServer((req, res) => { console.log(`[Target] Received request for: ${req.url}`); res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end(`Hello from Target Server! You requested ${req.url}\n`); }); targetServer.listen(targetPort, () => { console.log(`[Target] Server listening on http://localhost:${targetPort}`); }); // --- Proxy Server --- const proxyPort = 8000; const proxy = httpProxy.createProxyServer({ target: `http://localhost:${targetPort}`, ws: true // Enable WebSocket proxying }); proxy.on('error', (err, req, res) => { console.error('[Proxy] HTTP error:', err.message); if (!res.headersSent) { res.writeHead(500, { 'Content-Type': 'text/plain' }); res.end('Proxy Error: Could not reach the target.'); } }); proxy.on('proxyReq', (proxyReq, req, res, options) => { console.log(`[Proxy] Proxying HTTP request: ${req.method} ${req.url}`); }); proxy.on('proxyRes', (proxyRes, req, res) => { console.log(`[Proxy] Response from target: ${proxyRes.statusCode}`); }); const proxyServer = http.createServer((req, res) => { // Handle regular HTTP(S) requests proxy.web(req, res); }); proxyServer.on('upgrade', (req, socket, head) => { // Handle WebSocket upgrade requests console.log(`[Proxy] Proxying WebSocket upgrade for: ${req.url}`); proxy.ws(req, socket, head); }); proxyServer.listen(proxyPort, () => { console.log(`[Proxy] Server listening on http://localhost:${proxyPort}`); console.log(` Test HTTP by visiting: http://localhost:${proxyPort}/any/path`); console.log(`Test WebSocket (e.g., with 'wscat'): wscat -c ws://localhost:${proxyPort}`); }); // Clean up on exit process.on('SIGINT', () => { console.log('\n[App] Shutting down servers...'); proxyServer.close(() => console.log('[Proxy] Server closed.')); targetServer.close(() => console.log('[Target] Server closed.')); process.exit(0); });
Debug
Known issues
breakingMajor breaking changes were introduced after the 0.8.x series. Direct migration from these older versions to 1.x.x without consulting the `UPGRADING.md` guide will likely result in compatibility issues.
fix
Refer to the `UPGRADING.md` document linked in the package's README for detailed migration steps when upgrading from pre-1.0.0 versions.
affects: <1.0.0
gotchaProxy errors must be explicitly handled, either by listening to the `error` event on the proxy instance or by providing an error callback to `proxy.web` or `proxy.ws` calls. Unhandled errors can lead to ungraceful server shutdowns or unresponsiveness.
fix
Implement `proxy.on('error', (err, req, res) => { /* handle error */ });` or ensure an error callback is passed to proxy methods like `proxy.web(req, res, options, (err) => { /* handle error */ });`.
affects: >=0.8.0
gotchaThe `target` option is mandatory for `proxy.web` and `proxy.ws` calls, specifying the destination URL for the proxied request. Omitting or providing an invalid target will result in connection errors and prevent successful proxying.
fix
Always ensure `target` is correctly specified in the options object, e.g., `{ target: 'http://localhost:8080' }`, or passed directly to the `web`/`ws` methods.
affects: >=0.8.0
Errors
Common errors & fixes
Error: Must provide a target protocol and host (e.g. http://localhost)
The `target` option in the `createProxyServer` constructor or `proxy.web`/`proxy.ws` calls is either missing or malformed.
fix
Ensure the `target` option is a string with a valid protocol and host (e.g., `'http://localhost:3000'`) or an object specifying `host` and `port`.
TypeError: proxy.web is not a function
This usually means you're trying to call `web` on the `httpProxy` module object itself (e.g., `httpProxy.web(...)`) rather than on an instance created by `httpProxy.createProxyServer()`.
fix
First, create a proxy instance: `const proxy = httpProxy.createProxyServer(options);`. Then, call `proxy.web(req, res);` on that instance.
Error: connect ECONNREFUSED 127.0.0.1:9000
The target server specified in the `target` option is not running or is inaccessible at the given host and port, preventing `http-proxy` from establishing a connection.
fix
Verify that your target server is actively running and listening on the specified host and port. Check firewall rules if the target is on a different machine or network.
Upgrade
Version history
1.0.16latest on npm
Audit
Dependencies

No dependency data recorded yet.

Agent activity
4 hits · last 30 days
node
4
Resources
http-proxy — npm install http-proxy · libregistry