Skip to content
This repository was archived by the owner on Mar 11, 2025. It is now read-only.

Repository files navigation

@squarecloud/http-proxy

npm versionnpm downloadsbundle

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.

Usage

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");constproxy=createProxyServer({});consttarget="http://example.com";/* address of your proxy server here */constserver=createServer(async(req,res)=>{try{awaitproxy.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");constproxy=createProxyServer({ws: true});consttarget="ws://example.com";/* address of your proxy server here */constserver=createServer(async(req,res)=>{/* ... */});server.on("upgrade",async(req,socket,head)=>{try{// use proxy.ws() instead of proxy.web() for proxying WebSocket requests.awaitproxy.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.

Development

  • Clone this repository
  • Install latest LTS version of Node.js
  • Install dependencies using npm install
  • Run interactive tests using npm run test

License

Published under MIT License.

Made with 💙 & Supported by Square Cloud | A hosting company.

About

A Zero-Dependency Full-Featured HTTP and WebSocket Proxy for Node.js.

Topics

Resources

Stars

17 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages