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(err, 'proxy error'))
})
server.on('request', (req, res) => {
proxy.web(req, res, {
hostname: 'localhost'
port: 9000,
onRes: (req, resHeaders, res) => helmet(req, res, () => {})
}, err => console.error(err, 'proxy error'))
})
server.on('request', (req, res) => {
proxy.web(req, res, {
hostname: 'localhost'
port: 9000,
onReq: (req, reqHeaders) => {
reqHeaders['x-forwarded-for'] = req.socket.remoteAddress
reqHeaders['x-forwarded-proto'] = req.socket.encrypted ? 'https' : 'http'
reqHeaders['x-forwarded-host'] = req.headers['host']
}
}, err => console.error(err, 'proxy error'))
})
API
web (req, res, options, onProxyError)
req
: http.IncomingMessage
or http2.Http2ServerRequest
res
: http.ServerResponse
or http2.Http2ServerResponse
options
: see OptionsonProxyError(err)
: called on error
ws (req, socket, head, options, onProxyError)
req
: http.IncomingMessage
socket
: net.Socket
head
: Buffer
options
: see OptionsonProxyError(err)
: called on error
Options
hostname
: target hostnameport
: target porttimeout
: incoming request timeoutproxyTimeout
: proxy request timeoutproxyName
: proxy name used for Via headeronReq(req, reqHeaders)
: called before proxy requestonRes(req, resHeaders, res)
: called before proxy response
License
MIT