Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 400,000 packages pre-installed, including fastify-vhost with all npm packages installed. Try it out:

var fastifyVhost = require("fastify-vhost")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

fastify-vhost v1.1.4

Proxy subdomain http requests to another server


npm-version build status coverage status known vulnerabilities downloads license

Proxy subdomain http requests to another server. This fastify plugin forwards all the requests received with a given subdomain to an upstream.

fastify-vhost is powered by the popular Nodejitsu http-proxy. GitHub stars

This plugin can be used if you want to point multiple (sub)domains to the same IP address, while running different servers on the same machine.

Fastify support

Prior to fastify-vhost@1.1.3 we only supported fastify@1.x.x. We are proud to announce that fastify-vhost now supports both v1 and v2!


npm i fastify-vhost fastify


const Fastify = require('fastify')
const server = Fastify()

server.register(require('fastify-vhost'), {
  upstream: 'http://localhost:3000',
  host: ''


This will proxy any request to the test subdomain to the server running at http://localhost:3000. For instance will be proxied to http://localhost:3000/users.

If you want to have different vhosts for different subdomains you can register multiple instances of the plugin as shown in the following snippet:

const Fastify = require('fastify')
const server = Fastify()
const vhost = require('fastify-vhost')

server.register(vhost, {
  upstream: 'http://localhost:3000',
  host: ''

server.register(vhost, {
  upstream: 'http://localhost:3001',
  host: ''


Notice that it is CRITICAL to provide the full host (subdomain + domain) so that it properly routes the requests across different upstreams.

For other examples, see example.js.


This fastify plugin supports the following options.

Note that this plugin is fully encapsulated and payloads will be streamed directly to the destination.


An URL (including protocol) that the requests will be forwarded to (eg. http://localhost:3000).


The host to mount this plugin on. All the requests to the current server where the host header matches this string will be proxied to the provided upstream.


Default: false. When strict mode is enabled, the host header has to be an exact match. When disabled, 'EXAMPLE.COM', '' and '' will match ''.


Default: 30000. Timeout in milliseconds for the proxy to return a 504 Gateway Timeout.


None yet. But you're welcome to open a PR.

ES5 support

Despite not offering ES5 support (no tests for it, or whatsoever), we'll keep it available. Although we don't recommend it, if you need / want to give it a try, import fastify-vhost like this require('fastify-vhost/lib/es5') instead of require('fastify-vhost').


  • [x] Add unit tests
  • [x] Add integration tests
  • [x] Coverage 100%
  • [ ] Add benchmarks



RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free