拉勾教育学习-笔记分享の"解密"Nginx

444 阅读6分钟

【文章内容输出来源:拉勾教育Java高薪训练营】
--- 所有脑图均本人制作,未经允许请勿滥用 ---

一、Nginx 基础回顾

定义

是一个 高性能、可反向代理的web服务器。

功能

  1. HTTP服务器
  2. 反向代理服务器
  3. 负载均衡服务器
  4. 动静分离

特点

  • 跨平台 (在大多数 类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 压缩包上传到你自己在对应服务器上

进入解压安装包后的目录,执行一系列命令

  1. tar -xvf nginx-1.18.0.tar.gz
  2. bash ./configure
  3. make
  4. make -install

都顺利执行后会在如下路径看到对应文件夹

进入 nginx/sbin/ 可以看到 nginx 脚本,启动它

在本地机器上访问 安装了 Nginx 的地址(端口默认80)

常用命令

1 关闭nginx

./nginx -s stop

2 重新加载nginx

改变了配置文件后,想要重新加载
./nginx -s reload

重新访问 (P.S. 读者需要自己配置防火墙允许通过 的端口)

二、Nginx 核心配置文件解读

Nginx 核心配置文件由三部分组成: 全局块、events块、http块

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 需求完成

  1. 首先在自己的服务器上解压tomcat工具包
  2. 然后复制两个副本:
  3. 分别修改他们的端口号
  • 8080
  • 8081
  • 8082
  1. 把他们都启动
  2. 修改 Nginx 的负载均衡配置
  3. reload Nginx
  4. 访问 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 进程

管理work进程
1 接收外界信号向各worker进程发送信号(./nginx -s reload)
2 监控worker进程的运⾏状态,当worker进程异常退出后Master进程会⾃动重新启动新的worker进程等

Worker 进程

具体处理网络请求
多个worker进程之间是对等的,他们同等竞争来⾃客户端的请求,各进程互相之间是独立的。

1 ⼀个请求,只可能在⼀个worker进程中处理
2 ⼀个worker进程,不可能处理其它进程的请求
3 worker进程的个数是可以设置的,⼀般设置与机器cpu核数⼀致

(图片来源:拉勾教育)

Nginx 多进程的好处

  • 每个worker进程都是独⽴的,不需要加锁,节省开销
  • 每个worker进程都是独⽴的,互不影响,⼀个异常结束,其他的照样能提供服务
  • 多进程模型为reload热部署机制提供了支持