为负载均衡器设置 NGINX
设置 Nginx 负载均衡
设置 Nginx 负载均衡
负载均衡是一种在多台性能强大的虚拟专用服务器 (VPS) 之间分配传入流量的有效机制。通过将处理机制分配给多台服务器,可以为应用程序提供冗余,从而确保容错能力和更高的稳定性。用于负载均衡的轮询 (Round Robin) 算法会将访问者发送到一组 IP 地址中的一个。轮询 (Round Robin) 最基本的实现方式是分配服务器负载,而无需考虑服务器响应时间和访问者所在地理位置等更细微的因素。
设置
本教程中的步骤要求用户拥有您 VPS 的 root 权限。您可以在用户教程中了解如何设置。
在设置 nginx 负载均衡之前,你应该在你的 VPS 上安装 nginx。你可以使用 apt-get 快速安装:
sudo apt-get install nginx
上游模块
为了设置循环负载均衡器,我们需要使用 nginx 上游模块。我们将该配置合并到 nginx 设置中。
继续并打开您的网站配置(在我的示例中,我将仅使用通用默认虚拟主机):
sudo nano /etc/nginx/sites-available/default
我们需要将负载平衡配置添加到文件中。
首先,我们需要包含上游模块,如下所示:
# Define which servers to include in the load balancing scheme.
# It's best to use the servers' private IPs for better performance and security.
# You can find the private IPs at your UpCloud control panel Network section.
http {
upstream server {
server domain-1.com;
server domain-2.com;
server domain-3.com;
}
# This server accepts all traffic to port 80 and passes it to the upstream.
# Notice that the upstream name and the proxy_pass need to match.
server {
# Add this if use HTTPS
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name localhost;
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
location / {
proxy_pass http://server;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $proxy_protocol_addr;
proxy_set_header X-Forwarded-For $proxy_protocol_addr;
# Very important, controls proxied websocket connection timeout
proxy_read_timeout 600s;
}
}
}
重启 nginx:
sudo service nginx restart
负载平衡方法
如果没有定义其他方法,nginx 的负载均衡默认使用轮询算法,就像上面第一个示例一样。轮询方案会根据您在 load-balancer.conf 文件中设置的顺序轮流选择每台服务器。这样可以均衡短操作的请求数量。
最少连接
基于最少连接的负载均衡是另一种简单的方法。顾名思义,此方法将请求定向到当时活动连接数最少的服务器。对于请求有时可能需要更长时间才能完成的应用程序,它比循环调度更公平。
要启用最少连接平衡方法,请将参数least_conn添加到上游部分,如下例所示。
upstream backend {
least_conn;
server 10.1.0.101;
server 10.1.0.102;
server 10.1.0.103;
}
重量
更精确地将用户分配到服务器的一种方法是将特定的权重分配给某些机器。Nginx 允许我们分配一个数字,指定应定向到每台服务器的流量比例。
包含服务器权重的负载平衡设置可能如下所示:
upstream backend {
server backend1.example.com weight=1;
server backend2.example.com weight=2;
server backend3.example.com weight=4;
}
哈希
IP 哈希允许服务器根据客户端的 IP 地址进行响应,每次访问时都会将访问者引导回同一个 VPS(除非该服务器宕机)。如果已知某个服务器处于非活动状态,则应将其标记为宕机。所有原本应该路由到该宕机服务器的 IP 都会被重定向到备用服务器。
以下配置提供了一个示例:
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com down;
}
马克斯失败了
根据默认的轮询设置,即使虚拟专用服务器没有响应,nginx 也会持续向这些服务器发送数据。Max Fail 可以通过让无响应的服务器在设定的时间内停止运行来自动阻止这种情况。
有两个因素与最大失败次数相关:max_fails 和 fall_timeout。最大失败次数是指在服务器被视为不活动之前,连接服务器的最大失败次数。fall_timeout 指定服务器被视为不活动的时间长度。一旦超过该时间,新的服务器连接尝试将重新启动。默认超时值为 10 秒。
示例配置可能如下所示:
upstream backend {
server backend1.example.com max_fails=3 fail_timeout=15s;
server backend2.example.com weight=2;
server backend3.example.com weight=4;
}