Web服务器群集:部署LNMP平台

news2024/11/27 21:56:06

目录

一、理论

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各组件作用

组件功能作用
LinuxLNMP架构的基础平台作为LNMP架构的基础,提供用于支撑Web站点的操作系统,能够与其他三个组件提供更好的稳定性,兼容性(AMP组件也支持Windows、UNIX等平台) 。
NginxLNMP架构的前台作为LNMP架构的前端,是一个高性能、轻量级的HTTP和反向代理web服务器  ,稳定性高并且系统资源消耗低,对HTTP并发连接的处理能力高,单台物理服务器可支持30000-50000华人并发请求,同时也提供了IMAP/POP3/SMTP服务。
MySQLLNMP架构的后台作为LNMP架构N的后端,是一款流行的开源关系数据库系统。在企业网站、业务系统等应用中,各种账户信息、产品信息,客户资料、业务数据等都可以存储到MySQL数据库,其他程序可以通过SQL语句来查询,更改这些信息。
PHP/Perl/PythonLNMP架构的中间连接作为三种开发动态网页的编程语言,负责解释动态网页文件,负责沟通Web服务器和数据库系统以协同工作,并提供Web应用程序的开发和运行环境。其中PHP是一种被广泛应用的开放源代码的多用途脚本语言,它可以嵌入到HTML中,尤其适合于Web应用开发。

(4)LNMP和LAMP的区别

表2 LNMP和LAMP的区别

功能LNMPLAMP
使用的网站服务不同NginxApache
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组件安装顺序

安装顺序安装内容组件环境
1Linux系统
2Nginx服务器专门处理静态请求,转发动态请求给php-fpm处理
3MySQL数据库
4PHP环境专门解析Nginx转发过来的动态请求

(7)FPM

FPM(Fast Process Manager,FastCGI 进程管理器),用于替换 PHP FastCGI 的大部分附加功能,对于高负载网站是非常有用的。它的功能包括:

表5 FPM功能

序号功能
1支持平滑停止/启动的高级进程管理功能
2可以工作于不同的 uid/gid/chroot 环境下,并监听不同的端口和使用不同的 php.ini 配置文件(可取代 safe_mode 的设置)
3stdout 和 stderr 日志记录
4在发生意外情况的时候能够重新启动并缓存被破坏的 opcode
5文件上传优化支持
6

"慢日志" - 记录脚本(不仅记录文件名,还记录 PHP backtrace 信息,可以使用 ptrace或者类似工具读取和分析远程进程的运行数据)运行所导致的异常缓慢

7fastcgi_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区别

服务NginxApache
对比甚于事件的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 信号编号

信号编号信号名含义
0EXIT程序退出时收到该信息。
1HUP挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化
2INT表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号
3QUIT退出
9KILL杀死进程,即强制结束进程
11SEGV段错误
15TERM正常结束进程,是 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
tar -zxvf nginx-1.12.2.tar.gz -C /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
6Nginx服务 可执行程序文件存入路径环境变量的目录中便于系统识别软链接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
tar -zxvf nginx-1.22.0.tar.gz -C /opt/

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 只适合静态和反向。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/664845.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LinkedList(1):链表介绍和单向链表的实现

1 链表介绍 链表的分类:单链表,双链表,循环链表 链表:由链将一个个元素连接,每一个元素我们通常将其称之为Node 节点Node 节点:由两部分组成 数据值的变量 Node next 用来存放下一个节点的Node 对象 pack…

redis zrange 与 zrangebyscore的区别

redis zrange 与 zrangebyscore的区别 目录 redis zrange 与 zrangebyscore的区别前言先说概念上的结论:实验数据准备对比案例一对比结论:对比案例二对比结论: 总结 前言 想做一个在redis中获取数据时分页的功能,从网上查找到了z…

【C/C++数据结构与算法】C语言预处理

目录 一、源文件到可执行程序的过程 二、预处理详解 1. 预定义符号 2. #define 3. 条件编译 一、源文件到可执行程序的过程 预处理:去注释,宏替换,头文件展开,条件编译编译:c语言 ---> 汇编语言(语…

软考高级系统架构设计师(二) 基础知识之计算机组成与系统结构

目录 概要 计算机组成结构 CPU组成 冯诺依曼结构 存储系统-层次化存储结构 高速缓冲存储器cache 主存编址计算 磁盘管理 磁盘管理算法 先来先服务(FCFS): 最短寻道时间优先(SSTF) 扫描算法(电梯调度…

【VisualStudio】使用 C++ 语言开发 Qt 环境配置教程

文章目录 1. 安装 Visual Studio2. 安装 Qt3. 联合Ref 先上一张效果图,具体步骤主要分为以下三步。 1. 安装 Visual Studio 这一步不再赘述,注意一定要安装 C 语言。 可以参考这个教程 Visual Studio 2022安装与使用教程。 2. 安装 Qt 这一步也不再赘…

DAY10_HTTPTomcatServlet

目录 1 Web概述1.1 Web和JavaWeb的概念1.2 JavaWeb技术栈1.2.1 B/S架构1.2.2 静态资源1.2.3 动态资源1.2.4 数据库1.2.5 HTTP协议1.2.6 Web服务器 2 HTTP2.1 简介2.2 请求数据格式2.2.1 格式介绍2.2.2 实例演示 2.3 响应数据格式2.3.1 格式介绍2.3.2 响应状态码2.3.2.1 状态码大…

vue+element-ui初体验入门拥有自己的前台项目以及配置文件讲解(2)组件式开发,路由,请求发送

阿丹: 前面的文章已经进行了vue的组件安装,本篇文章来了解一下vue的语句语法以及element-ui的具体用法。并使用全局的守卫路由来完成用户完成登录来请求头携带token 导入axios以及导入element-ui 按照图片指引来到main.js将我们前面文章下载的组件进行…

基于matlab将天线工具箱与相控阵系统配合使用(附源码)

一、前言 创建天线阵列(如均匀线性阵列 (ULA))时,可以使用相控阵系统工具箱中内置的天线。或者,您可以使用天线工具箱天线。天线工具箱天线提供物理天线的真实模型。它们是使用力矩的方法设计的。相控阵天线…

自动化测试工具 AirTest 的使用方法与简介

目录 前言: Airtest简介 1.基于图像识别的Airtest框架 2.基于UI识别的Poco框架 Airtest环境搭建 Airtest布局 Airtest使用步骤 第一步:连接移动设备 第二步:创建一个.air文件(也就是我们的测试脚本) 第三步&#xff1a…

相机去畸变

1. 背景 在做图像感知工作过程中会遇到需要处理相机畸变的情况,如SLAM、3D重建等,则需要了解一些常见相机模型的成像过程,以及依据成像过程实现去除相机成像的畸变。 注意:这篇文章并不涉及太多相机参数畸变原理,更多…

Vicuna模型权重合成及模型部署

第一式:Vicuna模型部署 1.环境搭建1.1 构建虚拟环境1.2 安装FastChat1.2.1 利用pip直接安装1.2.2 从github下载repository然后安装 2.Vicuna Weights合成2.1 下载vicuna delta weights2.2 下载原始llama weights2.3 合成真正的working weights2.3 填坑手册 3. 使用命…

第九章 os模块

1. os模块介绍 os 模块是Python 内置的与操作系统中的文件系统相关的模块,该模块依赖于操作系统。通常情况下,如不特别指出,该模块提供的方法、属性在Windows 和UNIX 系统上都是可用的。其中,UNIX 系统包括Linux 和Mac OS X 说明…

软件加密类型及原理特点总结

目录 一、软件加密目的 二、加密方式介绍 2.1 硬件加密 2.2 软件加密 三、软件加密方式 3.1非对称加密算法 3.2对称加密算法 四、数字签名 五、软件破解方式 参考文献 一、软件加密目的 防止软件被复制使用并恶意破坏,给企业和个人带来经济损失。 二、加密方…

杂记 | 使用Docker和Nginx为网站添加HTTPS访问功能

文章目录 01 准备工作1.1 HTTPS介绍1.2 准备工作 02 编写nginx.conf03 使用docker启动nginx 01 准备工作 1.1 HTTPS介绍 HTTPS(Hypertext Transfer Protocol Secure)是一种通过加密通信保护网站数据传输的协议。它是 HTTP 协议的安全版本,通…

ROS下写服务

话题和服务的对比: 1.话题 话题是单向的,而且不需要等待服务端上线,直接发就行,数据的实时性比较高。 频率高,实时性强的传感器数据的传递一般使用话题实现。 话题通信是ROS中使用频率最高的一种通信模式&#xff0c…

人工智能之后,量子计算将成为下一趋势

光子盒研究院 人工智能显然是席卷科技行业的最新热潮,但一个更大的趋势可能即将到来,那就是量子计算——只要它能解决令人不安的网络安全问题。 量子计算的进展似乎注定要使今天的基于电子芯片的超级计算机逊色。这些机器在亚原子水平上工作,…

excel爬虫相关学习1:简单的excel爬虫

目录 1 什么是excel 爬虫 2 EXCEL爬虫 2.1 excel 爬虫的入口 2.2 需要配置的信息 2.2.1 如何获得 ua信息 2.3 获取的信息 2.3.1 获取信息的基本内容 2.3.2 获取过程 2.3.3 我们只用关注“表视图 ” 即可 2.4 EXCEL获得的爬虫数据 加载到excel里 2.5 数据到了excel表后…

解决关于由于找不到vcruntime140_1.dll丢失的解决方法(有效的解决方法)

vcruntime140_1.dll是什么什么文件呢?为什么电脑在运行一些游戏的时候会出现丢失vcruntime140_1.dll,然后游戏运行失败?这个dll文件是电脑重要的运行库文件。丢失了会导致很多程序无法运行。 本教程操作系统:Windows vcruntime140_1.dll丢失…

AN10834-MIFARE ISOIEC 14443 PICC selection.pdf

AN10834-MIFARE ISOIEC 14443 PICC selection.pdf 1简介 在读卡器(系统)和智能卡之间交换数据之前,必须正确选择智能卡。该卡选择过程(卡激活)在用于非接触式接近系统的ISO14443-3中进行了描述。非接触式应用的急剧增…

k8s部署成功后却显示结点一直处于NotReady状态解决方案

直接说结论:原因是服务器的/opt/cni/bin/目录中没有flannel插件,安装flannel 到/opt/cni/bin/目录下即可。具体步骤往下看。 [rootK8SMaster ~]# journalctl -f -u kubelet.service 先看下报错,发现我一直显示NotReady的原因是由于 [faile…