Nginx配置负载集群

dkm
dkm
2022-12-12 / 0 评论 / 13 阅读 / 正在检测是否收录...

Nginx的负载集群是基于的反向代理实现的,对主服务器的要求非常高,实际上使用反向代理的时候负载服务器要求最高,负载集群服务器决定了整个业务的资源分配和所有压力;

Nginx配置负载集群
Nginx的负载集群主要配置的是upstream组,upstream组里面为负载服务器。

配置负载集群upstream配置文件

  upstream stream_server {
          server 127.0.0.1:8080;
          server 127.0.0.1:8081;
          server 127.0.0.1:8082;
          server 127.0.0.1:8083;
  }

这种情况下的负载集群只能在某个服务器down的情况下才可以切换服务器,而且也会造成一台服务器连接数爆满,其他的服务器空闲资源太多;而且没有权重设置
所以upstream配置文件需要改成下面的样子(添加权重)

  upstream stream_server {
          server 127.0.0.1:8080 weight=1;
          server 127.0.0.1:8081 weight=1;
          server 127.0.0.1:8082 weight=1;
          server 127.0.0.1:8083 weight=1;
  }

weight=1为权重平分,也就是负载流量平均分配几台设备,通俗一点就是4个客户机访问服务,然后客户机的访问流量会平均分配给四台服务器;如果是8个客户机访问服务器,那就是每台服务器会承载2个用户的访问。如果出现硬件资源有差别的情况,则可以修改权重,假设上面的8080端口服务器性能很强,是其他几台服务器的7倍,那上面的权重可以修改成下面的样子

  upstream stream_server {
          server 127.0.0.1:8080 weight=7;
          server 127.0.0.1:8081 weight=1;
          server 127.0.0.1:8082 weight=1;
          server 127.0.0.1:8083 weight=1;
  }

上面的为例,假设有10个并发请求,其中第一台服务器总共承载10个中间的7个,下面的三台分别承载1个请求。
标记upstream组里面的服务器的状态为down。

  upstream stream_server {
          server 127.0.0.1:8080 down;
          server 127.0.0.1:8081 weight=1;
          server 127.0.0.1:8082 weight=1;
          server 127.0.0.1:8083 weight=1;
  }

当第一台服务器被标记成down的时候,那这个服务器就默认不请求,只请求下面三台在线的设备。
配置备份服务器,假设有三台负载均衡服务器,upstream文件的内容

  upstream stream_server {
          server 127.0.0.1:8080 down;
          server 127.0.0.1:8081 backup;
          server 127.0.0.1:8082 weight=1;
  }

上述配置文件配置第一台服务器down状态,第二台服务器为备份服务器,第三台为正常负载服务器。

Nginx正确配置负载集群

  upstream stream_server {
          #实际使用业务的时候需要使用ip_hash保证一个连接数在关闭之前都连接一台服务器
          ip_hash;
          #节省时间,就配置两台服务器,并且不配置权重,配置权重的实验不太好演示,需要大量的连接数才可以测试出结果。
          #注意,upstream组里面的web服务器负载集群必须是能正常访问的(不能正常访问是不能成功重启Nginx服务的)
          server 127.0.0.1:8080;
          server 127.0.0.1:8081;
  }
  server {
          listen 80;
          server_name upstream.nginx.test;
          client_max_body_size 1024M;
          #反向代理upstream组
          location / {
                    proxy_pass http://stream_server;
                    proxy_set_header Host $host:$server_port;
                    
          }
  }

8080端口网页的HTML文件

<html>
<body><p>Server 1</p></body>
</html>

8081端口的网页的HTML文件

<html>
<body><p>Server 2</p></body>
</html>

然后就是贴出两个网站的Nginx配置文件

8080网站配置文件

  server {
          listen 8080;
          server_name 127.0.0.1;
          location /{
                root /www/web1/;
                index index.html index.htm;
          }
  }

8081网站配置文件

  server {
          listen 8081;
          server_name 127.0.0.1;
          location / {
                root /www/web2/;
                index index.html index.htm;
          }
  }

测试curl测试服务器请求,请求之后关闭对应的服务器后再次请求
Test
然后关闭Server 2,再次请求
Test
服务器已经切换到服务器1上

配置强制HTTPS
同前面的设置方法配置HTTPS,网站配置文件

  #upstream组配置文件
  upstream stream_server {
          #实际使用业务的时候需要使用ip_hash保证一个连接数在关闭之前都连接一台服务器
          ip_hash;
          #节省时间,就配置两台服务器,并且不配置权重,配置权重的实验不太好演示,需要大量的连接数才可以测试出结果。
          #注意,upstream组里面的web服务器负载集群必须是能正常访问的(不能正常访问是不能成功重启Nginx服务的)
          server 127.0.0.1:8080;
          server 127.0.0.1:8081;
  }
  #网站配置文件
  server {
        listen 80;
        listen 443 ssl;
        server_name upstream.nginx.test;
        #设置SSL证书和SSL密钥的位置(绝对路径)
         ssl_certificate /crt/upstream.nginx.test/upstream.nginx.test.crt;
         ssl_certificate_key /crt/upstream.nginx.test/upstream.nginx.test.key;
         #设置超时5分钟
         ssl_session_timeout 5m;
         #配置ssl_session缓存
         ssl_session_cache shared:SSL:5m;
         #配置SSL协议1.1 1.2 1.3
         ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
         #配置加密套件(这里给个通用写法,因为加密类型比较多)OpenSSL标准
         ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
         ssl_prefer_server_ciphers on;
         #设置强制HTTPS,注意Nginx下面的if语句的括号周围需要空格,不能顶格写
         if ($scheme = http) {
         return 301 https://$host$request_uri;
         }
         location / {
                 proxy_pass http://stream_server;
         }
  }

测试HTTP会不会强制301到HTTPS以及直接测试HTTPS
Test

 #使用curl命令的时候记得要加-k参数
 curl -k https://upstream.nginx.test
 #修改完参数记得要重启Nginx
 systemctl restart nginx
2

评论

博主关闭了所有页面的评论