koa2-nginx
Proxy middleware for koa2 based on http-proxy-middleware wrapper and support for configuring multiple proxy rules. The way to use is inspired by the proxy option of webpack-dev-server
TL;DR
Proxy /api
requests to http://www.example.com
var koa = ;var proxy = ; var app = ; app;app; // http://localhost:3000/api/v1 -> http://www.example.com/api/v1
All http-proxy-middleware
options can be used.
Tip: Set the option changeOrigin
to true
for name-based virtual hosted sites.
koa2-nginx@1.x
Breaking with - V2.x version is a fully refactored version
- V1.x version is based on http-proxy, and the v2 version provides more rich and reasonable configuration based on http-proxy-middleware.
- The logic for internally processing
context-length
is removed, and we think this should be handled by the developer itself in the events hooks.
Table of Contents
Install
$ npm i koa2-nginx
Example
An example with koa2
server.
// include dependenciesconst Koa = ;const proxy = ; // proxy middleware optionsconst options = '/api': target: 'http://www.example.com' changeOrigin: true '**/*.html': target: 'http://www.example2.com' changeOrigin: true '/user': 'http://localhost:3000'; // create the proxy (without context)const exampleProxy = ; // mount `exampleProxy` in web serverconst app = ;app;app;
Options
koa2-nginx options
- autoProcessReqBody: If koa2-nginx is behind the body-parser, it may cause the request body to fail to proxy. Set
autoProcessReqBody
to true can proxy the request body injson
andform
content-type.
http-proxy-middleware options
Can refer option to http-proxy-middleware for each forwarding rule.
http-proxy options
Can refer option to http-proxy for each forwarding rule.
Usage
Option supports multiple pattern-matching proxy
normal
let option = '/api': target: 'http://www.example.com' changeOrigin: true { proxyResheaders'x-added' = 'foobar'; // add new header to response delete proxyResheaders'x-removed'; } { proxyReq; }
function
let option = { // your custom logic return target: 'http://www.example.com' changeOrigin: true }
batch proxy
If you want to proxy multiple, specific paths to the same target, you can use an array of one or more objects with a context
property:
let option = context: '/auth' '/api' target: 'http://localhost:3000'
Working examples
- EggJS TODO
FAQ
- POST/PUT request body is not proxied to the servers #40 or set
autoProcessReqBody
totrue