@TOC
1/Nginx
基本概念
Nginx内置负载策略
- 轮循(默认):nginx根据请求次数,将每个请求均匀分配到每台服务器
- 最少连接:将请求分配给连接数最少的服务器,nginx会统计哪些服务器的连接数最少
- IP Hash:绑定处理请求的服务器,第一次请求时,根据该客户端的IP算出一个hash值,将请求分配到集群中的某台服务器上,后面该客户端的所有请求,都会根据hash算法找到之前处理这台客户端的服务器,然后将请求交给她来处理
windows安装
start nginx
nginx -s stop
nginx -s quit
nginx -s reload
nginx配置
打开nginx.conf文件
设置集群:会按照顺序访问集群
2/操作
写几个springboot项目,查看集群处理效果
创建springboot项目
此时可以换下工作空间
变颜色说明项目加载好
可以先删除test里自动生成的类
修改文件后缀
修改pom文件
创建子项目
同上创建类似3个子项目test1/test2/test3
并且每个项目都在Java下创建一个文件夹com,否则下面的资源文件夹不会变色,且自己去改变文件夹的类型会报错
然后把启动类复制到com下面
配置文件也可以复制进入
此时就可以删掉父项目,因为父项目是作为jar包的引用,删掉src
你会发现删掉父项目后就没有报错了
在pom文件中添加<packaging>pom</packaging>
表明父项目是以pom格式出现
但是你发现原本的pom文件已经有了,就不用自己写了
修改子项目的端口,其它几个子项目同下。端口号改为8180/8280/8380
为了方便启动的时候区分,可以修改项目启动类名
以上基本结果完成,可以启动三台不同端口的服务器
接下来完成control的编写
新建controller类
加上类注解@controller
由于主项目是不需要依赖的,所以可以删掉
在子项目的pom文件里都加上依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 引入一个springboot web依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
在子项目1的controller类里添加
package com.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class TestController {
@RequestMapping("1")
@ResponseBody
public String first(){
return"test1 first";
}
}
其余的子项目都添加上
package com.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class TestController {
@RequestMapping("1")
@ResponseBody
public String first(){
return"test2 first";
}
}
package com.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class TestController {
@RequestMapping("1")
@ResponseBody
public String first(){
return"test3 first";
}
}
通过返回的语句的不同判断是哪一个
启动几个服务器
依次启动3个
从浏览器单独去访问,然后使用负载均衡
http://localhost:8180/1
但是现在希望不用分别访问,只需要轮着来即可
前面我们在Nginx的配置文件配置了一个test的集群
在localhost上访问/one将统统访问到test的集群上(有时候为了避免冲突,不要取名test)
进入Nginx的命令(启动)
进入Nginx的文件夹,直接进入命令行
启动命令start nginx
然后访问localhost/one/1
,如果访问失败,可以访问localhost
查看报错信息
这表示已经启动了nginx,但是访问失败了
刷新就会按照顺序访问
如果不断有请求进来,它就会负载均衡
总结
所以集群的意思就是:在同一个路径,但是输出了不同的状态,主要还是需要通过不同的内容类区分,但是实际应用上能做的事情是一致的
测试:
可以用软件postman去访问路径
其它
如果项目太慢,就把setting改一下
3/关于端口转发的问题
在http"//user0后面加了斜杆,在转发完后就会去掉user0
不加,转发后还是user0/
所以如果加上斜杠