Reverse proxy — forwards client requests to backend servers.
1const httpProxy = require("http-proxy");2const http = require("http");34const proxy = httpProxy.createProxyServer({});56const servers = [7 { host: "127.0.0.1", port: 3001, weight: 1 },8 { host: "127.0.0.1", port: 3002, weight: 2 },9 { host: "127.0.0.1", port: 3003, weight: 1 },10];1112// Weighted round-robin13let currentWeight = 0;14let maxWeight = Math.max(...servers.map(s => s.weight));15let currentIndex = -1;1617function getServer() {18 while (true) {19 currentIndex = (currentIndex + 1) % servers.length;20 if (currentIndex === 0) currentWeight -= 1;21 if (currentWeight < 0) currentWeight = maxWeight;22 if (servers[currentIndex].weight >= currentWeight) {23 return servers[currentIndex];24 }25 }26}2728http.createServer((req, res) => {29 const server = getServer();30 proxy.web(req, res, {31 target: `http://${server.host}:${server.port}`,32 });33}).listen(80);
Key points: