宝塔Nginx负载均衡

宝塔Nginx负载均衡

注意点: 配置了负载均衡后,前端没有分配服务器,先检查后端服务器的端口是否被放行

在站点的配置文件中添加多个后端服务器

upstream myschool {
   server 124.223.67.254:9081 weight=2;  	# 124.226.67.254 后端服务器1,weight权重2
   server 124.70.221.226:9082 weight=3; 	# 124.226.67.254 后端服务器1,weight权重3
   server 127.0.0.1:9083 
}

server
{
    listen 8001;	## 项目端口号
    server_name 124.70.221.226;		## 项目域名
    index index.php index.html index.htm default.php default.htm default.html;	## 默认访问页面
    root /www/wwwroot/124.70.221.226;	## 项目目录
    
    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    #SSL-END
    
    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    #error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END
    
    #PHP-INFO-START  PHP引用配置,可以注释或修改
    include enable-php-74.conf;
    #PHP-INFO-END
    
    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    include /www/server/panel/vhost/rewrite/124.70.221.226.conf;
    #REWRITE-END
    
    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }
    
    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }
    
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
        error_log /dev/null;
        access_log /dev/null;
    }
    
    location ~ .*\.(js|css)?$
    {
        expires      12h;
        error_log /dev/null;
        access_log /dev/null; 
    }
    access_log  /www/wwwlogs/124.70.221.226.log;
    error_log  /www/wwwlogs/124.70.221.226.error.log;
    
    ## 项目文件访问地址
    location / {
      try_files $uri $uri/ /index.html;
    }
    
    // 前端访问环境
    location /prod-api/{
      proxy_pass http://myschool/;	## 负载均衡访问地址
    }
    

}

负载均衡分配策略

1. 普通轮询算法

这是Nginx 默认的轮询算法。

例子:两台相同的Tomcat服务器,通过 localhost:8080 访问Tomcat1,通过 localhost:8081访问Tomcat2,现在我们要输入 localhost 这个地址,可以在这两个Tomcat服务器之间进行交替访问。

一、分别修改两个Tomcat服务器的端口为8080和8081。然后再修改Tomcat的首页,使得访问这两个页面时能够区分。如下:

修改端口号文件为 server.xml :

img

修改首页的路径为:webapps/ROOT/index.jsp

img

修改完成之后,分别启动这两个Tomcat服务器,然后分别输入相应的地址端口号:

输入地址:localhost:8081

img

输入地址:localhost:8080

img

二、修改 nginx 的配置文件 nginx.conf

upstream OrdinaryPolling {
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
}
server {
    listen       80;
    server_name  localhost;

    location / {
        proxy_pass http://OrdinaryPolling;
        index  index.html index.htm index.jsp;
    }
}

三、启动 nginx。然后在浏览器输入localhost 地址,观看页面变化:

img

2. 基于比例加权轮询

nginx.conf 配置文件如下:

upstream OrdinaryPolling {
    server 127.0.0.1:8080 weight=5;
    server 127.0.0.1:8081 weight=2;
}

server {
    listen       80;
    server_name  localhost;

    location / {
        proxy_pass http://OrdinaryPolling;
        index  index.html index.htm index.jsp;
    }
}

其实对比上面不加权的轮询方式,这里在 upstream 指令中多了一个 weight 指令。该指令用于配置前面请求处理的权重,默认值为 1。

也就是说:第一种不加权的普通轮询,其实其加权值 weight 都为 1。

下面我们看页面相应结果:

img

明显 8080 端口号出现的次数更多,试验的次数越多越接近我们配置的比例。

3. 基于服务器响应时间负载分配

upstream myschool{
	server 127.0.0.1:8080 weight=5;
 	server 127.0.0.1:8081 weight=2;
 	fair;
}

根据服务器处理请求的时间来进行负载,处理请求越快,也就是响应时间越短的优先分配。通过增加了 fair 指令。

4. 对不同域名实现负载均衡

upstream wordbackend {
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
}

upstream pptbackend {
    server 127.0.0.1:8082;
    server 127.0.0.1:8083;
}

server {
    listen       80;
    server_name  localhost;

    location /word/ {
        proxy_pass http://wordbackend;
        index  index.html index.htm index.jsp;
    }
    
    location /ppt/ {
        proxy_pass http://pptbackend;
        index  index.html index.htm index.jsp;
    }
}

通过配合location 指令块我们还可以实现对不同域名实现负载均衡。

5. 基于IP路由负载

我们知道一个请求在经过一个服务器处理时,服务器会保存相关的会话信息,比如session,但是该请求如果第一个服务器没处理完,通过nginx轮询到第二个服务器上,那么这个服务器是没有会话信息的。

最典型的一个例子:用户第一次进入一个系统是需要进行登录身份验证的,首先将请求跳转到Tomcat1服务器进行处理,登录信息是保存在Tomcat1 上的,这时候需要进行别的操作,那么可能会将请求轮询到第二个Tomcat2上,那么由于Tomcat2 没有保存会话信息,会以为该用户没有登录,然后继续登录一次,如果有多个服务器,每次第一次访问都要进行登录,这显然是很影响用户体验的。

这里产生的一个问题也就是集群环境下的 session 共享,如何解决这个问题?

通常由两种方法:

1、第一种方法是选择一个中间件,将登录信息保存在一个中间件上,这个中间件可以为 Redis 这样的数据库。那么第一次登录,我们将session 信息保存在 Redis 中,跳转到第二个服务器时,我们可以先去Redis上查询是否有登录信息,如果有,就能直接进行登录之后的操作了,而不用进行重复登录。

2、第二种方法是根据客户端的IP地址划分,每次都将同一个 IP 地址发送的请求都分发到同一个 Tomcat 服务器,那么也不会存在 session 共享的问题。

而 nginx 的基于 IP 路由负载的机制就是上诉第二种形式。大概配置如下:

upstream OrdinaryPolling {
	ip_hash;
	server 127.0.0.1:8080 weight=5;
	server 127.0.0.1:8081 weight=2;
}
server {
    listen       80;
    server_name  localhost;

    location / {
        proxy_pass http://OrdinaryPolling;
        index  index.html index.htm index.jsp;
    }
}

注意:我们在 upstream 指令块中增加了 ip_hash 指令。该指令就是告诉 nginx 服务器,同一个 IP 地址客户端发送的请求都将分发到同一个 Tomcat 服务器进行处理。

  • 0
    点赞
  • 3
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页
评论

打赏作者

立勤.

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值