How to Setup HAProxy as Load Balancer for Apache on Ubuntu

How to Setup HAProxy as Load Balancer for Apache on Ubuntu

In web hosting, ensuring that your web server remains accessible and performs well under heavy traffic is crucial. One way to achieve this is by using a load balancer like HAProxy. HAProxy is a free, open-source software that provides high availability, load balancing, and proxy for TCP and HTTP-based applications.

This tutorial will guide you through the process of setting up HAProxy as a load balancer for Apache web servers on an Ubuntu system. By the end of this guide, you’ll have a fully functional HAProxy setup distributing network traffic efficiently across multiple Apache servers. This setup can significantly improve your website’s performance and reliability, especially during peak traffic periods.

Before we begin, ensure that you have the following:

  • An Ubuntu server.
  • Root or sudo access to the server.
  • At least two Apache web servers that HAProxy will distribute traffic to.

Let’s get started.

Step 1: Update Your System

First, update your Ubuntu system to ensure that all existing packages are up to date.

sudo apt-get update
sudo apt-get upgrade

Step 2: Install HAProxy

Once your system is updated, install HAProxy by running the following command:

sudo apt-get install haproxy

Step 3: Configure HAProxy

In the configuration file, you’ll need to define the settings for frontend (the incoming traffic), backend (the servers that HAProxy distributes traffic to), and defaults (the default settings).

sudo nano /etc/haproxy/haproxy.cfg

Once you’ve opened the file, you might see something like this:

    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
    stats timeout 30s
    user haproxy
    group haproxy

    log     global
    mode    http
    option  httplog
    option  dontlognull
    timeout connect 5000
    timeout client  50000
    timeout server  50000
    errorfile 400 /etc/haproxy/errors/400.http
    errorfile 403 /etc/haproxy/errors/403.http
    errorfile 408 /etc/haproxy/errors/408.http
    errorfile 500 /etc/haproxy/errors/500.http
    errorfile 502 /etc/haproxy/errors/502.http
    errorfile 503 /etc/haproxy/errors/503.http
    errorfile 504 /etc/haproxy/errors/504.http

This is the default configuration. Now, let’s add our frontend and backend configurations. For example, if you have two Apache servers running on the same network with IP addresses and, you might add the following:

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   default_backend http_back

backend http_back
   balance roundrobin
   server apache1 check
   server apache2 check

In this configuration:

  • The frontend is named http_front, listens on port 80, and uses the backend http_back by default.
  • The backend is named http_back, uses the round-robin algorithm for load balancing, and has two servers (apache1 and apache2) that it can distribute traffic to.
  • The check option enables health checks on the backend servers.
See also  How to Setup HAProxy with OCSP Stapling

Remember to replace the IP addresses and port numbers with those of your actual servers. After making these changes, save and close the file. Then, restart HAProxy to apply the new configuration:

sudo systemctl restart haproxy

Step 4: Configure Apache Servers

Before HAProxy can distribute traffic to your Apache servers, you need to ensure that they are correctly configured and can serve your website. Here’s a basic example of how you might do this:

You can put your website’s files in the default web directory, which is typically /var/www/html on Ubuntu systems. For example, you might create a simple HTML file to test the setup:

echo "<h1>This is Apache Server 1</h1>" | sudo tee /var/www/html/index.html

Ensure that Apache is running and is set to start on boot:

sudo systemctl start apache2
sudo systemctl enable apache2

Repeat these steps on your second Apache server, but change the content of the index.html file so you can distinguish between the two servers. For example:

echo "<h1>This is Apache Server 2</h1>" | sudo tee /var/www/html/index.html

Now, test the setup by accessing the IP address or domain of each Apache server in a web browser. You should see the respective HTML page that you created on each server. If you can see these pages, it means that your Apache servers are correctly configured and ready to be used with HAProxy.

Remember to replace the IP addresses and domain names with those of your actual servers. Also, this is a basic example. Your actual setup might involve more complex Apache configurations, depending on the needs of your website.

See also  How to Uninstall BIND on Ubuntu

Step 5: Test Your Setup

After configuring HAProxy and your Apache servers, it’s time to test the setup. Open a web browser and access the IP address or domain of your HAProxy server. For example, if your HAProxy server’s IP address is, you would enter in your web browser’s address bar.

You should see the HTML page served by one of your Apache servers. If you refresh the page several times, you should see the page from the other Apache server as well, indicating that HAProxy is correctly distributing traffic between the two servers.

Step 6: Monitor HAProxy

HAProxy includes built-in tools for monitoring the performance of your load balancer and backend servers. You can access these tools by navigating to the stats page on your HAProxy server.

In the HAProxy configuration file that we edited earlier, we included the line stats uri /haproxy?stats in the frontend configuration. This line enables the stats page and makes it accessible at the /haproxy?stats path on your HAProxy server.

To access the stats page, open a web browser and navigate to http://your-haproxy-ip/haproxy?stats, replacing your-haproxy-ip with the actual IP address or domain of your HAProxy server. You should see a page displaying various statistics about your HAProxy setup, including the current status of each backend server, the number of connections handled, and more.

Remember to secure access to this page in a production environment, as it can provide potentially sensitive information about your setup. You can do this by adding authentication to the stats page or by restricting access to certain IP addresses.

Commands Mentioned:

  • sudo apt-get update – Updates the package lists for upgrades and new package installations.
  • sudo apt-get upgrade – Installs the newest versions of all packages currently installed on the system.
  • sudo apt-get install haproxy – Installs HAProxy on the system.
  • sudo nano /etc/haproxy/haproxy.cfg – Opens the HAProxy configuration file in a text editor.
See also  How to Set Up Load Balancing with HAProxy on a VPS


Congratulations! You have successfully set up HAProxy as a load balancer for Apache on Ubuntu. This setup will help you ensure that your website remains accessible and performs well, even under heavy traffic. By distributing network traffic across multiple servers, you can improve your website’s performance and reliability.

Remember, this is just a basic setup. HAProxy offers many other features and options that you can explore to further optimize your load balancing.

We hope this tutorial was helpful.

If you have any questions or run into any issues, feel free to leave a comment below. We’ll do our best to assist you.


  1. What is HAProxy?

    HAProxy is a free, open-source software that provides high availability, load balancing, and proxy for TCP and HTTP-based applications. It is particularly suited for web hosting services, where it can distribute the load across several servers.

  2. Why use HAProxy for load balancing?

    HAProxy is a powerful and flexible solution for load balancing. It can handle high volumes of traffic and offers features like SSL termination, HTTP routing, health checking, and more. It can help improve the performance and reliability of your website.

  3. How does HAProxy distribute traffic?

    HAProxy distributes traffic to backend servers based on different algorithms like round robin, least connections, and source. The default is round robin, which distributes connections to the servers in turns.

  4. Can I use HAProxy with other web servers besides Apache?

    Yes, HAProxy can be used with any web server that uses the HTTP protocol, including Nginx, LiteSpeed, and others.

  5. What is the benefit of using a load balancer?

    A load balancer like HAProxy can help distribute network traffic efficiently across multiple servers. This can improve your website’s performance, especially during peak traffic periods, and increase its availability by ensuring that if one server goes down, traffic will be automatically redirected to other servers.


Leave a Reply

Your email address will not be published. Required fields are marked *