宝塔Nginx负载均衡

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

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

upstream myschool {server 124.223.67.254:9081 weight=2;     # 124.226.67.254 后端服务器1,weight权重2server 124.70.221.226:9082 weight=3;   # 124.226.67.254 后端服务器1,weight权重3server 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 :

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

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

输入地址:localhost:8081

输入地址:localhost:8080

二、修改 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 地址,观看页面变化:

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。

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

明显 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 服务器进行处理。

宝塔Nginx负载均衡相关推荐

  1. PHP+Nginx+宝塔+rsync代码同步 实现Nginx负载均衡

    PHP+Nginx+宝塔+rsync代码同步 实现Nginx负载均衡 作为一个PHP菜鸟,最近闲着没事,就想搭建一个Nginx试试,因为重来没有搭过,特此记录一下,也希望能为新入门的兄弟们提供一点帮助 ...

  2. 基于宝塔搭建nginx负载均衡服务器

    准备三台服务器,搭建好宝塔环境 服务器1:作为主服务器,分发服务器,并且数据库,redis等都装在此服务器 服务器2:均衡服务器1 服务器3:均衡服务器2 打开端口:如果使用阿里云,配置安全组,888 ...

  3. Nginx负载均衡的详细配置及使用案例

    Nginx负载均衡的详细配置及使用案例详解 感谢看过这一些列博文和评论的小伙伴, 我把自己所看到的学到的拿到这里来分享是想和大家一起学习进步, 想听听园友给出的意见, 也是对自己学习过程的一个总结.  ...

  4. Nginx负载均衡集群介绍

    第1章 集群介绍 1.1 集群简介 1.1.1 什么是集群 简单说,集群就是一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行 ...

  5. [ 总结 ] nginx 负载均衡 及 缓存

    操作系统:centos6.4 x64 前端使用nginx做反向代理,后端服务器为:apache + php + mysql 1. nginx负载均衡. nginx编译安装(编译安装前面的文章已经写过) ...

  6. docker初体验:docker部署nginx负载均衡集群

    Docker 是一个用于开发,交付和运行应用程序的开放平台.Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件.今天来为大家演示一下docker部署nginx负载均衡集群 环境 ce ...

  7. 【CentOS 7LNMP架构33】,nginx负载均衡#180109

    2019独角兽企业重金招聘Python工程师标准>>> hellopasswd nginx负载均衡 多台代理服务器 vi /usr/local/nginx/conf/vhost/lo ...

  8. Keepalived+LVS+Nginx负载均衡之高可用

    2019独角兽企业重金招聘Python工程师标准>>> 上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致 ...

  9. Nginx负载均衡+tomcat+session共享

    为什么80%的码农都做不了架构师?>>>    本文,是笔者工作之余写的,第一是把之前打系统框架的步骤记录下来.第二是将这个过程,谈不上经验,奉献给正在撘这种框架遇到各种bug,各种 ...

最新文章

  1. 开源软硬一体OpenCV AI Kit(OAK)
  2. HDU 6143 Killer Names (组合数学+DP)
  3. Redis 命令--Redis列表(List))
  4. 6款html5模板下载
  5. 在写新邮件时,在地址栏中敲入前几个字母,对于已熟悉的收件人,outlook会弹出列表...
  6. nodejs cluster_NodeJS下好用的Redis客户端ioredis,再推荐一个Redis可视化工具
  7. 不学网php,php不学框架可以吗
  8. Services in Kubernetes
  9. 计算机网络 第七版【谢希仁】部分答案(第1~7章)【附:电子书】
  10. ts重点学习71-implement语句
  11. ASO优化之新人必备的基础知识技能
  12. html做表格(个人简历)
  13. nslookup查询域名系统服务器,域名解析系统DNS诊断命令nslookup详解
  14. 前端制作PUBG瞄准镜!
  15. Mardown、LaTex编辑器推荐
  16. 图形的一点透视和平移
  17. python取整数部分的几种方法
  18. 18719 填涂颜色
  19. Preftest测试
  20. Java程序朗读文字的实现,jacob.jar

热门文章

  1. 充电该知道的部分知识
  2. RadarSLAM: 全天候大场景雷达slam
  3. 时间管理(1:时间都去哪了)
  4. 【转】W3C中国与百度联合组织移动网页加速技术研讨会
  5. Linux拨IPSec网络不通,ISAKMP/IPSEC SA协商成功但数据不通
  6. windows7系统升级到windows10教程
  7. vue2项目中按钮实现防抖、节流功能,包含封装代码以及使用
  8. 2023年湖北中级工程师职称申请全流程,你知道吗?启程别告诉你!
  9. 蓝桥杯2022年第十三届省赛真题-积木画
  10. react学习笔记3