准备工作
使用centos7系统并关闭SELinux和firewalld防火墙(老生常谈了)
配置华为镜像云网络源
更新内核版本(yum update)
安装编译工具和和依赖软件包
准备Nginx(1.8)、mysql(5.56)、php(7.4.33)三大源码包
源码软件包安装
nginx
1.使用tar -xvf直接解压即可
2.创建用于运行nginx的用户
3.预编译定义nginx选项
mysql
1.使用tar -xvf直接解压即可
2.创建mysql用户
3.预编译并且安装mysql
4.生成配置文件
5.初始化授权表
6.生成Mysql的启动和自启动管理脚本
7.给mysql的root用户设置密码
php
1.使用tar -xvf直接解压即可
2.预编译选项并且安装
3.生成php配置文件
4.创建软连接,使用php相关命令是更方便
使用nginx连接php
1.使用nginx连接php先启动php-fpm
2.修改Nginx的配置文件,使其识别.php后缀的文件
注意:有些网站项目开发时,目录和页面结构不相同,重新定义正则匹配
案例:location ~ .php(/.*)*$
该结构适用于typecho博客项目,可以匹配出"http://192.168.88.110/blog/index.php/archives/1/"
1.学nginx之前需要了解的知识
1.1 同步和异步(通知结果的方式)
同步与异步的区别在于消息通知的方法上,也就是调用结果的通知方式不同
1.2 阻塞和非阻塞(进线程等待时状态)
阻塞和非阻塞的区别在于(进程/线程)等待消息 时候的行为,也就是在等待消息的时候,当前(进程/线程)是挂起状态还是非挂起状态
同步异步和阻塞非阻塞的四种组合
- 同步阻塞 :客户端在向服务端发送调用消息,客户端需要等待服务端的返回消息结果。在这个返回的过程中,进线程会被挂起,只有返回消息返回到客户端,进线程才会被激活。(apache就是该模式)
- 同步非阻塞:客户端在向服务端发送调用消息,客户端需要等待服务端的返回消息结果。在这个返回的过程中,不会阻塞当前进线程,返回消息会立即返回客户端。
- 异步阻塞:客户端在向服务端发送调用消息,客户端不需要一直等待服务端的返回消息结果。在这个返回的过程中,进线程会被挂起,只有返回消息返回到客户端,进线程才会被激活。
- 异步非阻塞:客户端在向服务端发送调用消息,客户端不需要一直等待服务端的返回消息结果。在这个返回的过程中,不会阻塞当前进线程,返回消息会立即返回客户端。(nginx就是该模式)
1.3 epoll模型
当连接有I/O事件产生的时候,epoll就会去告诉进程哪个连接有I/O事件产生,然后进程就去处理这个事件。
1.4 nginx为什么比其他web服务器能处理高并发请求(工作原理)
1.5 分布式
同一项任务有多个不同的步骤协同完成的服务器构建方式
1.6 负载均衡
同一类有多个服务彼此分摊压力的服务器构建方式。结合调度器
1.7 HTTP协议
超文本传输协议
http1.1 数据传输的过程将所有的数据一起传输
http2 数据传输的时候将数据进行分流管理(分成图片文件、php文件、html文件等),提高处理数据效率
http3 支持udp传输
2. Nginx详解
2.1 概述
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协。议下发行。其特点是内存利用率高,并发能力强。
2.2 工作模式
nginx有两种工作模式:master-worker模式和单进程模式。
master-worker模式
nginx启动成功后,会有一个master进程和至少一个的worker进程。master进程负责处理系统信号,加载配置,管理worker进程(启动,杀死,监控,发送消息/信号等)。worker进程负责处理具体的业务逻辑,也就是说,对外部来说,真正提供服务的是worker进程。生产环境下一般使用这种模式。
使用master-worker模式的优点:
单进程模式(了解即可):
单进程模式下,nginx启动后只有一个进程,nginx的所有工作都由这个进程负责。由于只有一个进程,因此可以很方便地利用gdb等工具进行调试。该模式不支持nginx的平滑升级功能,任何的信号处理都可能造成服务中断,并且由于是单进程,进程挂掉后,在没有外部监控的情况下,无法重启服务。因此,该模式一般只在开发阶段和调试时使用,生产环境下不会使用。
2.3 配置文件结构
3.nginx实验
实验1:nginx的状态统计
1.预编译nginx的时候使用–with-http_stub_status_module,将该模块开启
2.修改nginx的主配置文件(写入要访问的server标签)
3.客户端访问网址IP/tongji
"Active connections"表示当前的活动连接数;
"server accepts handled requests"表示已经处理的连接信息三个数字依次表示已处理的连接数、成功的TCP握手次数、已处理的请求数
实验2:目录保护
继续上面的步骤继续实验
在线状态统计的location中添加
使用apache的命令htpsswd进行用户密码文件的创建
重启nginx
实验结果
实验3:基于IP访问控制
接着上面的实验完成操作
在线状态统计的localtion添加
重启nginx
实验4:nginx的虚拟主机(基于域名)
1.提前准备两个网站域名,并且规划了两个网站网页存放目录,并且设置好权限
www.first.com(/use/local/nginx/html/one) www.second.com(/use/local/nginx/html/two)
2.在nginx主配置文件中编写两个server标签,并且写好各自信息
3.重启nginx
4.分别访问两个不同的域名验证结果(需要把域名和ip地址加到本机hosts文件中)
实验5:nginx的反向代理
正向代理:是一个位于客户端和原始服务器之间的服务器,为了从原始服务器获得内容,客户端向代理发送一个请求并指定目录,然后代理向原始服务器转交请求并获得内容返回给客户端
反向代理:反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,及用户直接访问代理服务器就可以获得目标服务器之间的资源,反向代理服务器负责将请求转发给目标服务器。
用户不需要知道目标服务器的ip地址,也无需在用户端做任何决定
实验步骤:
1.在另一台机器安装apache,启动并编写页面
2.编写nginx的主配置文件在server标签内添加
3.重启nginx
启动之前原页面
启动之后现在页面
实验6:负载调度(负载均衡)
负载均衡:就是将任务分摊到多个操作单元上进行执行,例如web服务器、FTP服务器、企业关键应用服务器和其他关键任务服务器等,从而共同完成工作任务
实验步骤
1.使用默认的rr轮询算法,修改nginx配置文件
2.开启并设置两台主机(99.135和99.145)
3.重启nginx,使用客户端进行测试
扩展补充:wrr算法实现加强轮询
实验7:nginx实现https(证书+rewrite)
实验步骤:
1.预编译nginx,需要将–with-http_ssl_module 模块开启
2.在对应要进行加密的server标签中添加以下内容开启SSL
3.生成证书密钥文件
4.设置http自动跳转https功能
5.重启nginx,并测试