Skip to content

A simple http/2 & http/1.1 to http/1.1 spec compliant proxy helper for Node.

License

Notifications You must be signed in to change notification settings

nxtedition/node-http2-proxy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Sep 12, 2017
d9bf886 · Sep 12, 2017

History

83 Commits
Sep 11, 2017
Sep 11, 2017
Sep 11, 2017
Sep 12, 2017
Sep 12, 2017
Sep 12, 2017
Sep 12, 2017

Repository files navigation

node-http2-proxy

A simple http/2 & http/1.1 to http/1.1 spec compliant proxy helper for Node.

Features

Installation

$ npm install http2-proxy

Notes

http2-proxy requires node v8.5.0 or newer with http2 enabled. See nightly node builds or building node from source. Pass the --expose-http2 option when starting node v8.x.x.

Usage

You must pass allowHTTP1: true to the http2.createServer or http2.createSecureServer factory methods.

import http2 from 'http2'
import proxy from 'http2-proxy'

const server = http2.createServer({ allowHTTP1: true })
server.listen(8000)

Proxy HTTP 1.1/2 and WebSocket

server.on('request', (req, res) => {
  proxy.web(req, res, {
    hostname: 'localhost'
    port: 9000
  }, err => console.error(err, 'proxy error'))
})
server.on('upgrade', (req, socket, head) => {
  proxy.ws(req, socket, head, {
    hostname: 'localhost'
    port: 9000
  }, err => console.error('proxy error', err))
})

Use Helmet to secure response headers

server.on('request', (req, res) => {
  proxy.web(req, res, {
    hostname: 'localhost'
    port: 9000,
    onRes: (req, res) => helmet(req, res, () => {})
  }, err => console.error('proxy error', err))
})

Add x-forwarded headers

server.on('request', (req, res) => {
  proxy.web(req, res, {
    hostname: 'localhost'
    port: 9000,
    onReq: (req, { headers }) => {
      headers['x-forwarded-for'] = req.socket.remoteAddress
      headers['x-forwarded-proto'] = req.socket.encrypted ? 'https' : 'http'
      headers['x-forwarded-host'] = req.headers['host']
    }
  }, err => console.error(err, 'proxy error'))
})

API

web (req, res, options, onProxyError)

See request

ws (req, socket, head, options, onProxyError)

See upgrade

Options

License

MIT