Nginx及配合Tomcat的简单使用
Nginx及配合Tomcat的简单使用
Nginx(发音为 "engine-x")是一个高性能的HTTP和反向代理服务器,以其低内存占用和强大的并发处理能力而闻名。它不支持动态资源,但支持热部署,能够在不中断服务的情况下进行升级。Nginx常与Tomcat等应用服务器配合使用,实现动静分离、负载均衡等功能,以提高网站的性能和稳定性。
Nginx与Tomcat的区别
- Tomcat:同时支持动态和静态资源,是Servlet容器、Web容器、应用服务器。
- Nginx:是代理服务器,支持反向代理和正向代理。两者都是Web服务器和HTTP服务器(Web服务器一定是HTTP服务器)。
Nginx的主要功能
正向代理
简单理解就是梯子,中间。通常是为了获取正常网络访问不了的资源,需要在客户端进行手动配置。
客户端将请求发给代理服务器B,让其帮忙进行请求。客户端能感知到代理服务器的存在。
反向代理
客户端直接输入网址进行请求,反向代理服务器选择真实服务器获取数据后,将数据返回给客户端。
客户端感知不到代理服务器的存在,在其看来反向代理服务器就是真实服务器。隐藏真实服务器的IP地址、端口等信息。
负载均衡
将原先集中在单个服务器上的请求分发到多个服务器上,即负载分发到不同的服务器上,就是负载均衡。
动静分离
将动态页面和静态页面交给不同的服务器进行处理,加快解析速度,即动静分离。
高并发可用集群
将请求分发到多个服务器上,提高系统的可用性和稳定性。
Nginx的工作原理
结构
Nginx有两种进程,分别为master(一个)、worker(多个)。worker的数量和CPU数量相等最为合适。
工作方式
客户端发送的请求先到master进程中,master通知woker抢占该请求。获得请求的worker将请求分发到对应的服务器。
worker的连接数
- 当访问静态资源时,一个请求占用两个连接数
- 当访问动态资源时,一个请求占用四个连接数
- 静态资源可以部署在Nginx上,不需要再访问动态资源服务器;而动态资源一定要访问动态资源服务器
补充:最大并发数计算方法
worker支持最大连接数 乘以 woker数/4 —worker支持最大连接数*woker数/2
设计的好处
- 可以进行热部署
- 有工作的worker不动,其他worker进行更新
- worker独立进程
- 不用加锁
- 一个进程退出不影响其他进程,服务不会中断
- 当前worker异常,不影响其他worker,降低风险
Nginx的使用(配合Tomcat)
安装
Linux:apt-get install nginx
默认安装目录在 /etc/nginx,默认端口为80,可以在配置文件中修改
正常安装后在浏览器输入IP:80,出现页面(记得开放防火墙端口)
配置文件
位置:依据下面的信息可知配置文件放在/etc/nginx/nginx.conf
结构:
- 全局块:配置服务器的运行,可以设置worker的数量
- events块:配置服务器与用户的网络连接,可以设置每个worker的连接数
- event块的配置对性能的影响较大
- http块(最主要):
- http全局块:
- 文件引入
- MIME-TYPE定义
- 日志自定义
- 连接超时时间
- 单链请求上限
- http server块:
- 每个server块相当于一个虚拟主机,又可分为全局server块和location块
- 全局server:
- 监听配置
- 主机名字或者IP
- location:
- 地址定向
- 配置反向代理
配置文件中只需要修改server部分
配置多个服务器
配置新的Tomcat服务器:
- 调整新的Tomcat服务器端口,运行端口和关闭端口都需要和已经存在的不同
- 向webapps中添加新的app
比如新建名为tomcat2的app,向其中加入test.html
配置nginx服务器:
- 如果不需要开新的端口,只是需要添加新的路径,则直接用location定位到新加入的app即可。注意这里的名称和新加的app名称要一样
- 如果需要运行在新的端口,则和配置一个服务器一样,要先配置端口、服务名称,然后添加上述location
总结:配置不同的服务器就是添加不同的location,唯一需要注意的是添加的location位置需要和app的名字一样
关于location处符号的说明:
配置负载均衡:
在两台Tomcat服务器中添加同名app,例如test。可以编写不同的内容以作区分
在http块中添加
在server块中添加
在浏览器多次访问test,应出现不同的内容
分发策略:
- 轮询(默认):按照请求的时间顺序分配到不同的服务器。如果某一台服务器故障,会进行跳过
- weight:设置权重,权重越大的服务器被请求的概率越高
- ip_hash:每个ip地址依据hash结果,固定访问同一台服务器,除非高服务故障,否则不会访问新服务器。用来姐绝session问题。配置方式,在服务器前协写上ip_hash声明
- fair:按照服务器相应时间分配,响应时间短的先分配。在服务器后写上fair声明
总结:设置upstream,将具有相同服务的服务器写到一组中。设置location,将一组相同服务的服务器同时进行反代
反向代理和负载均衡的区别:
- 反向代理是一个server,多个location(不同服务器跑不同服务)
- 负载均衡是多个server,一个location(不同服务器跑相同服务)
配置动静分离:
- 在服务器准备静态文件
image放图片,www放页面文件 - 配置location
注意location的名字和文件夹名字应该一样
root后面的路径为文件夹的绝对路径
nginx配置文件中,root指令表示Nginx服务器在响应请求时,要将文件目录映射到浏览器的URI上。当URI以斜杠结尾时,nginx会把请求路径和root路径合并,若root路径本身已经有一个结尾斜杠,则不会再次添加。因此,在对应root路径的指令后需要注意斜杠的处理。如果root路径末尾有斜杠,请求路径也以斜杠结尾,nginx会自动进行合并。如果root路径末尾没有斜杠,请求路径以斜杠结尾,nginx会将root路径作为目录,请求路径作为文件,导致文件不存在。
当页面输入ip/image/1.jpg进行访问的时候。实际真实路径为:/home/linclo/data/image/1.jpg
- 配置完静态资源,剩下的就全是动态了,上面的反代和均衡其实就是动态处理的方式
配置高可用集群:
只有一台nginx不够保险,需要另外一个nginx服务器作为备用
准备工作:
- nginx主服务器
- nginx备份服务器
- 虚拟ip
- keepalived
- (暂时用不到)
命令:
Linux查看后台运行端口netstat -tunlp|grep nginx
Linux查看运行程序ps -ef|grep nginx
nginx常用命令:
- 查看版本:nginx -v
- 查看帮助:nginx -?或者nginx -h
- 启动服务:nginx
- 停止服务:nginx -s stop
- 重新加载配置文件:nginx -s reload
参考教程:01-nginx课程介绍_哔哩哔哩_bilibili
补充教程:1.nginx介绍_哔哩哔哩_bilibili
脑图:https://download.csdn.net/download/qq_43761203/89090945