Skip to content

Latest commit

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

RelayProxy.js

RelayProxy.js implements a forward proxy server in node.js with support for:

  • HTTP and HTTPS requests (SOCKS5 support coming in a future version)
  • Basic HTTP authorization
  • Forwarding to a remote proxy (with support for remote authorization), selectable at run-time based on incoming header and credentials

I wrote this server as I had a need for a private authenticated proxy server that would forward the request through a remote private proxy. The idea was to manage the amount of access a connecting client had to any given address and to manage which remote proxies (taken from a pool of rented third-party private proxies, each requiring authorization) were allocated to a given client, rotating those proxies depending on usage.

The server is very simple to use:

Usage

Basic usage

At its simplest, the following will instantiate a non-authenticating transparent proxy that forwards requests to the target url without relaying the request through a third-party proxy:

varRelayProxy=require('./path/to/relay-proxy');varserver=newRelayProxy();server.listen(3333);

Local authorization

To authorize access to your proxy, provide a handler function:

varRelayProxy=require('./path/to/relay-proxy');varserver=newRelayProxy();server.authorize(function(req,username,password,callback){// replace with code to verify username and passwordvarisLoginCorrect=true;// call the supplied callback function to continue the requestcallback(null,isLoginCorrect);});server.listen(3333);

Using a remote proxy

To forward requests via a third-party proxy, provide a handler function:

varRelayProxy=require('./path/to/relay-proxy');varserver=newRelayProxy();server.selectForwardProxy(function(req,username,callback){varproxy={host: '1.2.3.4',port: 31337,username: 'jimbob',// only supply a username and password ifpassword: 'mcgee'// the remote proxy requires authorization};// the callback's second argument can be one of three values:// null: no remote proxy - forward directly to the requested url// false: decline to forward the request (http 407 sent back to client)// proxy: proxy options as specified in the above samplecallback(null,proxy);});server.listen(3333);

Dependencies

RelayProxy has a dependency on node-http-proxy, by the good folks at Nodejitsu. Thankfully, it's available in the npm registry.

npm install http-proxy

About

An HTTP/HTTPS forward proxy server for node.js with support for local authentication and forwarding requests via remote proxies

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors