How To Use Apache as a Reverse Proxy with mod_proxy on Ubuntu 22.04

Aug 20, 2023

Using Apache as a reverse proxy with mod_proxy on Ubuntu 22.04 is a common setup for forwarding requests to different backend servers or applications. This allows you to centralize the handling of incoming HTTP requests and distribute them to various backend services based on the URL path, domain, or other criteria. Here's a step-by-step guide on how to set up Apache as a reverse proxy with mod_proxy:

Step 1 : Before you begin, make sure you have Apache installed and running on your Ubuntu 22.04 server. You can install it with the following command:

sudo apt update
sudo apt install apache2

Step 2 : Enable the Required Apache Modules

First, you need to enable the necessary Apache modules. You can do this using the a2enmod command:

sudo a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests

Step 3 : Restart Apache

Restart Apache to apply the changes

sudo systemctl restart apache2

Step 4 : Create a Simple React.js Application

- Let's begin by creating a basic React.js application. In your terminal, execute these commands:

npx create-react-app my-react-app

This will generate a new React.js application named "my-react-app". Build it with the following command within your React app's directory:

cd my-react-app
npm run build

- To serve your React application, run the following command:

serve -s build -n &

This command starts a server, serving the contents of the build directory on port 3000. It will provide you with a URL (typically http://localhost:3000) where your application is available.

Step 5 : Create a Virtual Host Configuration

Next, you'll need to create a virtual host configuration file for your reverse proxy. You can do this by creating a .conf file in the /etc/apache2/sites-available/ directory. Replace your_domain_or_subdomain with the actual domain or subdomain you want to use:

sudo nano /etc/apache2/sites-available/your_domain_or_subdomain.conf

Inside the configuration file, you can define how requests should be forwarded to your backend server. Here's a basic example:

<VirtualHost *:80>
    ServerName your_domain_or_subdomain.com

    # Define the reverse proxy rules
    ProxyPass / http://backend_server_ip/
    ProxyPassReverse / http://backend_server_ip/

    # Additional proxy settings if needed
    # ProxyPreserveHost On

In this example, replace your_domain_or_subdomain.com with your actual domain or subdomain, and replace backend_server_ip with the IP address or hostname of your backend server. The ProxyPass and ProxyPassReverse directives specify the forwarding rules.

Step 6 : Enable the Virtual Host Configuration

After creating the virtual host configuration file, you need to enable it and reload Apache to apply the changes:

sudo a2ensite your_domain_or_subdomain.conf
sudo systemctl reload apache2

Step 7 : Test the Reverse Proxy

Your React.js application should now be accessible through Apache. Simply open a web browser and visit your domain or subdomain:


Your React.js application is now live and served via Apache as a reverse proxy.

Step 8 : Additional Configuration (Optional)

Depending on your specific use case, you may need to configure additional settings, such as SSL/TLS for secure connections, load balancing, or custom request headers. Be sure to consult Apache's documentation for more advanced configuration options.

Congratulations! You've successfully set up Apache as a reverse proxy with mod_proxy on Ubuntu 22.04. This configuration can help you manage and distribute incoming web traffic to different backend services or applications.

forwarded to your backend server to reactjs