Product
arrow
Pricing
arrow
Resource
arrow
Use Cases
arrow
Locations
arrow
Help Center
arrow
Program
arrow
WhatsApp
WhatsApp
WhatsApp
Email
Email
Enterprise Service
Enterprise Service
menu
WhatsApp
WhatsApp
Email
Email
Enterprise Service
Enterprise Service
Submit
pyproxy Basic information
pyproxy Waiting for a reply
Your form has been submitted. We'll contact you in 24 hours.
Close
Home/ Blog/ How to quickly set up a Node.js reverse proxy using http-proxy-middleware?

How to quickly set up a Node.js reverse proxy using http-proxy-middleware?

PYPROXY PYPROXY · Jun 03, 2025

A reverse proxy is a server that sits between client devices and a web server. It acts as an intermediary for requests from clients seeking resources from the server. In a Node.js environment, setting up a reverse proxy can be incredibly useful for load balancing, security, and optimizing server performance. One of the easiest ways to implement a reverse proxy in Node.js is by using the `http-proxy-middleware` library. This article will provide a comprehensive guide on how to quickly set up a Node.js reverse proxy using `http-proxy-middleware`, covering its installation, basic configuration, and advanced use cases.

What is http-proxy-middleware?

`http-proxy-middleware` is a powerful, flexible middleware for Node.js that allows you to create a reverse proxy in just a few lines of code. It acts as a middleware in your Node.js applications, routing requests from the client to another server. It's commonly used with Express.js, a popular web framework for Node.js. The library is easy to integrate and supports advanced configurations like path rewriting, headers modification, and more, making it ideal for use cases such as API forwarding, cross-domain requests, and secure communication.

Why Use a Reverse Proxy in Node.js?

A reverse proxy offers several benefits in a Node.js application:

1. Load Balancing: By distributing incoming requests across multiple backend servers, a reverse proxy ensures that no single server is overloaded, improving the scalability and reliability of your application.

2. Security: A reverse proxy can serve as a shield between the client and your web servers, hiding the internal network structure. This makes it harder for attackers to directly access backend systems, providing a layer of protection.

3. Caching and Performance: By caching responses at the proxy level, you can reduce the load on your backend servers and deliver content faster to end-users.

4. SSL Termination: A reverse proxy can handle SSL/TLS encryption and decryption, offloading the heavy work from your backend servers.

5. Cross-Origin Resource Sharing (CORS): With the reverse proxy, you can bypass CORS restrictions, enabling smoother interaction between frontend and backend services hosted on different domains.

Setting Up http-proxy-middleware in Node.js

Now that we understand what a reverse proxy is and why it’s beneficial, let’s look at how to set it up using the `http-proxy-middleware` library.

Step 1: Install the Required Dependencies

Before you start, you need to install the necessary dependencies. To do this, open your terminal and run the following command:

```bash

npm install http-proxy-middleware express

```

This will install both `http-proxy-middleware` and `Express`, the web framework we’ll use to set up the reverse proxy.

Step 2: Create a Basic Express Server

Once the dependencies are installed, the next step is to set up a basic Express server. Create a file named `server.js` and add the following code:

```javascript

const express = require('express');

const { createProxyMiddleware } = require('http-proxy-middleware');

const app = express();

const port = 3000;

// Setup the proxy middleware

app.use('/api', createProxyMiddleware({

target: 'http://example.com', // the target server to forward requests to

changeOrigin: true,

pathRewrite: {

'^/api': '', // rewrite the path to match the target server’s path

},

}));

app.listen(port, () => {

console.log(`Proxy server is running at http://localhost:${port}`);

});

```

In this code:

- We create an Express server using `express()`.

- The `createProxyMiddleware` function is used to set up the reverse proxy.

- We specify the target server that we want to forward the requests to (in this case, a placeholder `http://example.com`).

- We use the `pathRewrite` option to remove the `/api` prefix before forwarding the request to the target server.

- The server listens on port `3000`.

Step 3: Run the Server

Now, you can start your server by running the following command in your terminal:

```bash

node server.js

```

If everything is set up correctly, you should see the message “Proxy server is running at http://localhost:3000.” Now, any request made to `http://localhost:3000/api` will be forwarded to the target server (e.g., `http://example.com`).

Advanced Configuration Options

The `http-proxy-middleware` library offers several advanced configuration options to enhance your reverse proxy. Here are some key options you can use:

1. Custom Headers: You can modify request and response headers as they pass through the proxy. For example:

```javascript

app.use('/api', createProxyMiddleware({

target: 'http://example.com',

changeOrigin: true,

onProxyReq: (proxyReq, req, res) => {

proxyReq.setHeader('X-Additional-Header', 'value');

},

}));

```

2. Logging: You can log details of the requests passing through the proxy. For example, to log the request URL:

```javascript

app.use('/api', createProxyMiddleware({

target: 'http://example.com',

changeOrigin: true,

logLevel: 'debug',

}));

```

3. Path Rewriting: If you need to rewrite URLs dynamically, you can configure `pathRewrite` based on the request URL. For example:

```javascript

app.use('/api', createProxyMiddleware({

target: 'http://example.com',

changeOrigin: true,

pathRewrite: (path, req) => {

return path.replace('/api', '/newApi');

},

}));

```

4. Error Handling: You can handle errors that occur during proxying by using the `onError` callback. For instance:

```javascript

app.use('/api', createProxyMiddleware({

target: 'http://example.com',

changeOrigin: true,

onError: (err, req, res) => {

res.status(500).send('Something went wrong');

},

}));

```

Conclusion

Setting up a reverse proxy using `http-proxy-middleware` in Node.js is a simple yet effective way to enhance the performance, scalability, and security of your application. By following the steps above, you can quickly create a reverse proxy that forwards requests to a backend server. Moreover, the library offers powerful features like path rewriting, custom headers, and error handling, allowing you to tailor the proxy to suit your needs. Whether you’re working with a single server or multiple backend services, `http-proxy-middleware` makes it easy to manage requests and improve the efficiency of your Node.js application.

Related Posts

Clicky