本博客整体内容包括
- nginx静态服务器
- 了解nginx
- nginx具体实现的功能
- nginx简单使用
- nginx的代理
- 正向代理
- 反向代理
- 反向代理简单案例
- 反向代理解决跨域问题
- nginx 动静分离的实现(提高访问速度)
- 了解什么是动静分离和优缺点
- 动静分离配置
- 动静分离案例
- nginx的负载均衡的实现(负责多台服务器提供服务)
- 了解什么是负载均衡
- 实现负载均衡案例
- nginx 限流的实现(提高访问速度)
- 限制某一 IP 每秒访问次数
- 限制某一 IP 瞬间并发量
- Jmeter的下载和简单使用
nginx静态服务器
1.了解nginx
Nginx (engine x) 是一款轻量开源级免费的软件、高性能的 HTTP 和反向代理服务器。其特点是占有内存少,并发能力强,事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好。
2.nginx具体实现的功能
反向代理
正向代理
负载均衡
HTTP 服务器(包含动静分离)
3.nginx简单使用
1.登录官网 nginx官网下载地址,下载 nginx 文件。我这里下载的是最新稳定版本nginx-1.16.1。
2.解压到指定目录文件并打开文件启动服务器
打开cmd窗口进入到指定文件夹中,输入start nginx启动服务器。看到下图就说明服务器已经启动成功。可以在浏览器中输入localhost:80进行访问
成功启动图片展示
浏览器访问成功图片展示
3.常用命令总结如下:
停止服务器:nginx.exe -s stop
重新启动:nginx.exe -s reload
启动不成功检查命令:nginx.exe -t
4、修改nginx服务器端口号
打开安装目录找到conf文件夹,在文件夹中找到nginx.conf并打开,再找到server进行配置
nginx的代理
1.正向代理
通俗地说正向代理就是客服端找到的服务器代理,对目标服务器进行访问。客服端明确要访问的服务器,服务器别不知道谁进行的访问(个人理解),下面通过一个案例具体说明一下正向代理
我们如果由于技术需要要去访问国外的某些网站,此时你会发现位于国外的某网站我们通过浏览器是没有办法访问的,此时大家可能都会用一个操作FQ进行访问,FQ的方式主要是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们!
1.反向代理
通俗地说就是服务器找到的代理服务器进行对外提供服务,在客服端进行访问时并不知道是那台服务器对客服端提供了服务。服务器却直到是那个用户进行了访问
例如:拨打 10086 客服电话,一个省的 10086 客服估计有成千上万个,实际上我们并不关心有多个客服,我们关心的是只要拨通了 10086 的号码能够有客服为我们提供服务就可以了。其实 10086 总机号码就是我们说的反向代
理。
反向代理简单案例
1、创建maven项目
如果有不了解maven的可以进我主页查看,这里不做过多介绍。
2、在pom.xml中添加依赖
<!-- Spring Boot 启动父依赖 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
</parent>
<!-- 设置编码 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- Spring Boot web依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 设置junit测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
2、创建前端控制器controller,对访问者提供服务。启动服务器
@Controller //定义这个类是前端控制器
public class Hello {
//访问路径
@RequestMapping("/hello")
//返回json格式数据
@ResponseBody
public String hello() {
System.out.println("我被访问了");
return "服务器二:helloWord!";
}
}
3、在打开nginx.conf配置文件找到server,在添加一个代理
location /ysd/ {
proxy_pass http://localhost:8080/; #被代理的服务器
}
4、重新启动nginx服务器(nginx.exe -s reload),在浏览器中输入nginx代理url即可
解释:我们把http://localhost:8080/地址交给了nginx服务器进行代理,所有在浏览其中直接输入localhost:8086/ysd/就想到与http://localhost:8080/。再加上hello就可以直接访问到项目啦
反向代理解决跨域问题
1、在上面的基础上使用Hbuilder创建一个web项目,在html中页面加载完发送一个post请求。jquery下载
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript" src="/js/jquery-3.4.1.min.js" ></script>
</head>
<body>
<input type="button" value="显示数据" onclick="shows()" />
<script type="text/javascript">
function shows(){
$.post("http://localhost:8086/ysd/hello",function(res){
alert(res);
},"text");
}
</script>
</body>
</html>
2、把这个项目也交给nginx服务器代理。
location /ysdq/ {
proxy_pass http://127.0.0.1:8020/JQuery/; #被前台代理的服务器
index index.html index.htm;
}
3、在访问localhost:8086/ysdq/demo.html就不会出现跨越问题了
nginx 动静分离的实现
1.了解什么是动静分离和优点
1、动静分离:将项目中的 css、js、html、jpg 等静态资源和 jsp、ftl 等动态资源分开处理的一种方式。
2、动静分离优点
a.不同的文件由不同的服务器来处理可以使系统架构更为清晰,维护更加方便;
b.提高服务器响应速度从而增强了用户体验。
2.动静分离配置
找到 nginx 安装目录中的 conf 目录,打开该目录下的 nginx.conf 文件进行编辑,新增如下配置:
#匹配后缀名如下的静态资源文件
location ~.(css|js|html|gif|jpg|jpeg|png|bmp|swf)$ {
root html; #资源文件存放的路径(nginx 安装目录中的 html 目录,可更改)
expires 30d; #缓存时间 30 天
}
3.动静分离案例
1、在解决跨越的案例中用到的jquery.js可以放到nginx文件中的html目录下创建js文件夹
2、在项目中直接引用即可
<script type="text/javascript" src="/js/jquery-3.4.1.min.js" ></script>
nginx的负载均衡的实现
1.了解什么是负载均衡
当一台服务器在单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。
2. 实现负载均衡案例
前提:由于我现在只有一台电脑,没法进行多台服务器进行模拟,我通过两个完全一样的项目进行模拟,只是端口号不同
1.准备一个和刚才一样的项目,在application.properties文件中修改端口号为8081
server.port=8081
2.负载均衡的配置,在nginx.conf文件中配置
http {
#配置上游集群服务器
upstream mytomcat123 {#集群的名称
server localhost:8001 max_fails=1 weight=1 fail_timeout=10s;
server localhost:8002 max_fails=1 weight=1 fail_timeout=10s;
#weight 权重,设置相同时则是轮询访问,也可以设置不同的权重,则按对应的比例进
行访问
#max_fails 最大请求失败次数,默认值为 1
fail_timeout 请求失败之后,等待多久后继续访问的时间,默认值为 10s
#server 10.0.0.11:7070 backup; backup 备用,其它所有服务器宕机时才启用
#ip_hash; IP 策略,每个请求按访问 ip 的 hash 结果分配,可以解决 session 共享的问题
#fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。
}
...
server {
listen 8086;
server_name localhost; #设置访问路径
#配置集群代理
location /ss/ {
proxy_pass http://mytomcat123; #集群的名称,和上面设置要保持一致
...
}
}
...
}
3、从新启动nginx,访问localhost:8086/ss/hello就会发现两台服务再进行轮询提供服务。
nginx 限流的实现(提高访问速度)
1、限制某一 IP 每秒访问次数
http {
# 限制时间段请求次数,开辟了一块 allips 内存来统计每秒 ip 访问次数
limit_req_zone $binary_remote_addr zone=allips:10m rate=1r/s;#1r/s 表示每秒访问 1
次
#限制每 ip 每秒不超过 20 个请求,漏桶数 burst 为 5
#brust 的意思就是,如果第 1 秒、2,3,4 秒请求为 19 个,
#第 5 秒的请求为 25 个是被允许的。
#但是如果你第 1 秒就 25 个请求,第 2 秒超过 20 的请求返回 503 错误。
#nodelay,如果不设置该选项,严格使用平均速率限制请求数,
#第 1 秒 25 个请求时,5 个请求放到第 2 秒执行,
#设置 nodelay,25 个请求将在第 1 秒执行。
location / {
limit_req zone=allips burst=5 nodelay;#每秒每 IP 限制访问 1 次,缓存值为 5
...
}
}
2、限制某一 IP 瞬间并发量
http {
# 限制并发量,开辟了一块 addr 内存来统计 IP 并发量
limit_conn_zone $binary_remote_addr zone=addr:10m;
location / {
limit_conn addr 1; #连接数限制
...
}
3.Jmeter的下载和简单使用
1.了解Jmeter
Apache Jmeter 是 Apache 组织开发的基于 Java 的压力测试工具。用于对软件做压力测试,它最初被设计用于Web 应用测试,但后来扩展到其他测试领域。它可以用于对静态的和动态的资源的性能进行测试。也可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你还可以使用它做性能的图形分析或在大并发下负载测试你的服务器/脚本/对象。(注:jmeter 下载网址)
2.使用 jmeter 进行服务监听
使用步骤参考如下:
- . 运行 Jmeter: ⚫ 安装 JDK 环境 ⚫ 打开文件夹运行 bin 目录下的 jmeter.bat 即可进入 jmeter 的主界面 ⚫ 启动不了主界面尝试直接启动 bin 目录下的 ApacheJMeter.jar 2). 创建一个线程组 点击测试计划,右键添加 Threads,选择线程组,如下图: 3). 设置线程组参数 在上面的基础上,进行如下配置,见上图。 ⚫ 配置线程数:用户数量 100 线程就模拟 100 个用户访问。 ⚫ 配置 Ramp-Up Period(in seconds):每个线程用户执行间隔,0 代表并发访问 ⚫ 设置循环次数:每个用户请求的次数,“永远”就是不停的请求 4). 创建 HTTP 请求右键线程组-Sampler-HTTP 请求 5). 配置 HTTP 请求配置服务器 IP,端口号,路径是端口号后面的,例如 /xxx.html。如下图所示
执行测试用例,看到结果是:每秒放行的请求次数不超过允许和缓冲次数之和。测试结果如下: