server.proxy
- Type:
Record<string, string> | Record<string, ProxyDetail>
- Default:
undefined
Configure proxy rules for the dev server or preview server to proxy requests to the specified service.
Example
Basic Usage
export default {
server: {
proxy: {
// http://localhost:3000/api -> http://localhost:3000/api
// http://localhost:3000/api/foo -> http://localhost:3000/api/foo
'/api': 'http://localhost:3000',
},
},
};
A request to /api/users
will now proxy the request to http://localhost:3000/api/users.
You can also proxy to an online domain name, such as:
export default {
server: {
proxy: {
// http://localhost:3000/api -> https://nodejs.org/api
// http://localhost:3000/api/foo -> https://nodejs.org/foo
'/api': 'https://nodejs.org',
},
},
};
Path Rewrite
If you don't want /api
to be passed along, we need to rewrite the path:
export default {
server: {
proxy: {
// http://localhost:3000/api -> http://localhost:3000
// http://localhost:3000/api/foo -> http://localhost:3000/foo
'/api': {
target: 'http://localhost:3000',
pathRewrite: { '^/api': '' },
},
},
},
};
Proxy WebSocket
If you want to proxy WebSocket requests, you can enable it through set ws
to true
:
export default {
server: {
proxy: {
'/rsbuild-hmr': {
target: 'http://localhost:3000', // will proxy to ws://localhost:3000/rsbuild-hmr
ws: true,
},
},
},
};
Options
The Rsbuild Server Proxy makes use of the http-proxy-middleware package. Check out its documentation for more advanced usages.
The full type definition of Rsbuild Server Proxy is:
import type { Options as HttpProxyOptions } from 'http-proxy-middleware';
type Filter = string | string[] | ((pathname: string, req: Request) => boolean);
type ProxyDetail = HttpProxyOptions & {
bypass?: (
req: IncomingMessage,
res: ServerResponse,
proxyOptions: ProxyOptions,
) => string | undefined | null | boolean;
context?: Filter;
};
type ProxyOptions =
| Record<string, string>
| Record<string, ProxyDetail>
| ProxyDetail[]
| ProxyDetail;
In addition to the http-proxy-middleware option, Rsbuild also support the bypass and context configuration.
bypass
Bypass the proxy based on the return value of a function.
- Return
null
or undefined
to continue processing the request with proxy.
- Return
true
to continue processing the request without proxy.
- Return
false
to produce a 404 error for the request.
- Return a path to serve from, instead of continuing to proxy the request.
// custom bypass
export default {
server: {
proxy: {
'/api': {
target: 'http://localhost:3000',
bypass: function (req, res, proxyOptions) {
if (req.headers.accept.indexOf('html') !== -1) {
console.log('Skipping proxy for browser request.');
return '/index.html';
}
},
},
},
},
};
context
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.
// proxy multiple
export default {
server: {
proxy: [
{
context: ['/auth', '/api'],
target: 'http://localhost:3000',
},
],
},
};