【文章内容输出来源:拉勾教育Java高薪训练营】
--- 所有脑图均本人制作,未经允许请勿滥用 ---
一、Nginx 基础回顾
定义
是一个 高性能、可反向代理的web服务器。
功能
- HTTP服务器
- 反向代理服务器
- 负载均衡服务器
- 动静分离
特点
- 跨平台 (在大多数 类Unix系统上 运行)
- 上手容易 + 配置简单
- 稳定性高,低几率宕机
- 高性能,能经受高负载的考研 (支持50000+并发连接数)
- 内存和CPU占用极低
正向代理
对于访问不到的网站,可以通过 代理服务器 去访问
反向代理
浏览器客户端 ==发送请求到==> 反向代理服务器(比如Nginx)
- 浏览器不需要做任何配置
- 对于客户端浏览器来说,提供服务的原始服务是不可见的
- Nginx+Tomcat 算是一个整体 (服务器端)
负载均衡服务器
反向代理时,如果目标服务器有多台 --> 寻找哪一台作为合适的机器 的过程 --> 就称为 负载均衡
核心就是解决——高负载的问题
动静分离
对于目标服务器上的 动态资源/静态资源 处理手段, 进行分离
例如:像Tomcat不擅长处理静态资源,就可以将 静态资源的处理过程 交给Nginx等服务器
Nginx 安装
建议使用类Unix环境安装Nginx。
例如博主在此使用的就是 UCloud 上购入的 云服务器
对于学习环境足够了。
使用 yum 安装依赖
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
将下载好的 Nginx 压缩包上传到你自己在对应服务器上
进入解压安装包后的目录,执行一系列命令
tar -xvf nginx-1.18.0.tar.gzbash ./configuremakemake -install
都顺利执行后会在如下路径看到对应文件夹
进入 nginx/sbin/ 可以看到 nginx 脚本,启动它
在本地机器上访问 安装了 Nginx 的地址(端口默认80)
常用命令
1 关闭nginx
./nginx -s stop
2 重新加载nginx
改变了配置文件后,想要重新加载
./nginx -s reload
重新访问 (P.S. 读者需要自己配置防火墙允许通过 的端口)
二、Nginx 核心配置文件解读
Part 1 全局 块
从配置⽂件开始到events块之间的内容,此处的配置影响nginx服务器整体的运⾏
比如worker进程的数量、错误日志的位置等
Part 2 events 块
events块主要影响nginx服务器与⽤户的⽹络连接
比如worker_connections 1024,标识每个
workderprocess⽀持的最⼤连接数为1024
Part 3 http 块
http块是配置最频繁的部分,虚拟主机的配置,监听端⼝的配置,请求转发、反向代理、负载均衡等
三、Nginx 反向代理
Part 1 需求描述
(图片来源:拉勾教育)
Part 2 需求一完成
然后执行 ./nginx -s reload 重新加载nginx
Part 3 需求二完成
- location 语法:
location [=|~|~*|^~] /uri/ { … }
然后执行 ./nginx -s reload 重新加载nginx
这⾥主要就是多location的使⽤
这⾥的nginx中server/location就好⽐tomcat中的Host/Context
四、Nginx 负载均衡
Part 1 需求描述
对同一个外部服务器反复请求会让它的压力过大,这个时候可以使用 Nginx 作为 负载均衡器 将压力分摊到不同目标上。
(图片来源:拉勾教育)
Part 2 需求完成
- 首先在自己的服务器上解压tomcat工具包
- 然后复制两个副本:
- 分别修改他们的端口号
- 8080
- 8081
- 8082
- 把他们都启动
- 修改 Nginx 的负载均衡配置
- reload Nginx
- 访问 Nginx 上的 /abc 服务
Part 3 Nginx 的负载策略
- 轮询策略(默认)
upstream lagouServer{
server 111.229.248.243:8080;
server 111.229.248.243:8082;
}
location /abc {
proxy_pass http://lagouServer/;
}
- 权重weight策略
weight代表权重,默认每⼀个负载的服务器都为1,权重越⾼那么被分配的请求越多(⽤于服务器性能不均衡的场景)
upstream lagouServer{
server 111.229.248.243:8080 weight=1;
server 111.229.248.243:8082 weight=2;
}
- ip_hash
按照ip的hash结果分配,每⼀个客户端的请求会固定分配到同⼀个⽬标服务器处理,可以解决session问题
upstream lagouServer{
ip_hash;
server 111.229.248.243:8080;
server 111.229.248.243:8082;
}
五、Nginx 动静分离
动态资源和静态资源的请求处理分配到不同的服务器上
比较经典的组合就是Nginx+Tomcat架构(Nginx处理静态资源请求,Tomcat处理动态资源请求)
那么其实之前的讲解中,Nginx反向代理⽬标服务器Tomcat,我们能看到⽬标服务器ROOT项⽬的index.jsp,这本身就是Tomcat在处理动态资源请求了。
----> 所以,我们只要配置静态访问 即可
Part 1 需求描述
(图片来源:拉勾教育)
Part 2 需求完成
修改 nginx.conf 文件
reload Nginx服务后 访问配置的静态URL
六、Nginx 底层机制剖析
Nginx启动后,以daemon多进程⽅式在后台运⾏【包括⼀个Master进程和多个Worker进程】
Master 进程
1 接收外界信号向各worker进程发送信号(./nginx -s reload)
2 监控worker进程的运⾏状态,当worker进程异常退出后Master进程会⾃动重新启动新的worker进程等
Worker 进程
多个worker进程之间是对等的,他们同等竞争来⾃客户端的请求,各进程互相之间是独立的。
1 ⼀个请求,只可能在⼀个worker进程中处理
2 ⼀个worker进程,不可能处理其它进程的请求
3 worker进程的个数是可以设置的,⼀般设置与机器cpu核数⼀致
(图片来源:拉勾教育)
Nginx 多进程的好处
- 每个worker进程都是独⽴的,不需要加锁,节省开销
- 每个worker进程都是独⽴的,互不影响,⼀个异常结束,其他的照样能提供服务
- 多进程模型为reload热部署机制提供了支持