Home

Awesome

MongoDB Proxy

The MongoDB proxy was developed to help drivers who do not have either replicaset or advanced authentication support for MongoDB. It aims to make it possible for any basic mongodb driver to be able to tap into the advanced features provided by MongoDB.

Design of Proxy

The Proxy uses the node.js mongodb native driver to provide the glue between your driver and MongoDB. For each connection you open to the proxy an equal connection is opened to the MongoDB server on the other side (or in the case of a replicaset 1 connection per member in the Replicaset). The takes care of all the complex authentication mechanisms as well as managing connectivity to the MongoDB topology.

The proxy identifies itself to the driver as a mongos proxy and the connecting driver can route queries sending the $readPreference field in the query.

Proxy Configuration Settings

JSON Configuration file settings

The proxy configuration json file options

OptionDescription
portThe tcp port the proxy binds to
uriThe MongoDB Topology URI (See driver docs for parameters)
bind_toThe tcp address to bind the proxy to
log_levelThe logging level [error/info/debug]
log_fileThe log file to append to
auth.sslCALocation of certificate authority file
auth.sslCertLocation of public certificate file we are presenting
auth.sslKeyLocation of private certificate file we are presenting
auth.sslPassSSL Certificate password
auth.sslValidateValidate mongod certificate

Example configuration file

{
    "port": 51000
  , "uri": "mongodb://localhost:27017/test"
  , "bind_to": "127.0.0.1"
  , "auth": {
      "sslCA": "./ca.pem"
    , "sslCert": "./cert.pem"
    , "sslKey": "./cert.pem"
    , "sslPass": "somekey"
    , "sslValidate": false
  }
  , "log_level": "error"
  , "log_file": "./proxy.log"
}

Command line configuration file settings

Usage: node ./index.js

Examples:
  node ./index.js -p 51000 -b 127.0.0.1 -u mongodb://localhost:27017    Run proxy on port 51000 and bind to 127.0.0.1


Options:
  -p, --port          Port proxy is running on                                [default: 51000]
  -u, --uri           Connection url to mongodb                               [default: "mongodb://localhost:27017/test"]
  -b, --bind_to       Bind to host interface                                  [default: "127.0.0.1"]
  -c, --config        JSON configuration file
  --auth-sslCA        Location of certificate authority file
  --auth-sslCert      Location of public certificate file we are presenting
  --auth-sslKey       Location of private certificate file we are presenting
  --auth-sslPass      SSL Certificate password
  --auth-sslValidate  Validate mongod certificate                             [default: false]
  --log_level                                                                 [default: "error"]
  --log_file

Simple Example of running the proxy

Start up a mongod process

mkdir data
mongod --dbpath=./data

Start up the proxy

node ./index.js -u mongodb://localhost:27017/test -p 61000

Connect to MongoDB via the proxy using the shell

mongo --port 61000