目录
一、理论
1.LNMP平台
2.Nginx服务基础
3.Nginx访问控制
4.Nginx虚拟主机
5.PHP
二、实验
1.LNMP架构+DISCUZ论坛应用
三、问题
1.没有规则可以创建“default”需要的目标“build”。
2.nginx重启报错
3.yum安装提示报错
4.配置文件报错
5.PHP页面无法打开
四、总结
一、理论
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配置文件
表7 Nginx配置文件
文件/目录 | 功能 |
/usr/local/nginx/conf/nginx.conf | 主配置文件 |
/usr/local/nginx/sbin/nginx | 命令文件 |
(5)Nginx主配置文件
①查看配置文件
[root@localhost /]# find / -name nginx.conf -type f
/etc/nginx/nginx.conf
/usr/local/nginx/conf/nginx.conf
/opt/nginx-1.12.2/conf/nginx.conf
/opt/nginx-1.22.0/conf/nginx.conf
②文件结构
nginx.conf一共由3部分组成:全局块、events块、http块。
全局块:
全局块是默认配置文件从开始到events块之间的内容。
主要设置nginx整体运行的配置指令,这些指令的作用域是全局。
全局块的常见配置指令:
$ vim nginx.conf
user nginx nginx ; # Nginx用户及组:用户 组
worker_processes 8; # 工作进程数量(根据硬件调整,通常等于CPU数量或者2倍于CPU)
error_log logs/error.log; # 错误日志存放位置
error_log logs/error.log notice;
error_log logs/error.log info;
pid logs/nginx.pid; # nginx进程PID文件存放路径;
###全局块结束
ewents块:
ewents块的指令主要影响nginx服务器和用户的网络连接,对性能影响较大。
表8 ewents块配置
序号 | 配置项 |
1 | 是否开启对多worker process(工作进程)下的网络连接进行序列化; |
2 | 是否允许同时接收多个网络连接; |
3 | 选取哪种事件驱动模型处理连接请求; |
4 | 每个work process可以同时支持的最大连接数等; |
events { # events块开始
worker_connections 1024; #每个工作进程的最大连接数量(根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行。)
use epoll; # 使用epoll的I/O 模型。linux建议epoll,FreeBSD建议采用kqueue,window下不指定。
accept_mutex on; #开启网络连接的序列化(防止多个进程对连接的争抢)
multi_accept on; #允许同时接收多个网络连接(默认关闭),工作进程都有能力同时接收多个新到达的网络连接
} # events块结束
http块:
http块是nginx服务配置中的重要部分,代理、缓存、日志定义等很多的功能指令都可以放在http块中。
表9 http块配置
序号 | 配置项 |
1 | 文件引入; |
2 | MiME-Type定义; |
3 | 自定义日志; |
4 | 是否使用sendfile传输文件; |
5 | 连接超时时间; |
6 | 单请求上限等; |
http { # http块开始
include mime.types; #定义MIME-Type(网络资源的媒体类型),nginx作为web服务器必须能够识别前端请求的资源类型。引用外部文件mime.types。
default_type application/octet-stream; #配置用于处理前端请求的MIME类型(默认为text/plain)
access_log logs/access.log main; #配置服务日志的存放路径、日志格式、临时存放日志的内存缓存区大小;
log_format main xxx; #专门定义服务日志的格式;
sendfile on; #允许sendfile方式传输文件,
sendfile_max_chunk xxx; #每个工作进程调用sendfile()传输的数据量最大值(0为不限制)
keepalive_timeout 65; # 连接超时时间,与用户建立连接会话后nginx服务器保持会话的时间;
gzip on; # 开启Gzip功能,对响应数据进行在线实时压缩;
...
} # http块结束
server块:
http块可以有多个server块,每个server块都相当于一台虚拟主机,server块下又分为server全局块和location块。
server全局块:常见的配置指令是本虚拟主机的监听配置和本虚拟主机的名称或者IP配置。
location块:
表10 location块配置
序号 | 配置项 |
1 | 每个server块可以包含多个location块。 |
2 | location块的主要作用是基于nginx服务器收到的请求字符串(如server_name/uri-string),对除虚拟主机名称外的字符串进行匹配,对特定的请求进行处理。 |
3 | location块提供的功能包含地址定向、数据缓存、应答控制、第三方模块等。 |
server { # server块开始
keepalive_requests 100; # 单连接请求上限,限制用户通过某一连接想服务端发送请求的次数
listen 80; # 设置网络监听(分3种监听方式:IP地址、端口、Socket)
server_name localhost; #虚拟主机配置(基于主机名、基于IP、基于域名)
location / {
root html; #配置请求的根目录
index index.html index.htm; #设置网站的默认首页
}
error_page 500 502 503 504 /50x.html; # 设置网站的错误页面
location = /50x.html {
root html;
} # server块结束
(6)Nginx与Apache的区别
表11 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应用场景
表12 Nginx应用场景
序号 | 场景 |
1 | 静态服务器 (图片、视频服务、文本) |
2 | 动态服务 |
3 | 反向代理, 负载均衡 |
4 | 缓存服务 |
(7)同步与异步
同步指的是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。异步的概念和同步相对,当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。
(8)阻塞与非阻塞
阻塞和非阻塞是进程在访问数据的时候,数据是否准备就绪的一种处理方式。当数据没有准备的时候,阻塞需要等待调用结果返回之前,进程会被挂起,函数只有在得到结果之后才会返回。非阻塞和阻塞的概念相对,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。
(9)通信机制与调用状态
表13 通信机制与调用状态
对比 | 通信机制 | ||
同步 | 异步 | ||
调用状态 | 阻塞 | 同步阻塞 | 异步阻塞 |
非阻塞 | 同步非阻塞 | 异步阻塞 |
(10)kill命令信号
表14 信号编号
信号编号 | 信号名 | 含义 |
0 | EXIT | 程序退出时收到该信息。 |
1 | HUP | 挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化 |
2 | INT | 表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号 |
3 | QUIT | 退出 |
9 | KILL | 杀死进程,即强制结束进程 |
11 | SEGV | 段错误 |
15 | TERM | 正常结束进程,是 kill 命令的默认信号 |
3.Nginx访问控制
(1)访问状态统计配置
流程:
表15 Nginx访问状态统计
序号 | 操作 | 关键命令 | 文件 |
1 | 查看已安装的 Nginx 是否包含 HTTP_STUB_STATUS 模块 | /usr/local/nginx/sbin/nginx -V | |
2 | 修改 nginx.conf 配置文件,指定访问位置并添加 stub_status 配置 | cd /usr/local/nginx/conf cp nginx.conf nginx.conf.bak vim /usr/local/nginx/conf/nginx.conf ...... http { ...... server { listen 80; server_name www.kgc.com; charset utf-8; location / { root html; index index.html index.php; } ##添加 stub_status 配置## location /status { #访问位置为/status stub_status on; #打开状态统计功能 access_log off; #关闭此位置的日志记录 } } } | |
3 | 重启服务 | systemctl restart nginx | |
4 | 访问测试 | http://192.168.204.200/status |
①先使用命令/usr/local/nginx/sbin/nginx -V 查看已安装的 Nginx 是否包含 HTTP_STUB_STATUS 模块:
②修改 nginx.conf 配置文件,指定访问位置并添加 stub_status 配置:
编辑文件:
修改配置
③ 浏览器访问 http://192.168.204.200/status Active connections :表示当前的活动连接数; server accepts handled requests :表示已经处理的连接信息,三个数字依次表示已处理的连接数、成功的TCP握手次数、 已处理的请求数。
刷新页面观察变化
(2)基于授权的访问控制
流程:
表16 Nginx基于授权的访问控制
序号 | 操作 | 关键命令 | 文件 |
1 | 生成用户密码认证文件 | yum install -y httpd-tools htpasswd -c /usr/local/nginx/passwd.db zhangsan chown nginx /usr/local/nginx/passwd.db chmod 400 /usr/local/nginx/passwd.db | |
2 | 修改主配置文件相对应目录,添加认证配置项 | vim /usr/local/nginx/conf/nginx.conf ...... server { location / { ...... ##添加认证配置## auth_basic "secret"; auth_basic_user_file /usr/local/nginx/passwd.db; } } | |
3 | 语法验证 | nginx -t | |
4 | 重启服务 | systemctl restart nginx | |
5 | 浏览器访问 | http://192.168.204.200 |
生成用户密码认证文件
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
① 安装软件
② 生成用户密码认证文件
③ 修改主配置文件相对应目录,添加认证配置项
④验证
⑤ 重启服务
⑥ 访问测试
登录
(3)基于客户端的访问控制
流程:
表17 Nginx基于客户端的访问控制
序号 | 操作 | 关键命令 | 文件 |
1 | 修改主配置文件相对应目录,添加访问控制规则 | vim /usr/local/nginx/conf/nginx.conf systemctl restart nginx | 访问控制规则如下: deny IP/IP 段:拒绝某个 IP 或 IP 段的客户端访问。 |
修改Nginx的配置文件
vim /usr/local/nginx/conf/nginx.conf
主机192.168.204.150访问192.168.204.200
4.Nginx虚拟主机
(1)基于域名的虚拟主机
流程:
表18 Nginx基于域名的虚拟主机
序号 | 操作 | 关键命令 | 文件 |
1 | 为虚拟主机提供域名解析 | echo "192.168.204.200 www.david.com www.jjw.com" >> /etc/hosts | |
2 | 为虚拟主机准备网页文档 | mkdir -p /var/www/html/david mkdir -p /var/www/html/jjw echo "<h1>www.david.com</h1>" > /var/www/html/david/index.html echo "<h1>www.jjw.com</h1>" > /var/www/html/jjw/index.html | |
3 | 修改Nginx的配置文件 | vim /usr/local/nginx/conf/nginx.conf | |
4 | 重启服务 | systemctl restart nginx | |
5 | 浏览器访问 | http://www.david.com http://www.jjw.com |
为虚拟主机提供域名解析
为虚拟主机准备网页文档
修改Nginx的配置文件
vim /usr/local/nginx/conf/nginx.conf
设置域名www.david.com
设置域名www.jjw.com
重启服务
测试
(2)基于IP的虚拟主机(不同IP相同端口)
流程:
表19 Nginx基于IP的虚拟主机
序号 | 操作 | 关键命令 | 文件 |
1 | 添加虚拟网卡 | ifconfig ens33:0 192.168.204.200 netmask 255.255.255.0 | |
2 | 修改Nginx的配置文件 | vim /usr/local/nginx/conf/nginx.conf | |
3 | 重启服务 | systemctl restart nginx | |
4 | 浏览器访问 | http://192.168.204.200 http://192.168.204.12 |
添加虚拟网卡
ifconfig ens33:0 192.168.204.200 netmask 255.255.255.0
vim /usr/local/nginx/conf/nginx.conf
设置域名www.david.com
设置域名www.jjw.com
重启服务
浏览器访问
(3)基于端口的虚拟主机(相同IP不同端口)
流程:
表20 Nginx基于端口的虚拟主机
序号 | 操作 | 关键命令 | 文件 |
1 | 修改Nginx的配置文件 | vim /usr/local/nginx/conf/nginx.conf | |
2 | 重启服务 | systemctl restart nginx | |
3 | 浏览器访问 | http://192.168.204.200:8080 http://192.168.204.200:8888 |
修改Nginx的配置文件
vim /usr/local/nginx/conf/nginx.conf
设置域名www.david.com
设置域名www.jjw.com
重启服务
浏览器访问
5.PHP
(1)PHP配置文件
表21 PHP配置文件
文件/目录 | 功能 |
php | 主配置文件 |
php.ini | 进程服务配置文件 |
www.conf | 扩展配置文件 |
二、实验
1.LNMP架构+DISCUZ论坛应用
(1)Nginx安装
①流程
表22 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 |
关闭防火墙,将安装Nginx所需软件包传到/opt目录下
②下载Nginx相关安装包➝ 服务器
③创建程序用户管理➝解压Nginx安装进行安装
④创建运行用户、组
⑤编译安装➝切换到Nginx解包路径下➝安装路径以及模块
⑥编译安装Nginx 路径
⑦编译安装
⑧Nginx服务 可执行程序文件存入路径环境变量的目录中便于系统识别软链接
⑨检查语法
⑩查看版本
(2)Nginx升级
新版本升级:
表23 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相关安装包➝ 服务器
②解压Nginx安装进行安装
tar -zxvf nginx-1.22.0.tar.gz -C /opt/
③编译安装➝切换到Nginx解包路径下➝安装路径以及模块
完成
④编译
⑤备份
⑥备查看版本
⑦监听接口
(2)MySQL安装
流程:
表24 MySQL安装流程
序号 | 操作 | 关键命令 | 文件 |
1 | 下载MySQL相关安装包➝ 服务器 | rz -E | mysql-boost-5.7.20.tar.gz |
2 | 登录到服务器安装MySQL相关依赖包和函数库 | yum -y install \ ncurses \ ncurses-devel \ bison \ cmake | ncurses 是字符终端下图形互动功能的动态库; ncurses-devel 是ncurses开发包; bison 是语法分析器; cmake 用来编译安装mysql |
3 | 创建程序用户管理➝ 解压MySQL安装进行安装 | useradd -M -s /sbin/nologin mysql
cd /opt | |
4 | 编译安装➝切换到MySQL解包路径下➝ 安装路径以及模块 | cd /opt/mysql-5.7.20/
| DCMAKE_INSTALL_PREFIX指定mysql的安装路径; DMYSQL_UNIX_ADDR指定mysql进程监听套接字文件(数据库连接文件)的存储路径; DSYSCONFDIR指定配置文件的存储路径; DSYSTEMD_PID_DIR指定进程文件的存储路径; DDEFAULT_CHARSET指定默认使用的字符集编码,如 utf8; DDEFAULT_COLLATION指定默认使用的字符集校对规则; DWITH_EXTRA_CHARSETSDWITH_INNOBASE_STORAGE_ENGINE指定支持其他字符集编码; DWITH_INNOBASE_STORAGE_ENGINE安装INNOBASE存储引擎; DWITH_ARCHIVE_STORAGE_ENGINE安装ARCHIVE存储引擎; DWITH_BLACKHOLE_STORAGE_ENGINE安装BLACKHOLE存储引擎 ; DWITH_PERFSCHEMA_STORAGE_ENGINE安装FEDERATED存储引擎 ; DMYSQL_DATADIR指定数据库文件的存储路径; DWITH_BOOST指定boost的路径,若使用mysql-boost集成包安装则-DWITH_BOOST=boost; DWITH_SYSTEMD生成便于systemctl管理的文件; |
5 | 编译安装 | make -j 16 && make install-j 16 && make installmake -j 16 && make install | |
6 | 更改管理主/组 | chown -R mysql:mysql /usr/local/mysql/ | |
7 | 配置MySQL文件➝my.cnf | vim /etc/my.cnf [mysqld] sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES | |
8 | 设置环境变量,申明/宣告MySQL 命令便于系统识别 | echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile source /etc/profile | |
9 | 初始化数据库 | cd /usr/local/mysql/bin/ ./mysqld \ --initialize-insecure \ --user=mysql \ --basedir=/usr/local/mysql \ --datadir=/usr/local/mysql/data | |
10 | 为了启动服务方便,MySQL 启动服务加入到systemd系统管理➝ 可使用service或systemctl进行管理 | cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/ systemctl daemon-reload systemctl start mysqld.service systemctl enable mysqld | |
11 | 修改mysql 的登录密码 | mysqladmin -u root -p password "abc123" | |
12 | 授权远程登录 | mysql -u root -p |
①下载MySQL相关安装包➝ 服务器
②安装Mysql环境依赖包
③创建程序用户管理➝解压MySQL安装进行安装
tar -zxvf mysql-boost-5.7.20.tar.gz -C /opt
④编译安装➝切换到MySQL解包路径下➝安装路径以及模块
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1
⑤ 编译安装
⑥配置MySQL文件➝my.cnf
⑦ 更改管理主/组
⑧ 设置环境变量,申明/宣告MySQL 命令便于系统识别
⑨初始化数据库
⑩为了启动服务方便,MySQL 启动服务加入到systemd系统管理➝可使用service或systemctl进行管理
⑪修改mysql 的登录密码
⑫ 授权远程登录
mysql -u root -p
(3)PHP安装
流程:
表25 PHP安装流程
序号 | 操作 | 关键命令 | 文件 |
1 | 下载PHP相关安装包➝ 服务器 | rz -E | php-7.1.10.tar.bz2 |
2 | 登录到服务器安装PHP相关依赖包和函数库 | yum -y install gd \ libjpeg libjpeg-devel \ libpng libpng-devel \ freetype freetype-devel \ libxml2 libxml2-devel \ zlib zlib-devel \ curl curl-devel \ openssl openssl-devel | 安装GD库和GD库关联程序,用来处理和生成图片 |
3 | 解压PHP安装进行安装 | cd /opt tar jxvf php-7.1.10.tar.bz2 | |
4 | 编译安装➝切换到PHP解包路径下➝ 安装路径以及模块 | cd php-7.1.10
| |
5 | 编译安装 | make -j 16 && make install | |
6 | 优化php可执行程序文件存入路径环境变量的目录中便于系统识别软链接 | ln -s /usr/local/php/bin/* /usr/local/bin/ ln -s /usr/local/php/sbin/* /usr/local/sbin/ | |
7 | 调整主配置文件➝ php.ini | cp /opt/php-7.1.10/php.ini-development /usr/local/php/lib/php.ini vim /usr/local/php/lib/php.ini | --1170行--修改 mysqli.default_socket = /usr/local/mysql/mysql.sock --939行--取消注释,修改 date.timezone = Asia/Shanghai |
8 | 验证安装的模块 | php -m | |
9 | 调整进程服务配置文件 ➝ php-fpm.conf | cd /usr/local/php/etc/ cp php-fpm.conf.default php-fpm.conf vim php-fpm.conf | --17行--去掉";"注释 pid = run/php-fpm.pid |
10 | 调整扩展配置文件 ➝ www.conf | cd /usr/local/php/etc/php-fpm.d/ cp www.conf.default www.conf | |
11 | 启动php-fpm | /usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini
cd /opt/php-7.1.10/sapi/fpm | |
12 | 配置 Nginx 支持 PHP 解析➝ nginx.conf | vim /usr/local/nginx/conf/nginx.conf | --65行--取消注释,修改 location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name; #将 /scripts 修改为nginx的工作目录 #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #$document_root 代表当前请求在root指令中指定的值 include fastcgi_params; } |
13 | 启动服务 | systemctl restart nginx.service | |
14 | 测试网页 | vim /usr/local/nginx/html/index.php <?php phpinfo(); ?> | |
15 | 浏览器访问 | http://192.168.204.200/index.php | |
16 | 验证数据库工作是否正常➝新建数据库及用户➝替换原来的测试页内容 | mysql -u root -p vim /usr/local/nginx/html/index.php | |
17 | 浏览器访问 | http://192.168.204.200/index.php |
①下载PHP相关安装包➝ 服务器安装环境依赖包
②登录到服务器安装PHP相关依赖包和函数库
③解压PHP安装进行安装
cd /opt
tar -jxvf php-7.1.10.tar.bz2 -C /opt
④编译安装➝切换到PHP解包路径下➝安装路径以及模块
./configure \
--prefix=/usr/local/php \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-fpm \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip
完成
⑤编译安装
⑥优化php可执行程序文件存入路径环境变量的目录中便于系统识别软链接
⑦调整主配置文件➝php.ini
--1170行--修改
--939行--取消注释,修改
⑧验证安装的模块
⑨调整进程服务配置文件:
⑩调整扩展配置文件:
⑪启动php-fpm
⑫配置 Nginx 支持 PHP 解析➝nginx.conf
--65行--取消注释,修改
⑬启动服务
⑭验证PHP 测试页
⑮浏览器访问
http://192.168.204.200/index.php
⑯验证数据库工作是否正常➝新建数据库及用户➝替换原来的测试页内容
编辑
⑰ 替换原来的测试页内容
⑱浏览器访问
http://192.168.204.200/index.php
(4)论坛安装
流程:
表26 DISCUZ安装流程
序号 | 操作 | 关键命令 | 文件 |
1 | 创建一个数据库 | mysql -u root -p mysql> CREATE DATABASE bbs; mysql> GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123'; mysql>flush privileges; | 把bbs数据库里面所有表的权限授予给bbsuser,并设置密码; 刷新数据库; |
2 | 下载 DISCUZ相关安装包➝ 服务器 | rz -E | Discuz_X3.4_SC_UTF8.zip |
3 | 解压 DISCUZ安装进行安装 | unzip Discuz_X3.4_SC_UTF8.zip -d /opt/dis | |
4 | 上传站点更新包 | cd /opt/dis cp -r upload/ /usr/local/httpd/htdocs/bbs | |
5 | 更改管理主/组 | cd /usr/local/httpd/htdocs/bbs chown 777 daemon ./config | |
6 | 准备数据库配置 | 数据库服务器: localhost | 本地架设就用localhost,如何不是在在本机上就要填写IP地址和端口号 |
7 | 访问论坛 | http://192.168.204.200/bbs/install/index.php |
①创建一个数据库
②下载DISCUZ相关安装包➝ 服务器
③解压 DISCUZ安装进行安装
④上传站点更新包
⑤更改管理主/组
⑥准备数据库配置
数据库服务器: localhost
数据库名字: bbs
数据库用户名: bbsuser
数据库密码: admin123
管理员账号: admin
管理员密码: admin123
⑦访问论坛
安装向导-同意
安装向导-开始安装
安装向导-设置运行环境
安装向导-安装数据库
安装向导-完成
进入论坛,登录管理员用户
(5)fpm参数优化
vim /usr/local/php/etc/php-fpm.conf
pid = run/php-fpm.pid
fpm进程启动方式,动态的
fpm进程启动的最大进程数
动态方式下启动时默认开启的进程数,在最小和最大之间
动态方式下最小空闲进程数
动态方式下最大空闲进程数
重启php-fpm 并监听端口
三、问题
1.没有规则可以创建“default”需要的目标“build”。
原因分析:缺依赖安装包
解决方法:
安装Nginx所需的依赖安装包:
gcc功能:预处理、编译、连接、汇编
openssl功能:用于网站加密通讯。
pcre功能:用于支持解析正则表达式。
zlib功能:用于对数据进行解压缩。网站之间通信时,数据先压缩再传输,通过消耗CPU的方式来节省网络带宽
yum -y install pcre-devel zlib-devel openssl openssl-devel gcc gcc-c++ make
2.nginx重启报错
问题环境:
软件 | 版本 |
Centos | 7 |
nginx | 1.22.0 |
systemctl restart nginx 重启报错
原因分析:
查看/lib/systemd/system/nginx.service的内容,里面是kill了服务,但是实际会导致pid文件被删除,但是服务还存留,所以重启失败。
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
解决方法:
(1)最快的方式是停掉nginx服务,然后启动nginx。
ps -ef|grep nginx|grep -v grep|awk '{print $2}'|xargs kill -9 /usr/local/nginx/sbin/nginx
(2)修改/lib/systemd/system/nginx.service的内容,调整ExecReload和ExecStop,调整后内容如下:
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
(3)然后重新加载systemd
systemctl daemon-reload
(4)启动成功
3.yum安装提示报错
问题环境:
软件 | 版本 |
Centos | 7 |
yum |
原因分析:
“Another app is currently holding the yum lock; waiting for it to exit...”报错:
有一个应用程序正在锁定yum,等待退出
解决方法:
(1)杀掉这个应用程序
kill -s 9 13806
(2)制关掉yum进程,并重新运行yum
然后重新运行yum命令即可
4.配置文件报错
问题环境:
软件 | 版本 |
Centos | 7 |
nginx | 1.22.0 |
(1)原因分析:
nginx: [emerg] unexpected "}" in /usr/local/nginx/conf/nginx.conf:53
53行 “}”附近有语法错误,缺少分号“;”
解决方法:
修改配置文件
(2)原因分析:
nginx: [emerg] "server" directive is not allowed here in /usr/local/nginx/conf/nginx.conf:130
130行sever块不允许放置在这
解决方法:
sever块放置在http块内
(3) 原因分析:
nginx: [emerg] bind() to 192.168.204.100:80 failed (99: Cannot assign requested address)
不能解析地址
解决方法:
修改地址
5.PHP页面无法打开
(1)原因分析:
Nginx 配置文件未支持 PHP 解析
vim /usr/local/nginx/conf/nginx.conf
(2)解决方法:
将 /scripts 修改为nginx的工作目录
四、总结
LNMP平台是高效稳定的Web应用平台,LNMP架构结合了Linux操作系统的稳定性、Nginx服务器的高性能、MySQL数据库的可靠性和PHP语言的灵活性,被广泛应用于Web开发和部署。
Web服务器需要性能的用 Nginx ,不需要性能只求稳定用Apache。Nginx 处理动态请求是弱项,一般动态请求要 Apache 去做,Nginx 只适合静态和反向。