编程技术分享平台

网站首页 > 技术教程 正文

CentOS7 - 安装NGINX作为负载平衡器

xnh888 2024-09-30 04:58:55 技术教程 16 ℃ 0 评论

安装NGINX作为负载平衡器

高流量网站可以分发到不同的服务器,以更好地分散工作负载或实现冗余。 系统集群中的每个服务器都有自己的网站或Web应用程序文件副本,并且能够满足用户的请求。 然后,技巧是以有序的方式将用户的请求路由到这些服务器之一。 有不同的方法,但常见的方法是设置负载均衡器或反向代理服务器。

NGINX比Apache更新一些; 十多年前专门为处理高负载连接而编写的,它可以用作Web服务器,代理,缓存和负载均衡器。 在本文中,我们将了解如何将NGINX设置为负载均衡器,以在客户端和Apache服务器集群之间代理请求.

准备

此配方需要具有有效网络连接的CentOS系统。 它假设你有其他配置Apache的系统来服务网站,如前面的配方所述; 我们将使用IP地址192.168.56.20和192.168.56.30来引用这些系统。 NGINX的包由EPEL存储库托管; 如果存储库尚未注册,请参阅第4章,软件安装管理中的注册EPEL和Remi存储库配方。 通过使用root帐户登录或使用sudo,还需要管理权限.

怎么做

按照以下步骤使用NGINX设置反向代理:

  • 从EPEL存储库安装nginx包:
yum install nginx
  • 使用文本编辑器打开NGINX服务器的配置文件:
vi /etc/nginx/nginx.conf
  1. 在http块中,添加新的上游块以标识群集中的服务器:
 upstream cluster {
 server 192.168.56.20;
 server 192.168.56.30;
 }
  • 找到位置块并添加引用upstreamb将更改保存到配置并关闭文件。
  • 启动服务器并使其在系统重新启动时自动启动lock的proxy_pass选项:
 location / {
 proxy_pass http://cluster;
 }
  • 将更改保存到配置并关闭文件。
  • 启动服务器并使其在系统重新启动时自动启动:
systemctl start nginx.service
systemctl enable nginx.service
  • 在系统的防火墙中打开端口80以允许HTTP请求通过:
firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --reload

工作原理

像往常一样,我们开始安装程序包,这次是nginx。 该包可在EPEL存储库中找到。 安装完成后,我们更新了其配置,识别了集群中的服务器,然后代理了请求。 首先,我们添加了一个上游块:

 upstream cluster {
 server 192.168.56.20;
 server 192.168.56.30;
 }

cluster只是我们分配给这组服务器的名称,因此我们可以按名称引用该组。 如果要平衡多个集群,则可以有多个上游块。 其中的每个服务器条目都提供运行该站点的其中一个系统的IP地址或主机名。

接下来,我们找到了主要的位置块并添加了一个proxy_pass参数。 proxy_pass将转发请求转发到我们的集群组中的一个系统,并返回响应以满足请求:

location / {

proxy_pass http://cluster;

}

NGINX和托管Web服务器之间的通信是通过http完成的,因为这是proxy_pass值中指定的协议。 这很好,因为群集系统将在受信任网络上的负载均衡器后面运行。 如果您的站点是通过HTTPS提供的,则NGINX将需要处理TLS协商,因为它是客户端看到的公共服务器点; 客户不知道平衡器背后的任何东西。

要配置NGINX以处理HTTPS请求,请在服务器块内更新listenoptions以侦听端口443.然后添加带有ssl_certificate和ssl_certificate_key选项的条目以分别标识证书和密钥:

server {

# listen 80 default_server;

# listen [::]:80 default_server;

listen 443 ssl default_server;

listen [::]:443 ssl default_server;

ssl_certificate /etc/pki/tls/certs/www.example.pem;

ssl_certificate_key /etc/pki/tls/private/www.example.key;

...

}

完成更改并保存配置文件后,打开防火墙中的端口443并重新启动NGINX:

firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload
systemctctl restart nginx.service

循环法是负载平衡的默认方法。 这意味着第一个请求被代理到集群中的第一个服务器,然后是第二个服务器旁边,依此类推。 当NGINX到达列表的末尾时,它将从列表顶部再次启动,代理对第一个服务器的下一个请求。 我们可以使用其他策略,例如加权平衡。

为了执行加权平衡,我们为任何服务器分配权重,它将处理每次迭代的请求数。 这里,第一台服务器将在NGINX代理任何第二台服务器之前处理五个请求:

 upstream cluster {
 server 192.168.56.20 weight=5;
 server 192.168.56.30;
 }

使用负载平衡时,请记住,任何一台Web服务器都不能保证接收用户发送的下一个请求。 如果您正在平衡对使用会话的Web应用程序的访问,则可能会出现问题。 您可能需要考虑将会话数据存储在每个Web服务器可以访问的中央系统上,可能使用Redis或Memcache等数据库.

注意

我建议您避免任何依赖于会话持久性的平衡策略。 http://www.chaosincomputing.com/2012/05/sticky-sessions-are-evil上的帖子很好地概述了他们的问题.

See also

Refer to the following resources for more information on working with NGINX and load balancing:

  • The NGINX website (https://www.nginx.com/)
  • How to install NGINX on CentOS 7 (https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-centos-7)
  • Configuring HTTPS servers (http://nginx.org/en/docs/http/configuring_https_servers.html)
  • Using NGINX as a load balancer (http://nginx.org/en/docs/http/load_balancing.html)
  • How to store PHP sessions in Memcache (http://www.scalescale.com/tips/nginx/store-php-sessions-memcached)

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表