simple HTTP | HTTPS reverse proxy in node.js. currently supports:
- reverse proxy using incoming request
host
header to pre-configured origin server. see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Host - reverse proxy incoming
http | https
request to originhttp | https
server
- for global installation
npm i fimiproxy -g
- for local installation
npm i fimiproxy
- for local dev-dependency installation
npm i fimiproxy -D
replace npm
with yarn
or any other package manager of choice.
{
"exposeHttpProxy": false,
"exposeHttpsProxy": false,
"httpPort": "",
"httpsPort": "",
"httpsPublicKeyFilepath": "",
"httpsPrivateKeyFilepath": "",
"httpsPublicKey": "",
"httpsPrivateKey": "",
"routes": [
{
"originHost": "",
"originPort": "",
"originProtocol": "http:",
"incomingHostAndPort": ""
}
]
}
-
exposeHttpProxy
— set totrue
to expose an HTTP server, requireshttpPort
to be set iftrue
-
exposeHttpsProxy
— set totrue
to expose an HTTPS server, requireshttpsPort
,httpsPublicKey
ORhttpsPublicKeyFilepath
,httpsPrivateKey
ORhttpsPrivateKeyFilepath
to be set iftrue
-
httpPort
— port HTTP server should listen on, whenexposeHttpProxy
istrue
-
httpsPort
— port HTTPS server should listen on, whenexposeHttpsProxy
istrue
-
httpsPublicKeyFilepath
— filepath to TLS certificate (public key) used with HTTPS server -
httpsPrivateKeyFilepath
— filepath to TLS private key used with HTTPS server -
httpsPublicKey
— TLS certificate (public key) string used with HTTPS server. takes precedence overhttpsPublicKeyFilepath
-
httpsPrivateKey
— TLS private key string used with HTTPS server. takes precedence overhttpsPrivateKeyFilepath
-
routes
— array of incoming host to origin protocol, host, and port-
originHost
— origin host or IP -
originPort
— origin port -
originProtocol
— origin protocol. one ofhttp:
orhttps:
. don't forget the:
at the end -
incomingHostAndPort
— incominghost:port
to proxy to origin server. picked from HTTPhost
header field
-
- if installed globally, run
fimiproxy ./path/to/config.json
- if installed locally, run
npm exec fimiproxy ./path/to/config.json
- for one-time run, run
npx -y fimiproxy ./path/to/config.json
import fimiproxy from "fimiproxy"
// start fimiproxy
await fimiproxy.startFimiproxyUsingConfig({
/** config */ {
exposeHttpProxy: false,
exposeHttpsProxy: false,
httpPort: "80",
httpsPort: "443",
routes: [{
originHost: "localhost",
originPort: "6001",
originProtocol: "https:",
incomingHostAndPort: "www.fimidara.com:80",
}],
httpsPublicKey: "",
httpsPrivateKey: "",
httpsPublicKeyFilepath: "",
httpsPrivateKeyFilepath: "",
},
/** shouldHandleGracefulShutdown */ true,
/** exitProcessOnShutdown */ true,
});
// end fimiproxy
await fimiproxy.endFimiproxy(/** exitProcessOnShutdown */ true);
-
startFimiproxyUsingConfig
— start fimiproxy using config-
config: FimiproxyRuntimeConfig
— see configuration above -
shouldHandleGracefulShutdown
— defaults totrue
. iftrue
, will listen forSIGINT
andSIGTERM
, and attempt to gracefully shut down the proxy server -
exitProcessOnShutdown
— defaults totrue
. ifshouldHandleGracefulShutdown
istrue
, will callprocess.exit()
after graceful shutdown. your process may not shut down afterSIGINT
andSIGTERM
if nottrue
. currently untested behaviour (if process will shutdown or not) when set tofalse
andshouldHandleGracefulShutdown
istrue
-
-
startFimiproxyUsingConfigFile
— start fimiproxy using config read from filepath-
filepath: string
— file at filepath should be a json file, see configuration section above
-
-
startFimiproxyUsingProcessArgs
— start fimiproxy using filepath picked fromprocess.argv[2]
see https://nodejs.org/docs/latest/api/process.html#processargv. example,node your-script.js ./path/to/config.json
-
endFimiproxy
— gracefully end fimiproxy-
exitProcess
— defaults totrue
. callsprocess.exit()
iftrue
-
- cannot sustain multiple start calls, because current state is managed using a module-global variable. we'll eventually transition to a class-based encapsulation system, so stick around (if you're versed in Typescript, you can contribute to this effort). multiple start calls will either lead to existing servers being garbage collected or memory leak, i haven't tested it. so call
endFimiproxy
before making another start call. start calls are calls tostartFimiproxyUsingConfig
,startFimiproxyUsingConfigFile
, orstartFimiproxyUsingProcessArgs