负载均衡是扩展应用程序并提高其性能和冗余的绝佳方法,Nginx是一种流行的Web服务器软件,可以配置为简单且功能强大的负载均衡器,以提高服务器资源的可用性和效率。在负载均衡配置中,nginx充当在多个单独服务器上工作的分布式Web应用程序的单个入口点。

Nginx配置负载均衡

本指南介绍如何使用nginx为云服务器设置负载均衡。作为先决条件,您需要至少安装两台主机并安装Web服务器软件。

安装nginx

按照您喜欢的方式设置服务器,添加用户,运行更新等之后,使用以下方法安装nginx。

#Debiansudo nano /etc/apt/sources.list#将以下内容添加到列表末尾http://nginx.org/packages/debian/jessie nginxdeb-src http://nginx.org/packages/ debian / jessie nginx#保存文件,退出编辑器,然后运行以下命令sudo aptitude updatesudo aptitude install nginx
#Ubuntunginx = stablesudo add-apt-repository ppa:nginx / $ nginxsudo apt-get updatesudo apt-get install nginx
#CentOSsudo vi /etc/yum.repos.d/nginx.repo#在文件中输入以下内容[nginx]name = nginx repobaseurl = http://nginx.org/packages/centos/$releasever/$basearch/gpgcheck = 0enabled = 1
#Save并退出,然后使用下面的命令sudo yum updatesudo yum install nginx

安装后将目录更改为nginx主配置文件夹。

cd / etc / nginx /

根据所使用的操作系统,Web服务器配置文件将位于两个位置之一。

Ubuntu和Debian遵循在/ etc / nginx / sites-available /中存储虚拟主机文件的规则,这些规则  通过符号链接启用到  / etc / nginx / sites-enabled /。您可以使用以下命令启用任何新的虚拟主机文件。

sudo ln -s / etc / nginx / sites-available / vhost  / etc / nginx / sites-enabled / vhost

CentOS用户可以在/etc/nginx/conf.d/下找到其主机配置文件,其中加载了任何.conf类型的虚拟主机文件。

检查您是否可以找到默认配置,然后重新启动nginx。

sudo service nginx restart

通过在Web浏览器中打开负载均衡器服务器的公共IP地址来测试服务器是否回复HTTP请求。当您看到nginx的默认欢迎页面时,则表示安装成功。

如果在加载页面时遇到问题,请检查防火墙是否阻止了该连接。例如,在CentOS 7上,默认防火墙规则不允许HTTP traffic,请使用以下命令启用它。

sudo firewall-cmd --add-service = http--permanent sudo firewall-cmd –reload

然后尝试重新加载浏览器。

将nginx配置为负载均衡器的方法

安装并测试nginx后,可以开始配置以实现负载均衡。从本质上讲,您需要做的就是设置nginx,其中包含要监听的连接类型以及重定向位置的说明。要实现此目的,请使用您喜欢的任何文本编辑器创建新的配置文件,例如使用nano:

sudo nano /etc/nginx/conf.d/load-balancer.conf

在load-balancer.conf中,您需要定义以下两个段:upstream and server,请参阅下面的示例。

#定义要包含在负载均衡方案中的服务器。

#最好使用服务器的私有IP以获得更好的性能和安全性。

upstream backend{   server 10.1.0.101;   server 10.1.0.102;   server 10.1.0.103;}

#这个服务器接受所有通信端口80,并将其传递到upstream。

#请注意,upstream名称和proxy_pass需要匹配。

server {   listen 80;   location / {      proxy_pass http:// backend;   }}

然后保存文件并退出编辑器。

接下来,您需要禁用先前在安装后测试的默认服务器配置,同样取决于操作系统。

在Debian和Ubuntu系统上,您需要从启用站点的文件夹中删除默认符号链接。

sudo rm / etc / nginx / sites-enabled / default

CentOS的主机不使用相同的链接,而不是简单的更名default.conf在conf.d /目录下的东西,例如:

sudo mv /etc/nginx/conf.d/default.conf/etc/nginx/conf.d/default.conf.disabled

然后使用以下命令重新启动nginx。

sudo service nginx restart

检查nginx是否成功启动,如果重新启动失败,请查看刚刚创建的  /etc/nginx/conf.d/load-balancer.conf,以确保没有错误类型或缺少分号。

在Web浏览器中输入负载均衡器的公共IP地址时,现在应该将其传递给其中一台后端服务器。

负载均衡方法

如果没有定义其他方法,默认情况下使用nginx进行负载均衡会使用循环算法,如上面的第一个示例所示。使用循环方案,将根据您在load-balancer.conf  文件中设置的顺序轮流选择每个服务器。这平衡了短期操作的请求数量。

基于最少连接的负载平衡是另一种简单的方法。顾名思义,此方法将请求定向到当时具有最少活动连接的服务器。对于请求有时可能需要更长时间才能完成的应用程序,它比循环法更有效。

要启用最少连接平衡方法,请将参数least_conn添加到upstream部分,如下例所示。

upstream backend {   least_conn;   server 10.1.0.101;   server 10.1.0.102;   server 10.1.0.103;}

虽然循环和最少连接平衡方案是公平的,但是它们不能提供会话持久性。如果您的Web应用程序要求用户随后被定向到与之前连接相同的后端服务器,则应使用IP哈希方法。IP哈希使用访问者IP地址作为密钥来确定应选择哪个主机来为请求提供服务。这允许访问者每次被定向到同一服务器,被授予服务器可用且访问者的IP地址未被更改。

要使用此方法,请将ip_hash -parameter 添加到upstream,如下面的示例所示。

upstream backend {   ip_hash;   server 10.1.0.101;   server 10.1.0.102;   server 10.1.0.103;}

在不同主机之间的可用资源不相等的服务器设置中,可能希望某些服务器优先于其他服务器。定义服务器权重允许您使用nginx进一步微调负载均衡。负载均衡器中权重最高的服务器最常选择。

upstream backend {   server 10.1.0.101 weight = 4;   server 10.1.0.102 weight = 2;   server 10.1.0.103;}

例如,在上面显示的配置中,第一个服务器的选择频率是第二个服务器的两倍,与第三个服务器相比,它再次获得两倍的请求。

启用HTTPS的负载均衡

在负载均衡器配置文件中添加另一个服务器部分,该文件使用SSL侦听端口443上的HTTPS流量,并为upstream设置proxy_pass,就像上一个示例中的HTTP一样。

再次打开配置文件进行编辑。

sudo nano /etc/nginx/conf.d/load-balancer.conf

然后将以下服务器段添加到文件末尾。

server {   listen 443 ssl;   server_name domain_name ;   ssl_certificate / etc / letsencrypt / live / domain_name /cert.pem;   ssl_certificate_key / etc / letsencrypt / live / domain_name /privkey.pem;   location / {      proxy_pass http:// backend;   }}

然后保存文件,退出编辑器并再次使用重新启动nginx

sudo service nginx restart

结论

如果您希望提高Web应用程序的性能和可用性,那么设置负载均衡绝对值得考虑。虽然使用多个主机可以保护Web服务具有冗余,但负载均衡本身仍然可以留下单点故障。您可以通过在多个负载平衡器之间设置浮动IP来进一步提高高可用性。