Nginx : Added load Balancer Doc
This commit is contained in:
128
Nginx/5-Load-Balancer.md
Normal file
128
Nginx/5-Load-Balancer.md
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
# Setting Up Load Balancing with Nginx
|
||||||
|
|
||||||
|
Load balancing with Nginx helps distribute incoming traffic across multiple backend servers, improving the performance, reliability, and availability of your applications. This guide provides a step-by-step process to configure a basic round-robin load balancer using Nginx.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- **Nginx Installed**: Ensure Nginx is installed on your server.
|
||||||
|
- **Root or sudo privileges** to edit configuration files and restart Nginx.
|
||||||
|
- **Multiple Backend Servers**: Two or more backend servers with applications running. In this example, we use `10.10.10.1` and `10.10.10.2`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Step 1: Create the Load Balancer Configuration File
|
||||||
|
|
||||||
|
1. **Open a new configuration file** for the load balancer in Nginx’s `sites-available` directory:
|
||||||
|
```bash
|
||||||
|
sudo vim /etc/nginx/sites-available/load_balancer.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Define the Load Balancer Configuration**
|
||||||
|
Copy the following configuration into the file. Replace the IP addresses (`10.10.10.1` and `10.10.10.2`) with the actual IP addresses of your backend servers.
|
||||||
|
|
||||||
|
```nginx
|
||||||
|
# Define the upstream group of backend servers
|
||||||
|
upstream backend_servers {
|
||||||
|
server 10.10.10.1;
|
||||||
|
server 10.10.10.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name _; # Accept any hostname or specify a domain name if needed
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://backend_servers; # Forward requests to the backend servers group
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Log files
|
||||||
|
access_log /var/log/nginx/load_balancer_access.log;
|
||||||
|
error_log /var/log/nginx/load_balancer_error.log;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Explanation of Key Directives
|
||||||
|
- **upstream**: Defines a pool of backend servers to which Nginx will forward traffic. By default, Nginx uses a round-robin algorithm, sending requests to each server in turn.
|
||||||
|
- **server_name**: Accepts any hostname (`_`) or a specific domain name.
|
||||||
|
- **proxy_pass**: Specifies the backend server group defined by `upstream`.
|
||||||
|
- **proxy_set_header**: Passes client information such as the original IP and protocol to the backend servers.
|
||||||
|
- **access_log** and **error_log**: Directs logs to specified files for easier monitoring and troubleshooting.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Step 2: Enable the Load Balancer Configuration
|
||||||
|
|
||||||
|
1. **Create a symbolic link** to `sites-enabled` to activate the load balancer configuration in Nginx:
|
||||||
|
```bash
|
||||||
|
sudo ln -s /etc/nginx/sites-available/load_balancer.conf /etc/nginx/sites-enabled/load_balancer.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Verify Nginx Configuration**
|
||||||
|
Test the Nginx configuration for syntax errors:
|
||||||
|
```bash
|
||||||
|
sudo nginx -t
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Reload Nginx** to apply the new configuration:
|
||||||
|
```bash
|
||||||
|
sudo systemctl reload nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Step 3: Test the Load Balancer
|
||||||
|
|
||||||
|
To ensure the load balancer is distributing traffic correctly, you can access the Nginx server’s IP address or domain name in your web browser:
|
||||||
|
```
|
||||||
|
http://your-server-ip/
|
||||||
|
```
|
||||||
|
|
||||||
|
You should see responses from the backend servers. Testing multiple times should show responses alternating between `10.10.10.1` and `10.10.10.2`, as Nginx forwards requests in a round-robin fashion.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Optional: Configure Additional Load Balancing Methods
|
||||||
|
|
||||||
|
Nginx supports multiple load balancing algorithms, which you can specify within the `upstream` block:
|
||||||
|
|
||||||
|
- **Round Robin (default)**: Distributes requests evenly across all servers.
|
||||||
|
- **Least Connections**: Directs traffic to the server with the fewest active connections.
|
||||||
|
```nginx
|
||||||
|
upstream backend_servers {
|
||||||
|
least_conn;
|
||||||
|
server 10.10.10.1;
|
||||||
|
server 10.10.10.2;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- **IP Hash**: Directs requests from the same client IP to the same backend server, which can help with session persistence.
|
||||||
|
```nginx
|
||||||
|
upstream backend_servers {
|
||||||
|
ip_hash;
|
||||||
|
server 10.10.10.1;
|
||||||
|
server 10.10.10.2;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Troubleshooting Common Issues
|
||||||
|
|
||||||
|
- **Error: 502 Bad Gateway**
|
||||||
|
- This error often means that the backend server is unreachable or down. Verify the IP addresses and ensure each backend server is running and accessible.
|
||||||
|
|
||||||
|
- **Permission Denied for Log Files**
|
||||||
|
- Ensure the log file paths are writable by Nginx. Adjust permissions as needed:
|
||||||
|
```bash
|
||||||
|
sudo chown www-data:www-data /var/log/nginx/load_balancer_access.log
|
||||||
|
```
|
||||||
|
|
||||||
|
- **Configuration Errors**
|
||||||
|
- Always test configuration changes with `sudo nginx -t` before reloading or restarting Nginx.
|
||||||
|
|
||||||
Reference in New Issue
Block a user