文章目录
1. 高并发场景下的问题
在开发好的项目真正上线后,一旦访问的并发量上升,由于大量的并发涌入,往往会造成服务器运行时的各种问题,包括服务器并发压力,数据库访问压力,数据库数据量限制等等.
2. 服务器并发压力
单台tomcat在理想情况下可支持的最大并发数量在200-500之间,如果大于这个数量可能会造成相应缓慢甚至宕机
解决方案是通过多台服务器分摊并发压力,这不仅仅需要有多台tomcat服务器,还需要有一台服务器专门用来分配压力,称之为反向代理服务器程序
.实现了负载均衡操作.
3. Nginx概述
Nginx
是一款优秀的反向代理服务器程序,能够为若干台服务器提供反向代理服务,一方面为客户端提供的统一的访问地址,另一方面为后台多个服务器提供了负载均衡的能力.
Nginx
是目前主流的反向代理服务器,能够提供可靠的负载均衡
,动静分离
的能力.
4. Nginx的安装配置
- 下载
下载Nginx - 安装
将下载好的安装包解压到一个没有中文没有空格的目录下即可. - 命令
说明 | 指令 |
---|---|
验证配置是否正确 | nginx -t |
查看Nginx的版本号 | nginx -V |
启动Nginx | start nginx |
快速停止或关闭 | nginx -s stop |
正常停止或关闭 | nginx -s quit |
配置文件修改重装载命令 | nginx -s reload |
nginx是否在运行查看任务管理器 里面有两个nginx.ext文件就说明运行成功了
4. 配置
nginx
的工作是基于[conf/nginx.conf]
配置文件来进行的.
nginx.conf的配置结构:
5. location路径配置和匹配规则
- location路径的写法
在配置虚拟服务器时,可以配置多个location
,指定不同路径采用不同的处理处理方案,location支持多种写法
,规定如下:
语法 | 例子 | 说明 |
---|---|---|
= | =/aaa/1.jpg | 路径严格匹配,路径必须一模一样才行 |
^~ | ^/aaa | 只要是指定路径开头的路径都可以匹配 |
~ | ~.png$ | 区分大小写按正则匹配路径 |
~* | ~*.png$ | 不区分大小写按正则匹配路径 |
/ | / | 通用匹配,所有路径都可以匹配到 |
2.location路径配置的优先级
由于location的路径配置非常灵活,所有有可能一个路径被多个location所匹配,此时按照如下规则判断匹配优先如下:
优先匹配 =
其次匹配 ^~
其次是按文件中顺序的正则匹配
最后是交给 / 通用匹配
当有匹配成功时候,停止匹配,按当前匹配规则处理请求
精度越高优先级越高
6. Nginx的负载均衡实现
负载均衡原理
7. 负载均衡策略
Nginx在分发资源到后端服务器时,如何分配请求是可以配置的.称之为nginx的负载均衡策略
- 轮询
默认不匹配就是轮询
,连接请求轮流分配给后端服务器
http{
upstream 名称{
server ip:port;
server ip:port;
}
server{
listen 80;
location / {
proxy_pass http://名称;
}
}
}
- ip哈希
ip_hash
,服务器数量,根据余数决定链接请求去往哪个服务器
http{
upstream 名称{
ip_hash;
server ip:port;
server ip:port;
}
server{
listen 80;
location / {
proxy_pass http://名称;
}
}
}
- 最少连接
least_conn
.将连接请求分配给目前连接数最少的服务器
http{
upstream 名称{
least_conn;
server ip:port;
server ip:port;
}
server{
listen 80;
location / {
proxy_pass http://名称;
}
}
}
- 基于权重
直接在地址后面配置weight=x
.根据权重进行分配,权重值越大,被分配的连接越多.可以直接配置为down
则不再分配连接.
http{
upstream 名称{
server ip:port weight=x;
server ip:port down;
}
server{
listen 80;
location / {
proxy_pass http://名称;
}
}
}
8. Nginx的动静分离实现
- 动静分离原理
动 --> 动态资源 --> servlet jsp --> 程序
静 --> 静态资源 --> jpg mp3 mp4 html css js --> 文件
Nginx本身无法处理动态资源,但是可以处理静态资源,而且性能优良.
因此可以将静态资源和动态资源拆分,将静态资源交由Nginx
处理,动态资源任然由tomcat处理,从而实现动静分离.提升了效率