1,首先聊聊什么Nginx?
Nginx 是一个高性能的HTTP和反向代理web服务器,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx部署在性能较好的服务器上,并发能力可以达到5W以上。
Nginx完全开源,并且有很多基于Nginx二次开发的工具,性能更强。
Nginx是一个反向代理的web服务器,就是作为客户端请求入口的存在
Nginx提供了非常丰富的负载均衡策略
Nginx提供了动静分离策略,可以将动态资源转发给Tomcat,静态资源直接去本地找
Nginx最大的特点就是并发能力强,占用内存低,并且可以实现7*24小时不间断运行
2,为什么要用Nginx,如果不用Nginx的现存问题是什么?
在上面介绍了Nginx的好处之后,相比对Nginx有一定的了解了,在企业中实际项目如果不适用Nginx会存在的问题大体如下:
在单体架构服务搭建集群后,客户端请求没有统一的入口
在单体架构服务搭建集群后,如果尽量打散客户端的请求
Tomcat中既部署静态资源,又部署动态资源,导致Tomcat压力太大
Tomcat作为处理业务的服务器,并发能力比较差
3,了解了Nginx之后,接下来就是实际搭建Nginx并且演示Nginx的反向代理和负载均衡两大功能。
这里采用Docker搭建Nginx,用docker-compose.yml文件进行管理
docker-compose.yml 简单配置一下
注意,添加数据卷,映射容器内部的/etc/nginx/conf.d
目录,方便修改路由规则配置 。
version: '3.1'
services:
nginx:
image: nginx:1.22
container_name: nginx
ports:
- 80:80
volumes:
- ./conf.d/:/etc/nginx/conf.d/
4,了解一下Nginx的配置文件:
5,接下来需要在映射的文件中conf.d创建一个后缀名为 .conf的文本,主要是在这个文本中配置代理和集群,注意在文本中要搭建集群就得在upstream中配置
upstream minios{
server 120.76.159.196:8081;
server 120.76.159.196:8082;
}
server{
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html/;
index index.html;
}
location /read {
proxy_pass http://minios;
proxy_redirect default;
}
location /up {
proxy_pass http://120.76.159.196/8083;
}
}
6,了解一下:Nginx中的路径匹配规则
7,配置完文本之后,启动容器,接下来就直接演示集群环境下,这里启动了2个Springboot的(端口号不同)项目,
相端口号为8081,8082。
如图所示:
1,SpringBoot项目注意打成jar包,并且需要在maven里配置如下所示
<build> <finalName>serve2</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <executable>true</executable> </configuration> </plugin> </plugins> </build>2,在linux上项目后台运行,执行日志存储在一个文本中,指令如下:
nohup java -jar serve2.jar >output2.log 2>&1 &
3,启动过程中遇到端口号占用情况,则需要关闭端口,指令如下:
netstat -ntlp | grep 8082 (找到端口对应的进程)
1078 kill -9 366721 (杀掉进程)
测试: http://120.76.159.196/read (这里不用写端口号) 不停的请求这个地址,集群默认采用轮询策略,效果如下:可以看到是一个轮询访问的状态
第一次请求
第二次请求
8,Nginx的集权下的访问策略很多,默认是采用轮询策略,基本上实际工作当中也是采用默认的轮询策略,接下来了解一下Nginx的轮询策略
1,轮询策略:默认情况下,Nginx的负载均衡策略就是轮询,不需要添加额外的配置。
轮询权重:在服务器配置不一致时,应当选择轮询权重策略,根据服务器配置的不同,或者应用的处理能力不同,设置不同的权重值,设置请求分发的比例。
upstream tomcats {
server 192.168.41.41:8081 weight=200;
server 192.168.41.41:8082 weight=50;
}
2,ip_hash
:根据客户端请求的ip地址,确定请求转发到哪台服务器,只要ip不变,路由的服务器就不变。但是很多JVM缓存同步的问题,依然无法处理
upstream tomcats {
ip_hash;
server 192.168.41.41:8081;
server 192.168.41.41:8082;
}
3,fair
:根据响应时间权重,根据服务器的响应时间决定请求转发的策略
upstream tomcats {
fair;
server 192.168.41.41:8081;
server 192.168.41.41:8082;
}
4,url_hash
:根据请求路径转请求转发
upstream tomcats {
hash $request_uri; hash_method crc32;
server 192.168.41.41:8081;
server 192.168.41.41:8082;
}
好啦,Nginx的基本了解和应用就到此结束了...