要将Nginx设置为后端服务器的负载均衡器,请按照以下步骤进行操作:
- 以提升的权限打开Nginx配置文件
- 定义一个upstream元素,并列出后端集群中的每个节点
- 使用proxy_pass位置设置将URI映射到上游集群
- 重新启动Nginx服务器以应用配置更改
- 验证成功配置了Nginx负载均衡器设置
我应该编辑哪个Nginx配置文件?
随着Nginx配置的增长,将需要对上游元素和proxy_pass位置设置进行更改的文件。
在本Nginx负载均衡器示例中,我们将编辑名为default的文件,该文件位于*/etc/nginx/sites-available*文件夹中。
如何使用Nginx的上游设置?
所有在集群中共同工作以支持单个应用程序或微服务的后端服务器都应在Nginx的上游块中列出。
在我们的示例中,两个本地主机在不同的端口上运行。每个都被列为samplecluster上游集合的一部分的服务器:
upstreamsamplecluster {
server localhost:8080;
server localhost:8090;
}
负载均衡器也是反向代理吗?
Nginx负载均衡器还将充当反向代理。
为此,Nginx需要知道应将哪些URL转发给受管理的工作负载集群。您必须在默认配置文件中配置一个带有Nginx proxy_pass条目的位置元素。
location/sample {
proxy_pass http://samplecluster/sample;
}
通过此配置,Nginx上的所有包含*/sample* URL的请求将转发到upstream元素名为samplecluster中列出的两个应用程序服务器之一。
Nginx负载均衡器设置将写入sites-available文件夹中的默认文件。
完整的Nginx负载均衡器配置文件
以下是在此Nginx负载均衡器示例中使用的完整配置文件:
### Nginx Load Balancer Example
upstream samplecluster {
# 上游元素列出了所有参与Nginx负载均衡器示例的后端服务器
server localhost:8090;
server localhost:8080;
}
### Nginx负载均衡器示例在端口80上运行
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
# proxy_pass设置还将使Nginx负载均衡器成为反向代理
location /sample {
proxy_pass http://samplecluster/sample;
}
} # Nginx负载均衡器和反向代理配置文件结束
测试Nginx作为反向代理负载均衡器
配置Nginx负载均衡器后,重新启动服务器并测试负载均衡器:
sudo service nginx restart
当服务器重新启动时,Nginx将所有包含*/sample* URL的请求都转发到后端管理的Apache Tomcat服务器。
由Tomcat处理的端口80请求证明Nginx反向代理负载均衡器已正确配置。
如何在Nginx负载均衡服务器上设置权重?
向Nginx负载均衡器添加常见配置是在各个服务器上添加权重。
如果一个服务器比另一个服务器更强大,您应该让它处理更多的请求。为此,请在该服务器上添加更高的权重。
upstream samplecluster {
server localhost:8090weight=10;
server localhost:8080weight=20;
}
在此示例中,端口8080上运行的服务器将接收比端口8090上运行的服务器更多的请求,因为其权重设置是其同行的两倍。
如何在Nginx中实现粘性会话?
有状态的应用程序依赖于反向代理在每个请求-响应周期中将来自给定客户端的请求发送到相同的后端服务器。
如果将ip_hash元素添加到上游集群配置中,则Nginx支持粘性会话:
upstream samplecluster {
ip_hash;
server localhost:8090 weight=10;
server localhost:8080 weight=20;
}
当Nginx负载均衡环境中的服务器离线时,如何配置Nginx负载均衡器?
如果Nginx负载均衡环境中的上游服务器之一离线,可以在配置文件中将其标记为down。
upstream samplecluster {
ip_hash;
server localhost:8090 weight=10
;
server localhost:8080 weight=20;
server localhost:8070down;
}
如果将上游服务器标记为离线,Nginx负载均衡器将不会将任何请求转发到该服务器,直到移除标志。