Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
NodeJS virtual hosting server
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.


NodeJS virtual hosting server.

What does it solve?

Ever had 1 server and wanted to deploy 2 NodeJS webapps on it but you also had an Apache server already running on it?

Well GateKeeper solves that problem!

How does GateKeeper solve that?

with GateKeeper you map the a domain to an app or proxy to a different server or port.
Setting it up is really simple!

How to set it up?

Let's start with the basics!

npm i -g gatekeeperjs

Well now we've done that, we need to set up an GateData folder with our config and domains.

The GateData folder

A GateData folder looks for example like this:

|- config.json  
|-- domains  
  | |  
  | |- main.js  
    |- main.js

The config.json is a really simple JSON file.
which in most cases would look like this:


The domains folder is the folder where all the magic happens.
Each folder inside that folder should represent the dns of the app in it.
So in the example above I host the websites and In each domain folder should be an main.js, which will be executed when your domain is initialized.

the main.js looks for example like this:

module.exports = {
        resp.end("Wow!\n\nyou visited my domain!");

The request function is exact the same as http.createServer().on("request",function(){}).

So porting code to the GateKeeper is done in no time!

But what about that Apache server?

Well that Apache server is easily installed too via a reverse proxy!

just change your main.js in your domain folder to:

module.exports = {
    port:myDestinationPort, //defaults to port 80
    host:myDestHost // defaults to ""

Happy proxying!

Starting the server

Starting is rather easy

gatekeeper runat [path to your GateData folder]

Still need help?

I hope that was all the info you really needed!
If you still can't figure it out:

Contact me at

Something went wrong with that request. Please try again.