目录
一、理论
1.LNMP平台
2.Nginx服务基础
3.Nginx访问控制
4.Nginx虚拟主机
二、实验
1.LNMP架构+DISCUZ论坛应用
三、问题
1.没有规则可以创建“default”需要的目标“build”。
四、总结
一、理论
1.LNMP平台
(1)概念
LNMP平台是高效稳定的Web应用平台,LNMP架构结合了Linux操作系统的稳定性、Nginx服务器的高性能、MySQL数据库的可靠性和PHP语言的灵活性,被广泛应用于Web开发和部署。
(2)原理图
(3)LNMP各组件主要作用
表1 LNMP各组件作用
组件 | 功能 | 作用 |
Linux | LNMP架构的基础平台 | 作为LNMP架构的基础,提供用于支撑Web站点的操作系统,能够与其他三个组件提供更好的稳定性,兼容性(AMP组件也支持Windows、UNIX等平台) 。 |
Nginx | LNMP架构的前台 | 作为LNMP架构的前端,是一个高性能、轻量级的HTTP和反向代理web服务器 ,稳定性高并且系统资源消耗低,对HTTP并发连接的处理能力高,单台物理服务器可支持30000-50000华人并发请求,同时也提供了IMAP/POP3/SMTP服务。 |
MySQL | LNMP架构的后台 | 作为LNMP架构N的后端,是一款流行的开源关系数据库系统。在企业网站、业务系统等应用中,各种账户信息、产品信息,客户资料、业务数据等都可以存储到MySQL数据库,其他程序可以通过SQL语句来查询,更改这些信息。 |
PHP/Perl/Python | LNMP架构的中间连接 | 作为三种开发动态网页的编程语言,负责解释动态网页文件,负责沟通Web服务器和数据库系统以协同工作,并提供Web应用程序的开发和运行环境。其中PHP是一种被广泛应用的开放源代码的多用途脚本语言,它可以嵌入到HTML中,尤其适合于Web应用开发。 |
(4)LNMP和LAMP的区别
表2 LNMP和LAMP的区别
功能 | LNMP | LAMP |
使用的网站服务不同 | Nginx | Apache |
PHP作用不同 | 在LAMP中PHP是当作Apache的一个模块来使用 | LNMP中PHP是当作一个独立进程来使用的(即PHP_FPM) |
(5)单服务器中Nginx与PHP的工作原理
① FastCGI将Http Server和动态脚本语言分离开来
② Ngnix专门处理静态请求,转发动态请求
③ PHP/PHP_FPM专门解析Nginx转发过来的动态请求
(6)Nginx特点
表3 Nginx特点
序号 | 特点 |
1 | 高扩展性 |
2 | 高可靠性 |
3 | 低内存消耗 |
4 | 高并发 |
5 | 热部署 |
6 | 开源协议 |
7 | 异步架构的web服务器,也可以用作反向代理、负载均衡器和HTTP缓存。 |
(7)构建LNMP平台顺序
在构建LNMP平台时,各组件的安装顺序依次为:
表4 LNMP组件安装顺序
安装顺序 | 安装内容 | 组件环境 |
1 | Linux系统 | |
2 | Nginx服务器 | 专门处理静态请求,转发动态请求给php-fpm处理 |
3 | MySQL数据库 | |
4 | PHP环境 | 专门解析Nginx转发过来的动态请求 |
(7)FPM
FPM(Fast Process Manager,FastCGI 进程管理器),用于替换 PHP FastCGI 的大部分附加功能,对于高负载网站是非常有用的。它的功能包括:
表5 FPM功能
序号 | 功能 |
1 | 支持平滑停止/启动的高级进程管理功能 |
2 | 可以工作于不同的 uid/gid/chroot 环境下,并监听不同的端口和使用不同的 php.ini 配置文件(可取代 safe_mode 的设置) |
3 | stdout 和 stderr 日志记录 |
4 | 在发生意外情况的时候能够重新启动并缓存被破坏的 opcode |
5 | 文件上传优化支持 |
6 | "慢日志" - 记录脚本(不仅记录文件名,还记录 PHP backtrace 信息,可以使用 ptrace或者类似工具读取和分析远程进程的运行数据)运行所导致的异常缓慢 |
7 | fastcgi_finish_request() - 特殊功能:用于在请求完成和刷新数据后,继续在后台执行耗时的工作(录入视频转换、统计处理等) |
8 | 动态/静态子进程产生 |
9 | 基本 SAPI 运行状态信息(类似Apache的 mod_status) |
10 | 基于 php.ini 的配置文件 |
2.Nginx服务基础
(1)Nginx概念
Nginx(engine x) 是一个高性能的HTTP和反向代理web服务器 ,同时也提供了IMAP/POP3/SMTP服务。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。
(2)Nginx下载
官网地址:
nginx news
(3)Nginx工作模式
Nginx有两种工作模式:master-worker模式和单进程模式。在master-worker模式下,有一个master进程和至少一个的worker进程,单进程模式顾名思义只有一个进程。这两种模式有各自的特点和适用场景。
master-worker模式:
单进程模式:
2种模式对比:
表6 Nginx工作模式
工作模式 | 功能 | 特点 |
master-worker模式 | master-worker模式下nginx启动成功后,会有一个master进程和至少一个的worker进程,worker进程数量建议等于cpu总核心数。master进程负责处理系统信号,加载配置,管理worker进程(启动,杀死,监控,发送消息/信号等)。worker进程负责处理具体的业务逻辑,也就是说,对外部来说,真正提供服务的是worker进程。生产环境下一般使用这种模式。 | 优点: 稳定性高,只要还有worker进程存活,就能够提供服务,并且一个worker进程挂掉master进程会立即启动一个新的worker进程,保证worker进程数量不变,降低服务中断的概率; 配合linux的cpu亲和性配置,可以充分利用多核cpu的优势,提升性能; 处理信号/配置重新加载/升级时可以做到尽可能少或者不中断服务。 |
单进程模式 | 单进程模式下,nginx启动后只有一个进程,nginx的所有工作都由这个进程负责。因此,该模式一般只在开发阶段和调试时使用,生产环境下不会使用。 | 优点: 单进程模式由于只有一个进程,因此可以很方便地利用gdb等工具进行调试。 缺点: 单进程模式不支持nginx的平滑升级功能,任何的信号处理都可能造成服务中断,并且由于是单进程,进程挂掉后,在没有外部监控的情况下,无法重启服务。 |
(4)Nginx配置文件
文件/目录 | 功能 |
/usr/local/nginx/conf/nginx.conf | 主配置文件 |
/usr/local/nginx/sbin/nginx | 命令文件 |
(5)Nginx与Apache的区别
表6 Nginx与Apache区别
服务 | Nginx | Apache |
对比 | 甚于事件的Web服务器 | 基于流程的服务器 |
避免子进程 | 基于子进程 | |
在内存消耗和连接方面更好 | 在内存消耗和连接方面一般 | |
性能和可伸缩性不依赖于硬件 | 依赖于CPU和内存等硬件 | |
支持热部署 | 不支持热部署 | |
对于静态文件处理具有更高效率 | 相对一般 | |
在反向代理场景具有明显优势 | 相对一般 | |
优点 | 轻量级,同样是 web 服务,比 Apache 占用更少的内存及资源 ; 高并发,Nginx 处理请求是异步非塞的,而 Apache 则是阻塞型的,在高并发下 Nginx 能保持低资源低消耗高性能; 高度模块化的设计,编写模块相对简单; 社区活跃,各种高性能模块出品迅速。 | rewrite,比 Nginx 的 rewrite 强大; 模块超多,基本想到的都可以找到; 少 bug ,Nginx 的 bug相对较多; 超稳定 |
总结 | 要性能的 web 服务,用 Nginx ; Nginx 处理动态请求是弱项; Nginx 只适合静态和反向。 | 如果不需要性能只求稳定,那就Apache; 一般动态请求Apache 去做。 |
(6)Nginx应用场景
表8 Nginx应用场景
序号 | 场景 |
1 | 静态服务器 (图片、视频服务、文本) |
2 | 动态服务 |
3 | 反向代理, 负载均衡 |
4 | 缓存服务 |
(7)同步与异步
同步指的是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。异步的概念和同步相对,当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。
(8)阻塞与非阻塞
阻塞和非阻塞是进程在访问数据的时候,数据是否准备就绪的一种处理方式。当数据没有准备的时候,阻塞需要等待调用结果返回之前,进程会被挂起,函数只有在得到结果之后才会返回。非阻塞和阻塞的概念相对,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。
(9)通信机制与调用状态
表9 通信机制与调用状态
对比 | 通信机制 | ||
同步 | 异步 | ||
调用状态 | 阻塞 | 同步阻塞 | 异步阻塞 |
非阻塞 | 同步非阻塞 | 异步阻塞 |
(10)kill命令信号
表10 信号编号
信号编号 | 信号名 | 含义 |
0 | EXIT | 程序退出时收到该信息。 |
1 | HUP | 挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化 |
2 | INT | 表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号 |
3 | QUIT | 退出 |
9 | KILL | 杀死进程,即强制结束进程 |
11 | SEGV | 段错误 |
15 | TERM | 正常结束进程,是 kill 命令的默认信号 |
3.Nginx访问控制
(1)基于授权的访问控制
生成用户密码认证文件
yum install -y httpd-tools
htpasswd -c /usr/local/nginx/passwd.db 用户
chown nginx /usr/local/nginx/passwd.db
chmod 400 /usr/local/nginx/passwd.db
修改主配置文件相对应目录,添加认证配置项
vim /usr/local/nginx/conf/nginx.conf
(2)基于客户端的访问控制
访问控制规则如下:
deny IP/IP 段:拒绝某个 IP 或 IP 段的客户端访问。
allow IP/IP 段:允许某个 IP 或 IP 段的客户端访问。
规则从上往下执行,如匹配则停止,不再往下匹配。
修改Nginx的配置文件
vim /usr/local/nginx/conf/nginx.conf
4.Nginx虚拟主机
(1)基于域名的虚拟主机
为虚拟主机提供域名解析
echo "192.168.204.200 域名1 域名2" >> /etc/hosts
为虚拟主机准备网页文档
修改Nginx的配置文件
vim /usr/local/nginx/conf/nginx.conf
重启服务,访问测试
(2)基于IP的虚拟主机
添加虚拟网卡
ifconfig ens33:0 192.168.204.200 netmask 255.255.255.0
vim /usr/local/nginx/conf/nginx.conf
(3)基于端口的虚拟主机
修改Nginx的配置文件
vim /usr/local/nginx/conf/nginx.conf
二、实验
1.LNMP架构+DISCUZ论坛应用
(1)Nginx安装
①流程
表11 Nginx安装流程
序号 | 操作 | 关键命令 | 文件 |
1 | 下载Nginx相关安装包➝ 服务器 | rz -E | nginx-1.12.2.tar |
2 | 登录到服务器安装Nginx相关依赖包和函数库 | yum -y install pcre-devel \ zlib-devel \ openssl \ openssl-devel \ gcc \ gcc-c++ \ make | gcc功能:预处理、编译、连接、汇编 openssl功能:用于网站加密通讯。 pcre功能:用于支持解析正则表达式。 zlib功能:用于对数据进行解压缩。网站之间通信时,数据先压缩再传输,通过消耗CPU的方式来节省网络带宽 |
3 | 创建程序用户管理➝ 解压NginxL安装进行安装 | useradd -M -s /sbin/nologin nginx cd /opt | |
4 | 编译安装➝切换到Nginx解包路径下➝ 安装路径以及模块 | cd nginx-1.12.0/ ./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-http_stub_status_module | |
5 | 编译安装 | make -j 16 && make install | |
6 | Nginx服务 可执行程序文件存入路径环境变量的目录中便于系统识别软链接 | ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ | |
7 | 检查语法 | nginx -t | |
8 | 启动服务 | nginx | |
9 | 查看版本 | nginx -V | |
10 | 检查Nginx监听端口 | netstat -antp | grep nginx lsof -i:80 |
新版本升级:
表12 Nginx升级流程
序号 | 操作 | 关键命令 | 文件 |
1 | 下载Nginx相关安装包➝ 服务器 | rz -E | nginx-1.22.0.tar |
2 | 解压NginxL安装进行安装 | cd nginx-1.22.0 | |
3 | 编译安装➝切换到Nginx解包路径下➝ 安装路径以及模块 | ./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-http_stub_status_module \ --with-http_ssl_module | |
4 | 编译 | make | |
5 | 备份➝ 覆盖 | mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old cp objs/nginx /usr/local/nginx/sbin/nginx | |
6 | 查看版本 | nginx -V |
关闭防火墙,将安装Nginx所需软件包传到/opt目录下
②下载Nginx相关安装包➝ 服务器
③创建程序用户管理➝解压Nginx安装进行安装
④创建运行用户、组
⑤编译安装➝切换到Nginx解包路径下➝安装路径以及模块
⑥编译安装Nginx 路径
⑦编译安装
⑧Nginx服务 可执行程序文件存入路径环境变量的目录中便于系统识别软链接
⑨检查语法
⑩查看版本
(2)Nginx升级
①下载Nginx相关安装包➝ 服务器
②解压Nginx安装进行安装
tar -zxvf nginx-1.22.0.tar.gz -C /opt/
③编译安装➝切换到Nginx解包路径下➝安装路径以及模块
完成
④编译
⑤备份
⑥备查看版本
⑦监听接口
三、问题
1.没有规则可以创建“default”需要的目标“build”。
原因分析:缺依赖安装包
解决方法:
安装Nginx所需的依赖安装包:
gcc功能:预处理、编译、连接、汇编
openssl功能:用于网站加密通讯。
pcre功能:用于支持解析正则表达式。
zlib功能:用于对数据进行解压缩。网站之间通信时,数据先压缩再传输,通过消耗CPU的方式来节省网络带宽
yum -y install pcre-devel zlib-devel openssl openssl-devel gcc gcc-c++ make
四、总结
Web服务器需要性能的用 Nginx ,不需要性能只求稳定用Apache。Nginx 处理动态请求是弱项,一般动态请求要 Apache 去做,Nginx 只适合静态和反向。