Skip to content

Load Balancing with Laravel Forge

Load balancing is a traffic distribution technique that routes incoming requests across multiple servers to prevent any single server from becoming overwhelmed. Laravel Forge, a server management platform created by the Laravel team, provides built-in load balancing support for applications deployed on DigitalOcean, AWS, Linode, and Vultr. The platform supports three load balancing algorithms: Round Robin (default), Least Connections, and IP Hash. Load balancers handle SSL termination, decrypting HTTPS traffic before forwarding requests to backend servers over HTTP. For Laravel applications handling 10,000+ daily requests, load balancing can reduce response latency by 40-60% and provide fault tolerance against server failures. Nginx, the underlying reverse proxy server used by Forge, efficiently distributes traffic using health checks to route around failed backend servers automatically.

Setting Up Your Load Balancer

Creating the Load Balancer Server

First, create a new server in Laravel Forge with these specifications:

  • Server Name: main-LB

  • Type: Load Balancer

  • Region: New York (or your preferred region)

  • Size: Small (sufficient for most use cases)

Important: Save your server password in a secure location, you'll need it later.

Adding Your Site

Once your server is created, add a new site:

  1. Enter your domain (e.g., forgeapp.somniotech.com)

  2. Select What is Round Robin Load Balancing? as the balancing method

  3. Add your backend servers (the web servers that will handle the actual requests)

For this setup, you'll need at least two web servers already configured and running your Laravel application.

DNS Configuration

Copy the IP address of your load balancer and create an A record in your DNS provider pointing your domain to this IP address. This ensures traffic reaches your load balancer first.

SSL Certificate Setup

Secure your site with an SSL certificate:

  1. Navigate to your site's domain settings

  2. Click "Add Certificate"

  3. Select "Let's Encrypt"

  4. Obtain the certificate

The load balancer will handle SSL termination, meaning it decrypts HTTPS traffic before forwarding it to your web servers over HTTP.

Configuring Your Web Servers

Domain Setup

On each web server, you need to configure the domains properly:

  1. Add the main domain (the one pointing to your load balancer)

  2. Set it as the primary domain

  3. Do not add SSL certificates on the web servers (the load balancer handles this)

Environment Configuration

Update your Laravel .env file on each web server:

APP_URL=https://forgeapp.somniotech.com

Deploy your application after making these changes.

Trusted Proxies

This is a critical step often overlooked. Since the load balancer sits between your users and web servers, Laravel needs to trust it as a proxy. Configure your trusted proxies to ensure Laravel correctly handles HTTPS requests.

The load balancer sends traffic to your web servers over HTTP, but Laravel needs to know the original request was HTTPS. Without proper proxy configuration, you'll encounter mixed content issues where some assets load over HTTP and others over HTTPS.

For more information, look at this article from Laravel New https://laravel-news.com/managing-proxy-trust-in-laravel-applications

How Laravel Forge Load Balancing Works

Laravel Forge supports three load balancing methods:

Round Robin

Round Robin is the default load balancing algorithm in Laravel Forge, distributing incoming traffic evenly across all available servers in sequential order. This method works by cycling through server lists: Request 1 goes to Server 1, Request 2 to Server 2, Request 3 back to Server 1, and so on. Round Robin is optimal when all backend servers have similar specifications and processing capabilities. For Laravel applications where requests have uniform complexity, Round Robin provides consistent distribution without requiring complex calculations. However, it does not account for current server load, so servers with varying specs may become unevenly taxed.

Example:

  • Request 1 → Server 1

  • Request 2 → Server 2

  • Request 3 → Server 1

  • Request 4 → Server 2

When to Use Least Connections Balancing

Least Connections is a load balancing algorithm that routes traffic to the backend server with the fewest active connections at any given moment. This method adapts dynamically to varying server loads, making it ideal for Laravel applications where request processing times differ significantly between endpoints. For CPU-intensive tasks like image processing or API calls that take 5-10 seconds, Least Connections prevents these servers from becoming overwhelmed while lighter requests route elsewhere. Production Laravel applications with mixed workloads benefit most from this approach, particularly those running background jobs alongside synchronous web requests.

Best for:

  • Multiple applications in a cluster

  • Varying request processing times

  • Uneven server loads

How IP Hash Load Balancing Works

IP Hash is a load balancing method that determines server selection by hashing the client IP address, ensuring consistent server assignment for each unique visitor. This technique provides session persistence, meaning a single client always connects to the same backend server throughout their session. For Laravel applications using server-side session storage (file or database drivers), IP Hash ensures session continuity without requiring shared session stores across servers. The hash function uses the first three octets of IPv4 addresses (or full IPv6 addresses), so users behind corporate proxies may share server assignments. IP Hash is recommended when deploying Laravel applications with database-backed queues or server-specific cache implementations.

Key benefit: Session persistence - each client always connects to the same server, useful for:

  • Applications with server-side sessions

  • Maintaining consistent cache hits

  • Sticky session requirements

Advanced Features

Weights

Weights allow you to send more traffic to specific servers. If you set a weight of 3 on Server 1 and 1 on Server 2:

  • Requests 1, 2, 3 → Server 1

  • Request 4 → Server 2

  • Requests 5, 6, 7 → Server 1

  • Request 8 → Server 2

This is invaluable when you have servers with different specifications and want to utilize a more powerful server more heavily.

Pausing Servers

Pausing temporarily stops traffic to a specific server without removing it from the pool. Use this when:

  • Testing changes on a single server

  • Debugging caching issues

  • Investigating server-specific problems

Pro tip: Don't forget to unpause your servers! I've made this mistake before, and all traffic continued going to just one server.

Backup Servers

Mark a server as a backup, and it will only receive traffic if all primary servers fail. This creates a failover mechanism:

  1. All traffic goes to primary servers

  2. If primary servers become unavailable, backup servers activate

  3. When primary servers recover, traffic shifts back

Perfect for maintaining uptime during unexpected failures.

Debugging with Custom Headers

Add a custom header in your web server Nginx configuration to identify which server is responding:

add_header Who "web-server-1";

This makes testing and debugging significantly easier, as you can verify traffic distribution patterns in real-time.

Key Takeaways

  • The load balancer handles SSL termination, not your individual web servers

  • Configure trusted proxies in Laravel to avoid mixed content issues

  • Choose your load balancing method based on your application's needs

  • Use weights to optimize traffic distribution across servers with different capabilities

  • Leverage pausing for testing and backup servers for high availability

  • Custom headers are invaluable for debugging

What's Next?

In the next post, we'll explore application-level configurations to ensure your Laravel apps work seamlessly across multiple servers, covering topics like session management, cache synchronization, and database considerations.

Want to see this process in action? Check out the full video tutorial on my channel! https://youtu.be/RWM4TqHFC8Q

Published on October 14th, 2025

Have questions? Let's talk.

I help founders and tech teams build software that scales. If something in this article resonated with you, I'd love to hear about what you're working on.

Book a Discovery Call

No pitch, just a conversation.