A Full-Featured HTTP and WebSocket Proxy for Node.js forked from http-party/node-http-proxy.
This fork adds the following features:
- Dependencies updates & security fixes.
- Websocket close before response fixed.
- Memory leak fixed when client closes prematurely.
- Add support for Lookup option. Remove old followRedirects option.
- Support for modifying content of websocket streams.
- Respect NODE_TLS_REJECT_UNAUTHORIZED environment variable.
- Fix for issues when using an Agent, fix the type error when req.socket is undefined.
- Fixed bug when http:/ isn't replaced with: http://
- Fixed X-Forwarded-* not capitalized.
Inspired by the project Ambassify project.
Install package:
# npm npm install @squarecloud/http-proxy # yarn yarn add @squarecloud/http-proxy # pnpm pnpm install @squarecloud/http-proxy # bun bun install @squarecloud/http-proxy
Create proxy:
const { createServer } = require("node:http"); const { createProxyServer } = require("@squarecloud/http-proxy"); const proxy = createProxyServer({}); const target = "http://example.com"; /* address of your proxy server here */ const server = createServer(async (req, res) => { try { await proxy.web(req, res, { target }); } catch (error) { console.error(error); res.statusCode = 500; res.end("Proxy error: " + error.toString()); } }); server.listen(80, () => console.log("Proxy is listening on http://localhost"));
Example with WebSocket:
const { createServer } = require("node:http"); const { createProxyServer } = require("@squarecloud/http-proxy"); const proxy = createProxyServer({ ws: true }); const target = "ws://example.com"; /* address of your proxy server here */ const server = createServer(async (req, res) => { /* ... */ }); server.on("upgrade", async (req, socket, head) => { try { // use proxy.ws() instead of proxy.web() for proxying WebSocket requests. await proxy.ws(req, socket, head, { target }); } catch (error) { console.error(error); socket.end(); } }); server.listen(80, () => console.log("Proxy is listening on http://localhost"));
Some options:
// Options most used in the proxy configuration: // * ws : <true/false, if you want to proxy websockets> // * xfwd : <true/false, adds X-Forward headers> // * secure : <true/false, verify SSL certificate> // * prependPath: <true/false, Default: true - specify whether you want to prepend the target"s path to the proxy path> // * ignorePath: <true/false, Default: false - specify whether you want to ignore the proxy path of the incoming request> // * proxyTimeoutCustomError: true/false, default: false - specify whether you want to throw a custom `ETIMEDOUT` error when the `proxyTimeout` is reached. If false then the default `ECONNRESET` error will be thrown.
Checkout http-party/node-http-proxy for more options and examples.
- Clone this repository
- Install latest LTS version of Node.js
- Install dependencies using
npm install
- Run interactive tests using
npm run test
Published under MIT License.
Made with 💙 & Supported by Square Cloud | A hosting company.