magic-reverse-proxy
v2.3.30
Published
A web proxy based with some smart features like VHOSTS, HSTS, websockets support and Round-Robin balancer algorithm.
Downloads
42
Maintainers
Readme
Magic Reverse Proxy
Getting started into Magic Reverse Proxy!
Installation
npm install magic-reverse-proxy --save
How it works?
In this basic sample our main goal is to forward all websocket traffic from port 8080 to port 1234.
Creating a basic WebSocket server:
import http from 'http';
import WebSockets from 'websocket';
import { createProxy } from 'magic-reverse-proxy';
const server = http.createServer((req, res) => {
//Reject useless requests...
res.writeHead(403).end();
});
server.listen(1234, function () {
console.log('Destination server is running on port 1234!');
});
const WebSockServer = new WebSockets.server({
httpServer: server,
maxReceivedFrameSize: 65536,
maxReceivedMessageSize: 65536
});
WebSockServer.on('request', (request) => {
console.log('WebSocket connected over [Client -> localhost:8080 -> localhost:1234]');
let sock = request.accept();
sock.on('message', (msg) => {
//Print in the console the data recepted from client.
console.log(msg.utf8Data);
})
});
Creating the Magic Proxy trigger and binding to specific port:
let proxy = createProxy({
allow_unknown_host: false, //Drop connections from unknown hosts
allow_websockets: true, //Allow websocket to be proxied as well
http: {
port: 8080, //Define HTTP proxy to port 80
enabled: true, //Enable HTTP proxy
start_callback: () => {
console.log('Magic proxy server is running on port 8080!');
},
middlewares: [] //Stack of middlewares to be loaded into HTTP server
},
proxies: [
{
domain: '*', //Proxy all websocket traffic to ws://localhost:1234
timeout: 10000, //Timeout for connection
round: 0, //Round-Robin index of destinations to proxy all requests
destination: ['http://localhost:1234/'], //Array with destinations (Round-Robin will be used to load balance)
sockDestination: ['ws://localhost:1234'] //Array with websocket destinations (Round-Robin will be used to load balance)
}
],
default_proxy: {
timeout: 10000, //Timeout for connection
round: 0, //Round-Robin index of destinations to proxy all requests
destination: ['http://localhost:1234/'] //Array with destinations (Round-Robin will be used to load balance)
}
});
//Bind proxy with specified configurations
proxy.bind();