Nginx(通俗易懂)

279 阅读10分钟

视频资源:Nginx教程

一、提前概念与知识

1、百度百科

  • Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,公开版本1.19.6发布于2020年12月15日。
  • 其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2022年01月25日,nginx 1.21.6发布。
  • Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。

2、重要概念

(1)反向代理

  • 正向代理 在这里插入图片描述
  • 反向代理(它的目的是隐藏ip,达到负载均衡:本质上,反向代理是通向服务器或服务器组的网关。反向代理为后端服务器提供匿名性,而不是客户端。它们掩盖了客户端正在访问的服务器的真实位置) 在这里插入图片描述 对外暴露9001,但是代理后的根本是访问的是8001 在这里插入图片描述

(2)负载均衡

  • 并发小的时候 在这里插入图片描述 在这里插入图片描述
  • 负载均衡 单个服务器解决不了,我们增加的服务器的数量,然后将请求分发到各个服务器上,将原先请求中到单个服务器上的机器的情况为将请求部分分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。 在这里插入图片描述 9001到8001或8002或8003轮巡算法进行轮巡,8001用过后,8002上,8002上了后8003上,8003上了8001上,给发送过来的请求进行处理。

(3)动静分离

  • 普通方式部署 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

3、Nginx在Linux安装

(1)安装教程

  • 首先用Xshell远程连接

  • 首先安装依赖 在这里插入图片描述

yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
  • 安装软件 安装压缩包:wget nginx.org/download/ng…

  • 解压压缩文件 在这里插入图片描述

  • 重名一下文件 在这里插入图片描述

  • 然后执行make && make install 【我的不行,可能是刚配置的虚拟机吧,然后找原因是没有( ./configure 所以没能生成makefile)】:文章地址 执行如下命令:./configure 相关文章

  • 启动服务器:在/usr/local/nginx/下会因为你安装如上命令后生成sbin目录,然后执行 ./nginx即可启动,但是我的报错如下 在这里插入图片描述 blog.csdn.net/weixin_,短短这么一点文章就报错这么多,好无奈啊,感觉还是得自己买一台服务器玩玩。

  • 然后修改端口号 在这里插入图片描述 在这里插入图片描述

  • 然后重启一下

  • 进行访问测试 在这里插入图片描述 不行

  • 经过查看发现 在这里插入图片描述

查看相关端口:firewall-cmd --list-all
放行某一个端口:sudo firewall-cmd --add-port=80/tcp --permanent
重启防火墙:firewall-cmd --reload

在这里插入图片描述

4、Nginx常用命令

  • 前提条件:使用Nginx命令必须进入sbin目录里面,执行相关命令。 在这里插入图片描述

(1)查看Nginx版本号

在这里插入图片描述

(2)关闭Nginx命令

在这里插入图片描述

(3)启动Nginx

在这里插入图片描述

(4)重加载

  • 我们的conf目录下nginx.conf的配置文件,当修改后,默认不会直接生效。 在这里插入图片描述
  • 使用命令重加载:./nginx -s reload 在这里插入图片描述

5、Nginx配置文件

Nginx配置文件在config下的nginx.conf 在这里插入图片描述 在这里插入图片描述 操作之前先拷贝

  • Vim打开文件 在这里插入图片描述 三部分组成:全局块,events块,http块。

(1)全局块

  • 配置整体运行的执行
  • 详细如下 在这里插入图片描述 在这里插入图片描述 worker_processes 1;它的值越大,nginx处理并发的量就越大。

(2)events块

  • 简单来说就是nginx服务器与客户网络连接部分 在这里插入图片描述
  • nginx最大连接数 在这里插入图片描述

(3)http块

在这里插入图片描述 这一块是配置最频繁的快。

  • Http全局块 在这里插入图片描述
  • server块 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

二、nginx配置实例

(一)反向代理实现

在这里插入图片描述

1、反向代理准备工作

(1)安装Tomcat

tomcat.apache.org/download-80… 在这里插入图片描述

  • 然后上传 在这里插入图片描述
  • 然后进行安装 进解压:tar -zxvf xxxxxx
  • 检查java条件 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述
  • 看看它的日志 在这里插入图片描述
  • 对外访问端口释放
    • firewall-cmd --add-port=8080/tcp --permanent
    • firewall-cmd --reload 在这里插入图片描述
  • 启动测试 在这里插入图片描述

(2)分析一下目的

在这里插入图片描述 在这里插入图片描述

  • 这里复习一下:浏览器访问一个域名的过程 在这里插入图片描述 当我们访问bilibili.com的时候,它会首先检查你本地的host文件进行查找,找不到就通过DNS服务器进行查找。

2、反向代理实现一

(1)配置www.nginxtest.com域名

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

(2)在nginx进行请求转发的配置(反向代理配置)

在这里插入图片描述

  • 改Linux的ip地址 在这里插入图片描述

  • 指向Tomcat服务器(它进行代理指向这个位置) 在这里插入图片描述

  • 重启nginx(这里出现了一点小插曲) 在这里插入图片描述 在这里插入图片描述

3、反向代理实现二

(1)目的分析

在这里插入图片描述 这个很重要,它后续会与nacos挂钩,联系上的。

(2)准备第二个Tomcat

  • 本次像这样模拟 在这里插入图片描述

  • 关闭之前的Tomcat 在这里插入图片描述

  • 解压8080 在这里插入图片描述

  • 加压8081 解压后进入conf目录 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

(3)启动测试

在这里插入图片描述 想访问8081死活不行,TMD傻逼了8082页不行,想着自己没有对8081放行。 在这里插入图片描述 在这里插入图片描述 还要重启一下防火墙 在这里插入图片描述 在这里插入图片描述

(4)准备好文件

  • 在我们的Tomcatwebapps配置两个文件 8001配置 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 然后上传到你刚刚创建的文件夹里面 在这里插入图片描述 8081也是同样的操作 在这里插入图片描述
  • 测试一下{发现乱码了,这个乱码文献先不处理} 在这里插入图片描述

(5)使用Nginx处理反向代理

  • 如果你要配置自己的,可以在这里增加一个server 在这里插入图片描述 在这里插入图片描述
  • 这里具体的匹配规则是使用了正则表达的规则。 在这里插入图片描述 添加9001 在这里插入图片描述

(6)启动测试

  • 重启一下nginx 在这里插入图片描述
  • 测试 在这里插入图片描述 在这里插入图片描述

(7)location配置规则

在这里插入图片描述

(二)Nginx实现负载均衡

1、负载均衡实现分析

在这里插入图片描述 在这里插入图片描述 为了测试,把刚才的8080的a.html改为b.html,目录改为vod 在这里插入图片描述 在这里插入图片描述 http://192.168.243.130:8080/vod/b.html测试一下,发现还是可以的

2、配置nginx

  • 总体要配置两块,http里面的配置路径,和server里面的映射规则。 在这里插入图片描述
  • 进入如下的配置 在这里插入图片描述
  • 然后重启一下nginx 启动发现报错 在这里插入图片描述 对上面这里进行修改 在这里插入图片描述 在这里插入图片描述 80端口又有人在使用,这里杀一下进程(我第一想法是这样,但是仔细一下它是80端口唉,不能动),所以改一下端口吧 在这里插入图片描述 在这里插入图片描述

3、启动测试

在这里插入图片描述 你刷新就会发现平均分发到8081或者8080

4、分配策略

在这里插入图片描述

  • 轮巡 在这里插入图片描述
  • 权重分配 在这里插入图片描述 在这里插入图片描述 越大越可能分配。
  • ip_hash(根据用户的ip进行hash分配:根据ip访问某一个服务器) 在这里插入图片描述 在这里插入图片描述
  • fail方式 根据服务器响应时间分配 在这里插入图片描述

(三)动静分离

1、动静分离准备工作

在这里插入图片描述 在这里插入图片描述

  • 先准备一些静态资源用于一会进行静态访问。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

2、实现动静分离

还是玩配置文件。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

  • 启动测试 在这里插入图片描述 没有找到 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述
  • 再次启动测试 在这里插入图片描述 在这里插入图片描述
  • 不要以为还要配置动态的,之前我们已经配置过了。

(四)高可用实现

1、高可用准备工作

(1)之前存在问题分析

之前的过程中 在这里插入图片描述 可能会产生问题:

  • Tomcat可能会宕机,
  • 而且你可能这个nginx也可能宕机,到时候你的服务器就完了

(2)如何配置高可用

在这里插入图片描述 在这里插入图片描述

  • keepalived起到一个路由的作用,如果自己宕机了,那就会从这个切换到备份服务器。
  • 他们需要通知共同的虚拟ip地址。

(3)具体准备工作

  • 需要两台服务器:除了上面使用的一台外,另外还需要配置一台,可以参考这篇文章 在这里插入图片描述 在这里插入图片描述

  • 两台都要安装nginx 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 由于我是从这一步克隆的,所以这里有很多过程都免了,你也可以直接克隆。

  • 两台服务器安装keepalived yum install keepalived -y 在这里插入图片描述 在这里插入图片描述 keepalived的配置文件在/etc/keepalived/的配置文件。

2、高可用主备配置

(1)keepalived配置

  • 全局配置 在这里插入图片描述
  • 检测的脚本放在这里{它去检测是否有问题} 在这里插入图片描述
  • ip的配置 在这里插入图片描述
  • 脚本的位置【在src下面,没有就自己新建】 在这里插入图片描述 在这里插入图片描述
# !/bin/bash
A=`ps -C nginx -no-header |wc -1`
if [$A -eq 0]; then
	/user/local/nginx/sbin/nginx
	sleep 2
	if[`ps -C nginx -no-header |wc -1` -eq 0];then
		killall keepalived
	fi
fi

(1.2)配置从服务器的信息

在这里插入图片描述

  • 第一个是主从,由于本台是从,所以是BACKUP
  • 第二个是配置显卡,是你自己电脑查看 在这里插入图片描述
  • 第三个是配置优先级

(1.2)主服务器配置

在这里插入图片描述 在这里插入图片描述

(1.3)共同虚拟ip配置

在这里插入图片描述 另外一台也是如此配置。 192.168.200.132

(1.4)脚本位置添加

在这里插入图片描述

(2)启动测试

(2.1)启动keepalived

  • 首先重启一下nginx
  • 然后重启keepalived systemctl start keepalived 在这里插入图片描述 同样的,另外一台也是。然后重启一下我们的

(2.2)测试

现在通过192.168.200.132即可测试了

3、高可用配置信息详细讲解

(1)详情配置

在这里插入图片描述 这个里面重要的就是router一行,即访问的主机,即本主机,你可以把你的主机名字写进行,也可以如下自己配置

  • 在这个位置进行配置 在这里插入图片描述 在这里插入图片描述

  • http端口检查(脚本的配置) 在这里插入图片描述

    • 那个interval就是检测的间隔,
    • 然后weight的权重。
    • script就是脚本的位置
  • 其他相关配置(虚拟ip的配置) 在这里插入图片描述

  • 脚本的配置就是如果主服务器挂掉了,就从服务器上。 在这里插入图片描述

三、Nginx的原理剖析

1、到底是如何执行的呢

在这里插入图片描述 master与worker理解:我们的nginx启动后,会有master与worker进程。 在这里插入图片描述 但是实际情况下只有一个master,可以有多个worker。

2、worker是如何进行工作的

在这里插入图片描述 我们的master下面有很多的工作者,master就相当于领导,有请求来了,下面的工作者就进行争抢。为什么又用到Tomcat呢,因为我们的nginx并不支持java,所以要通过Tomcat这样的进行代理。

3、master-worker的好处

  • 可以使用nginx -s reload进行热部署,因为实际情况下nginx并不能停。【利于nginx进行热部署】
  • 第二点好处【独立进行,如果有一个worker断了,其他的还在,不可能会中断】 在这里插入图片描述

4、设置多少个worker呢

Nginx同redis类似采用IO多路复用技术,每个worker都是独立进行,但每个进程只有一个主线程,通过异步非阻塞的,即使是千万个请求也不在话下,每个worker线程可以设置一个CPU的性能可以发挥到极致。

  • 设置CPU的个数一样的个数。

5、连接数

在这里插入图片描述

  • 发送一个请求到底连接了几个worker呢 答案是:2个或4个。因为你客户端会与worker连接,worker又与Tomcat实例连接上,所以两个或者2个。

  • nginx有一个master,有四个worker,每个worker支持的最大的连接数数据1024,支持的最大并发数是多少?

    • 最大并发数即最大的请求数量。
    • 最大连接数4*1024,然后除2或4即可。 在这里插入图片描述