http-proxy-rules
is an add-on module to the node-http-proxy library. It lets you define a set of rules to translate matching routes to target routes that the reverse proxy service will talk to on the client's behalf.
npm install http-proxy-rules --save
var http = require('http'), httpProxy = require('http-proxy'), HttpProxyRules = require('http-proxy-rules'); // Set up proxy rules instance var proxyRules = new HttpProxyRules({ rules: { '.*/test': 'http://localhost:8080/cool', // Rule (1) '.*/test2/': 'http://localhost:8080/cool2/', // Rule (2) '/posts/([0-9]+)/comments/([0-9]+)': 'http://localhost:8080/p/$1/c/$2', // Rule (3) '/author/([0-9]+)/posts/([0-9]+)/': 'http://localhost:8080/a/$1/p/$2/' // Rule (4) }, default: 'http://localhost:8080' // default target }); // Create reverse proxy instance var proxy = httpProxy.createProxy(); // Create http server that leverages reverse proxy instance // and proxy rules to proxy requests to different targets http.createServer(function(req, res) { // a match method is exposed on the proxy rules instance // to test a request to see if it matches against one of the specified rules var target = proxyRules.match(req); if (target) { return proxy.web(req, res, { target: target }); } res.writeHead(500, { 'Content-Type': 'text/plain' }); res.end('The request url and path did not match any of the listed rules!'); }).listen(6010);
Given the object we used to initialize the HttpProxyRules
instance above, here are some examples of how sample url paths would be translated.
You can initialize a new http-proxy-rules
instance with the following options:
{ rules: {}, // See notes below default: '' // (optional) if no rules matched, translate url path to specified default }
The rules object contains a set of key-value pairs mapping a regex-supported url path to a target route. The module only tries to match the visited url path, and not the entire url, with a specified rule. The target route must include the protocol (e.g., http) and the FQDN. You can use capturing groups when constructing a rule key (e.g. '/posts/(\d+)/
). In this case, $1
in the target path will be replaced with the value from the first capturing group, $2
with the second one, and so on. See the tests for examples of how incoming route url paths may be translated with the use of this module.
(?:\\W|$)
is appended to the end of the regex-supported url path, so that if there is a key like .*/test
in the rules, the module matches paths /test
, /test/
, /test?
but not /testing
.RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4