全网最详细基于Kylin的Nginx服务部署与配置(2/2)
以下所使用的环境为:虚拟化软件:VMware Workstation 17 Pro
麒麟系统版本:Kylin-Server-V10-SP3-2403-Release-20240426-x86_64
五、Nginx Location语法特性
1. Location语法的优先级
Location可以书写在server字段和location字段中。
匹配符匹配规则优先级=精确匹配1^~以某个字符串开头,不检查正则表达式,区分大小写2~区分大小写的正则匹配3~*不区分大小写的正则匹配42. Location匹配规则案例
: 新建虚拟主机配置文件
vim /opt/nginx/conf/location.conf
# 文件内容如下
server {
listen 8080;
server_name _;
charset utf-8;
location / {return200"当其它location规则不匹配,则默认匹配此条规则\n";}
location =/ {return200"当url=/时,匹配此条规则\n";}
location /docs/ {return200"匹配url:/docs/\n";}
location ^~ /images/ {return200"匹配任何以images开头的请求,不匹配正则表达式\n";}
location ~* \.(png|jpg)$ {return200"匹配以png或jpg结尾的url,正常正则表达式\n";}}: 编辑Nginx主配置文件
vim /opt/nginx/conf/nginx.conf
# 在http字段中include
include location.conf;
: 验证Nginx配置文件语法,重新加载Nginx配置文件
nginx -t
nginx -s reload
: 验证【location =/】
curl http://192.168.110.1:8080 # 即使不书写/,也会默认给我们加上/curl http://192.168.110.1:8080/
: 验证【/docs/】
curl http://192.168.110.1:8080/docs/
: 验证【^~ /images/】
curl http://192.168.110.1:8080/images/
curl http://192.168.110.1:8080/images
curl http://192.168.110.1:8080/images/xxxx
: 验证【~ \.(png|jpg)】*
curl http://192.168.110.1:8080/images/aa.jpg
curl http://192.168.110.1:8080/docs/aa.jpg
curl http://192.168.110.1:8080/aa.jpg
3. 利用Location分离静态动态网页请求
: 新建虚拟主机配置文件
vim /opt/nginx/conf/static.conf
# 文件内容如下
server {
listen 8080;
server_name _;
location / {# 当不匹配下列的静态数据规则,则将其当作动态数据,此处调整到百度
proxy_pass http://www.baidu.com;}
location ~* \.jpg$ {# 如果请求的数据为静态数据,此处以jpg为例,则指向/www/location目录
root /www/location/;}}: 编辑Nginx主配置文件
vim /opt/nginx/conf/nginx.conf
# 在http字段中include
include static.conf;: 验证Nginx配置文件语法,重新加载Nginx配置文件
nginx -t
nginx -s reload: 往/www/location目录中放入图片
: 客户端测试,请求动态图片
: 客户端测试,自动跳转到baidu
4. root参数用法
节点设计
主机网络信息说明Kylin-1192.168.110.1/24Web服务器虚拟主机配置文件如下:
vim /opt/nginx/conf/root1.conf
# 文件内容如下
server {
listen 8080;
server_name _;
location /static/ {
root /img/;}}资源目录如下:
tree /img
此时Nginx会认为资源存放在 http://192.168.110.1:8080/img/static/xxxx,但是我们的url不需要书写/img,也就是用户实际上是不知道/img目录的存在,也不知道访问的图片在/img目录下存放。
http://192.168.110.1:8080/static/404.jpg
5. alias参数用法
alias的实际用法类似于root,但是alias是直接将值替换,而root是附加在url上。相当于root,alias更易理解。
节点设计
主机网络信息说明Kylin-1192.168.110.1/24Web服务器虚拟主机配置文件如下:
vim /opt/nginx/conf/alias1.conf
# 文件内容如下
server {
listen 8080;
server_name _;
location /static/ {alias /www/alias/;}}资源目录如下:
tree /www/
当我们访问 http://192.168.110.1:8080/static/404.jpg时,Nginx会将/static/替换为 http://192.168.110.1:8080/www/alias/404.jpg,该过程用户的不可得知。
http://192.168.110.1:8080/static/404.jpg
六、rewrite模块
1. rewrite模块介绍
rewrite是来自ngx_http_rewrite_module模块,该模块用于使用PCRE正则表达式更改请求URI,返回重定向,以及有条件选择的选择。ngx_http_rewrite_module模块中一共包含 break、if、return、rewrite和set指令。
rewrite功能
将http重定向到https 实现URL的永久重定向
2. if和return指令
if的匹配规则如下:
符号说明=相等为true,不相等为false!=不相等为true,相等为false~区分大小写的正则表达式,匹配为true,不匹配为false!~区分大小写的正则表达式,不匹配为true,匹配为false~*不区分大小写的正则表达式,匹配为true,不匹配为false!~*不区分大小写的正则表达式,不匹配为true,匹配为false条件参数如下
符号作用-f 和 !-f请求的文件是否存在-d 和 !-d判断的目录是否存在-e 和 !-e判断的文件、目录以及软链接是否存在-x 和 !-x判断的文件是否具有执行权限return基本语法
return code
**code:**HTTP状态码,必须要指定返回的状态码 **text:**返回的文本,可选值 **URL:**重定向到目标url,可选值 **@location_name:**重定向到Location域中(内部重定向),可选值
: 新建虚拟主机配置文件,实现匹配用户的请求方法是否为GET
vim /opt/nginx/conf/if.conf
# 文件内容如下
server {
listen 8080;
server_name _;
location /{if($request_method!= GET){return200"You must use 'GET'";}return200"successfully";}}: 验证:客户端使用curl访问Nginx,默认使用的请求方式为GET
curl http://192.168.110.1:8080
curl-X PUT http://192.168.110.1:8080
curl-X POST http://192.168.110.1:8080
3. set指令
主要作用:在Nginx中设定变量,然后可以在配置文件中调用该变量。
set基本语法
set$NAME value;
[*]** N A M E < / f o n t > : ∗ ∗ 变量名,必须以 NAME</font>:**变量名,必须以 NAME</font>:∗∗变量名,必须以开头**value:**变量值,可以是字符串、正则表达式匹配结果等
: 新建虚拟主机配置文件
vim /opt/nginx/conf/set1.conf
# 文件内容如下
server {
listen 8080;set$txt"Hello World!\n";
location /{return200$txt;}}: 验证:客户端使用curl访问Nginx
curl http://192.168.110.1:8080
4. break指令
break指令是流程控制指令,用于停止处理当前的 location、rewrite或其它指令集,并跳转到指定的阶段。当Nginx执行到break后,会停止后续的if、return、rewrite、set指令执行。总的来说:break会停止当前块中的后续语句执行。
: 新建虚拟主机配置文件
vim /opt/nginx/conf/break1.conf
# 文件内容如下
server {
listen 8080;
location /{set$txt1"Hello World!";echo$txt1;break;set$txt2"Hello Kylin!";echo$txt2;}}: 验证:客户端使用curl访问Nginx
curl http://192.168.110.1:8080
5. rewrite指令
rewrite指令允许根据正则表达式修改请求的URL,在修改请求的url时可以保证原先url所携带的参数不丢失。
rewrite指令基本语法
rewrite regex replacement
**regex:**正则表达式 **replacement:**要替换成新的URL
[*]**flag:**标记位
redirect:返回302临时重定向 permanent:返回301永久重定向 last:服务器内部重写URL,实现重定向 break:在完成跳转后,终止后续的last
rewrite标记位的不同参数特性:
redirect和permanent参数是在客户端实现URL更新,更新动作对于用户是可预见的。 last是在服务器内部实现url更新,更新动作对于用户的不可预见的。
rewrite和return都可以实现重定向,二者的区别:
rewrite和return都可以实现重定向 对于计算机而言,rewrite还需要正则匹配,而return不需要,所以rewrite速度会更快一点 对于用户而言,rewrite和return二者没有任何区别 选择rewrite和return根据需求自主选择即可
重定向301和302的区别
302重定向是暂时的,浏览器会跳转到新的页面,旧的页面会保存 301重定向是永久的,浏览器在抓取新页面时会同时将旧网址替换为重定向后的网址 301的使用场景:公司域名的永久变化,如 张三.com 变更为 李四.com【二级域名发生改变】 302的使用场景:公司域名的临时变化 ,如 buy.张三.com 变更为 shop.张三.com【二级域名不发生改变】
5.1 rewrite实现永久重定向
实验需求
旧域名:www.shop.com 新域名:www.online.com 实现旧域名跳转到新域名
节点设计
主机网络信息说明Kylin-1192.168.110.1/24Web服务器Kylin-2192.168.110.2/24测试服务器: 新建旧域名的虚拟主机配置文件
vim /opt/nginx/conf/shop.conf
# 文件内容如下
server {
listen 80;
server_name www.shop.com;
location /{
root /www/shop/;
index index.html;
rewrite / http://www.online.com permanent;# permanent返回301永久重定向}}: 新建新域名的虚拟主机配置文件
vim /opt/nginx/conf/online.conf
# 文件内容如下
server {
listen 80;
server_name www.online.com;
location /{
root /www/online/;
index index.html;}}: 新建新旧网站的索引页
mkdir /www/{shop,online}echo"www.shop.com"> /www/shop/index.html
echo"www.online.com"> /www/online/index.html: 修改主配置文件
vim /opt/nginx/conf/nginx.conf
# 在http字段中分别include
include shop.conf;
include online.conf;: 验证Nginx配置文件语法,重新加载Nginx
nginx -t
nginx -s reload: 客户端Kylin-2添加域名解析,测试访问新网站
echo"192.168.110.1www.shop.com www.online.com">> /etc/hosts
curl http://www.online.com
: 客户端Kylin-2测试访问旧网站,此时会提示302临时重定向
curl http://www.shop.com
: 客户端Kylin-2测试访问旧网站,添加-L选项,让curl自动处理重定向(追随链接自动重定向)
curl-L http://www.shop.com
5.2 rewrite实现临时重定向
实验需求
旧域名:www.shop.com 新域名:promotion.shop.com 公司最近推出了打折活动,当访问http://www.shop.com/promotion时临时重定向到http://promotion.shop.com
节点设计
主机网络信息说明Kylin-1192.168.110.1/24Web服务器Kylin-2192.168.110.2/24测试服务器: 新建旧域名的虚拟主机配置文件
vim /opt/nginx/conf/shop.conf
# 文件内容如下
server {
listen 80;
server_name www.shop.com;
location /promotion {# 匹配域名http://www.shop.com/promotion
rewrite / http://promotion.shop.com redirect;# redirect返回302临时重定向}
location / {
root /www/shop/;
index index.html;}}: 新建新域名的虚拟主机配置文件
vim /opt/nginx/conf/promotion.conf
# 文件内容如下
server {
listen 80;
server_name promotion.shop.com;
location / {
root /www/promotion/;
index index.html;}}: 新建新旧网站的索引页
mkdir /www/{shop,promotion}echo"www.shop.com"> /www/shop/index.html
echo"promotion.shop.com"> /www/promotion/index.html: 修改主配置文件
vim /opt/nginx/conf/nginx.conf
# 在http块中include
include shop.conf;
include promotion.conf;: 验证Nginx配置文件语法,重新加载Nginx
nginx -t
nginx -s reload: 客户端Kylin-2添加域名解析,测试访问新网站
echo"192.168.110.1www.shop.com promotion.shop.com">> /etc/hosts
curl http://promotion.shop.com
: 客户端Kylin-2测试访问旧网站,此时会提示302临时重定向
curl http://www.shop.com
curl http://www.shop.com/promotion
: 客户端Kylin-2测试访问旧网站,添加-L选项,让curl自动处理重定向(追随链接自动重定向)
curl-Lhttp://www.shop.com/promotion
curl-Ihttp://www.shop.com/promotion
5.3. last实现服务器内重定向
当rewrite指令的最后一个参数设置为last时,在完成rewrite操作后,Nginx会停止处理当前的rewrite指令,将url重写结果进行Location匹配,这个过程在浏览器的URL地址不会发生改变,对于用户而言无感知。
实验需求
访问的URL:http://www.shop.com/apple/apple.jpg 要求跳转到:http://www.shop.com/pic/apple.jpg apple.jpg图片资源目录在/www/img目录下
节点设计
主机网络信息说明Kylin-1192.168.110.1/24Web服务器Kylin-2192.168.110.2/24测试服务器: 新建虚拟主机配置文件
vim /opt/nginx/conf/shop.conf
# 文件内容如下
server {
listen 80;
server_name www.shop.com;
location /apple {# 访问url:http://www.shop.com/apple/apple.jpg# [^/apple/(.*)$],提取/apple/开头,后续所有的字符存储到变量 $1 中。# ,替换url,偷换为: http://www.shop.com/pic/apple.jpg# ,将替换后的结果拿去和其它location进行匹配
rewrite ^/apple/(.*)$ /pic/$1 last;}
location /pic {alias /www/img/;}
location / {
root /www/shop/;
index index.html;}}: 新建网站的索引页
mkdir /www/{shop,img}echo"www.shop.com"> /www/shop/index.html
: 修改主配置文件
vim /opt/nginx/conf/nginx.conf
# 在http块中include
include shop.conf;: 验证Nginx配置文件语法,重新加载Nginx
nginx -t
nginx -s reload: 客户端Kylin-2添加域名解析,测试访问新网站
http://www.shop.com/apple/apple.jpg
: 客户端Kylin-2使用curl访问Nginx,显示网站的响应头信息。可以看到HTTP状态码为200,所以重写url的过程对用户是不可见的。
curl-I http://www.shop.com/apple/apple.jpg
5.4 break终止last匹配
当rewrite指令的最后一个参数设置为break时,在完成rewrite操作后,Nginx会停止处理下一个location中的rewrite操作。
实验需求
访问的URL:http://www.shop.com/apple/apple.jpg
location块中存在三个匹配项
匹配 /apple ,重写URL 匹配 /img,
apple.jpg图片资源目录在/www/img目录下
节点设计
主机网络信息说明Kylin-1192.168.110.1/24Web服务器Kylin-2192.168.110.2/24测试服务器: 新建虚拟主机配置文件
vim /opt/nginx/conf/break_last.conf
# 文件内容如下
server {
listen 8080;
server_name _;
location /aaa {# root目录的不能写在 /www/aaa,因为Nginx会帮我们自动填充url,书写为/www,nginx会将/aaa填充,填充后的url为 /www/aaa
root /www/;
index index.html;}
location /bbb {
root /www/;
index index.html;
rewrite ^/bbb/(.*)$ /aaa/$1 last;}
location /ccc {
root /www/;
index index.html;
rewrite ^/ccc/(.*)$ /bbb/$1break;}}: 新建网站的索引页
mkdir /www/{aaa,bbb,ccc}echo"aaaaaaaaa"> /www/aaa/index.html
echo"bbbbbbbbb"> /www/bbb/index.html
echo"ccccccccc"> /www/ccc/index.html: 修改主配置文件
vim /opt/nginx/conf/nginx.conf
# 在http块中include
include break_last.conf;: 验证Nginx配置文件语法,重新加载Nginx
nginx -t
nginx -s reload: 客户端Kylin-2测试访问 http://192.168.110.1:8080/aaa,会出现一个301永久重定向的提示,这是因为我们在书写rewrite时,通过[/(.*)$]匹配后续的参数,而我们没有指定index.html,Nginx会自动给我重定向到index.html文件,也就会出现一个301永久重定向提示。
curl http://192.168.110.1:8080/aaa
curl-L http://192.168.110.1:8080/aaa
: 客户端Kylin-2测试访问 http://192.168.110.1:8080/bbb/index.html。
curl http://192.168.110.1:8080/bbb/index.html
curl-I http://192.168.110.1:8080/bbb/index.html
: 客户端Kylin-2测试访问 http://192.168.110.1:8080/ccc/index.html。因为【location /ccc】中的rewrite定义了last参数,所以在重写完url跳转到【location /bbb】时,不会再执行【location /bbb】中的rewrite参数。
curl http://192.168.110.1:8080/ccc/index.html
curl-I http://192.168.110.1:8080/ccc/index.html
七、 Mariadb数据库
1. 数据库的相关概念
数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。
关系型数据库:Oracle、DB2、SQL Server、MySql、MariaDB等 非关系型数据库:Memcached、MongoDB、redis、HBase等
DBMS的作用
对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。
**数据定义功能:**提供数据定义语言(DDL),定义数据库中的数据对象(数据库的建立、删除和修改) **数据操纵功能:**提供数据操纵语言(DML),操纵数据实现对数据库的基本操作(数据的查询、插入、删除和修改)
2. Mariadb数据库介绍
Mariadb数据库是一个小型关系型数据库管理系统,是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。Mariadb的目的是完全兼容MySQL,包括API和命令行。Mariadb默认存储引擎是Maria,不是MyISAM。Maria可以支持事务,但是默认情况下没有打开事务支持,因为事务支持对性能会有影响。
Mariadb客户端:mariadb Mariadb服务端:mariadb-server 服务守护进程:mariadb 端口号:3306 主配置文件:/etc/my.cnf.d/mariadb-server.conf 日志文件:/var/log/mariadb 主目录:/var/lib/mysql
Mariadb初始化(安全脚本),执行脚本前需要先启用数据库。
mysql_secure_installation
设置root密码 删除匿名用户 设置root是否允许远程登录 删除测试数据库test 保存修改
3. Mariadb的访问方式
在启动mariadb后,一共存在两种访问的方式
网络访问
mysql -uroot -pKylin@2024 -h192.168.110.1
本地套接字文件访问,套接字文件在:/var/lib/mysql/mysql.sock
mysql -uroot-pKylin2024
4. mysqladmin数据库管理命令
: 运行mariadb服务并加入到开机自启
systemctl enable--now mariadb.service
: 初始化安装的mariadb默认root管理员账号没有密码,需要手动指定
mysqladmin password "Kylin@2024": 查看当前服务器状态
mysqladmin -u root -pKylin@2024 status
: 检查mariadb-server是否可用
mysqladmin -u root -pKylin@2024 ping
: 创建新数据库
mysqladmin -u root -pKylin@2024 create mysql_demo5. Mariadb数据库基本操作命令
5.1 用户登录
交互式登录
mysql -u root
> Kylin@2024非交互式登录
mysql -u root -pKylin@2024 # 密码必须跟在-p选项后,不允许出现空格使用本地套接字文件方式登录
mysql -u root -pKylin@2024 -S /var/lib/mysql/mysql.sockmysql的常用选项
选项说明-e执行MySQL命令-h指定连接服务器的域名或IP地址-p指定登录数据库用户密码-u指定登录数据库的用户-S指定本地套接字文件5.2 用户操作命令
创建用户
createuserUSER@HOST identified by'PASSWORD';
create user:创建用户 USER:创建的用户名 HOST:指定该用户允许登录的主机 identified by ‘PASSWORD’:设置用户的登录密码
账号授权
grant PRIVILEGE onDATABASE.TABLETOUSER@HOST;# 授权用户revoke PRIVILEGE onDATABASE.TABLETOUSER@HOST;# 移除授权
grant:授权 revoke:移除授权 PRIVILEGE:指定权限 on DATABASE.TABEL:指定权限对应的数据库、数据库表 to USER@HOST:操作的用户
修改账户密码
alteruserUSER@HOST identified by'PASSWORD';set password forUSER@HOST='PASSWORD'5.3 数据库约束条件
数据库约束条件
主关键字约束Primary Key Constraint 外关键字约束Foreign Key Constraint 唯一性约束Unique Constraint 检查约束Check Constraint 缺省约束Default Constraint
查看数据库
showdatabases;创建数据库
createdatabase db01;选择数据库
use db01;更改数据库结构,更改student表中的name字段结构为varchar(20)
altertable student modify name varchar(20);在数据库的表中添加新字段,在student表中添加新字段phone_number
altertable student add phone_number varchar(20);删除数据库中表的指定字段,删除student表中的class字段
altertable student drop class;更改数据库中表的字段名,将student表中的class字段名修改为classid
altertable student change class varchar(20) classid varchar(20);5.4 数据库表操作
创建表
createtable tb_name(int xxx,char(10) yyy
);插入记录:向指定字段插入值
insertinto student(name,classid)values("Mike","22network");插入记录:向所有字段插入值
insertinto student values("Mike","22network",19)删除数据行,将student表中的姓名为Mike的数据行删除
deletefrom student where name="mike";5.5 数据库的备份与还原
使用cp、tar等命令直接备份数据库所在目录
cp /var/lib/mysql /backup
tar-cvf /sql.tar /var/lib/mysql使用mysqldump命令备份,备份文件默认不会包含 数据库创建命令
# 备份student数据库,备份文件为back_student,--opt选项对备份过程进行优化(默认选项)
mysqldump -u root -p--opt student > back_student
# 备份student数据库中的course表,备份文件为 back_course
mysqldump -u root -p student course > back_course
# 备份所有的数据库,备份文件为 back_all
mysqldump -u root -p --all-databases > back_all数据库还原备份,还原到的目的数据库需要存在
# 恢复备份的student数据库
mysql -u root -p student < back_studnet
# 恢复备份的course表,还原到student数据库
mysql -u root -p student course < back_course
# 恢复备份所有数据库
mysql -u root -p< back_all八、LNMP黄金架构
1. LAMP介绍
LAMP是一个缩写词,具体包括:
L(Linux操作系统):作为LAMP架构的基础,提供用于支撑Web站点的操作系统,能够与其他三个组件提供更好的稳定性、兼容性(AMP组件也支持Windows、UNIX等平台)。 A(Apache网站服务器):作为LAMP架构的前端,是一款功能强大、稳定性好的Web服务器程序,该服务器直接面向用户提供网站访问,发送网页、图片等文件内容。 M(MySQL数据库服务器):作为LAMP架构的后端,是一款流行的开源关系数据库系统。在企业网站、业务系统等应用中,各种账户信息、产品信息、客户资料、业务数据等都可以存储到MySQL数据库,其他程序可以通过SQL语句来查询、更改这些信息。 P(PHP/Perl/Python网页编程语言):作为三种开发动态网页的编程语言,负责解释动态网页文件,负责沟通Web服务器和数据库系统以协同工作,并提供Web应用程序的开发和运行环境。其中PHP是一种被广泛应用的开放源代码的多用途脚本语言,它可以嵌入到HTML中,尤其适合于Web应用开发。
在构建LAMP平台时,各组件的安装顺序依次为Linux、Apache、MySQL、PHP。其中Apache和MySQL的安装并没有严格的顺序,PHP环境的安装一般放到最后。
2. LNMP介绍
LNMP也是一个缩写词,具体包括:
L(Linux操作系统):作为LNMP架构的基础,提供用于支撑Web站点的操作系统,能够与其他三个组件提供更好的稳定性、兼容性(NMP组件也支持Windows、UNIX等平台)。 N(Nginx网站服务器):作为LNMP架构的前端,是一款功能强大、稳定性好的Web服务器程序,提供前端的静态页面服务,同时具有代理、转发的作用,可以支持转发动态请求的模块,但自身没有处理动态资源的功能。 M(MySQL数据库服务器):与LAMP架构中的MySQL作用相同,用于存储和查询各种数据。 P(PHP/Perl/Python网页编程语言):与LAMP架构中的PHP作用相同,负责解释动态网页文件,沟通Web服务器和数据库系统,并提供Web应用程序的开发和运行环境。
相较于LAMP,LNMP使用Nginx替代了Apache。Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器,具有更高的并发处理能力和资源利用率。
3. LNMP工作流程图
4. Nginx与PHP的协同工作原理
5. fastcgi协议介绍
FastCGI是一个可伸缩、高速的在HTTP服务器和动态脚本之间通信的接口(Linux环境下的FastCGI可以是文件socket也可以是IP形式的socker)。
FastCGI是在CGI(Common Gateway Interface)的基础上发展起来的。CGI是Web服务器和外部应用程序之间的接口标准,它定义了在Web服务器和应用程序之间传递数据的规范。然而,传统的CGI模式在处理大量并发请求时存在性能问题,因为每次请求都会创建一个新的进程来处理。 为了解决CGI的性能问题,FastCGI应运而生。它采用了进程复用的方式,通过保持一组预先创建好的进程来避免重复的进程创建和销毁操作,从而提高了性能
PHP一共有三个核心配置文件
**php.ini:**核心配置文件 **php-fpm.conf:**进程服务配置文件 **www.conf:**扩展配置文件
6. 单机LNMP部署
单机LNMP部署的顺序
安装Nginx【可选源码安装、官方YUM仓库安装】 安装Mariadb/Mysql数据库 安装PHP
节点设计
主机网络信息说明Kylin-1192.168.110.1/24Web服务器Kylin-2192.168.110.2/24测试服务器: 因为源码编译安装时,不会创建nginx用户,而是直接使用root用户和组,创建运行用户和组
useradd-M-s /sbin/nologin nginx
**-M:**不创建用户主目录 **-s /sbin/nologin:**禁止用户登录到shell环境
: 上传Nginx源码包,解压源码包并进入该目录,生成Makefile文件
tar-zxf nginx-1.18.0.tar.gz
cd nginx-1.18.0/
./configure --prefix=/opt/nginx --user=nginx --group=nginx --with-http_stub_status_module
**–prefix:**指定软件的安装目录 **–user:**设置非特权用户 **–group:**设置非特权组 **–with-http_stub_status_module:**启用ngx_http_stub_status_module
: 编译安装
make&&makeinstallrm-rf nginx-1.18.0
echo"export PATH=$PATH:/opt/nginx/sbin">> /etc/profile
source /etc/profile: 启动nginx,关闭防火墙
nginx
systemctl stop firewalld.service
systemctl disable firewalld.service
: 安装PHP所需要的相关依赖,都是一些与图片格式、字体样式、文件格式、资源定位和安全套接字有关的依赖,默认桌面环境都是已经安装好的,除了libjpeg-devel。
yum install-y libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel curl curl-devel opnessl openssl-devel: 利用本地源安装Mariadb,启动mariadb并加入到开机自启
yum install-y mariadb-server mariadb
systemctl enable--now mariadb.service: 上传PHP源码包,解压源码包并进入该目录,生成Makefile文件
tar-zxf php-7.3.31.tar.gz
cd php-7.3.31/
./configure --prefix=/opt/php --with-mysql-sock=/var/lib/mysql/mysql.sock --with-mysqli --with-zlib --with-curl --with-gd --with-openssl --enable-fpm --enable-mbstring --enable-ftp --enable-pdo --with-freetype-dir
**–prefix:**选择软件安装路径 **–with-mysql-sock:**选定MySQL数据库的socket文件位置,PHP将使用该文件与MySQL服务器通信 **–with-mysqli:**启用mysqli扩展,mysqli扩展提供了改进的功能,如预处理语句和更好的错误报告,用于与MySQL数据库进行交互 **–with-zlib:**启用了zlib压缩支持,zlib是一个广泛使用的数据压缩库 **–with-curl:**启用了cURL支持,cURL是一个用于传输数据的库,支持多种协议,如HTTP、FTP等 **–with-gd:**启用了GD库支持,GD库用于处理图像,比如生成缩略图、添加水印等 **–with-openssl:**启用了OpenSSL支持,OpenSSL是一个强大的安全库,用于加密和解密数据,以及生成和管理证书。 **–enable-fpm:**启用PHP-FPM,PHP-FPM是一个实现了FastCGI协议的PHP FastCGI管理器,用于提高PHP应用的性能 **–enable-mbstring:**启用了多字节字符串(mbstring)支持,mbstring函数库用于处理多字节字符编码,比如UTF-8 **–enable-ftp:**启用了FTP支持,允许PHP脚本通过FTP协议进行文件传输 **–enable-pdo:**启用了PDO(PHP Data Objects)扩展,PDO提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,代码都可以通过一致的函数和方法来访问数据库 **–with-freetype-dir:**指定freetype的安装目录(yum安装的freetype,PHP在编译过程中可以自行查找到路径),FreeType 是一个广泛使用的开源库,用于处理和渲染字体
: 编译安装PHP,大约需要等待9分钟,PHP尽量不删除源码包,方便后续缺少扩展时可以动态添加扩展
make&&makeinstall: 将源码目录下的php.ini-development文件拷贝到PHP安装目录下
cp php.ini-development /opt/php/lib/php.ini
vim /opt/php/lib/php.ini
# 添加下列内容,指定MySQLi扩展用于连接MySQL服务器时默认使用的套接字(socket)文件路径
mysqli.default_socket = /var/lib/mysql/mysql.soc
: 修改php-fpm配置文件,修改php-fpm进程的运行用户,默认情况下运行用户为nobody
cd /opt/php/etc/php-fpm.d
cp www.conf.default www.conf
vim www.conf
# 修改user和group字段的值user=nginx
group=nginx: 将php进程服务配置文件重命名,删掉后缀default
cd /opt/php/etc/
cp php-fpm.conf.default php-fpm.conf: 启动php
/opt/php/sbin/php-fpm
: 将php命令分别软链接到/usr/local/bin和sbin目录下
ln-s/opt/php/bin/* /usr/local/bin/
ln-s /opt/php/sbin/* /usr/local/sbin: 编辑nginx配置文件,让nginx支持php模块。
vim /opt/nginx/conf/nginx.conf
# 将下列参数取消注释
location ~ \.php$ {
root /www/php/;# PHP源码目录
fastcgi_pass 127.0.0.1:9000;
fastcgi_indexindex.php;# 首页php的代码文件
fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;
include fastcgi_params;}
: 检查nginx配置文件,重新加载nginx
nginx -t
nginx -s reload: 创建php测试网页
vim /opt/nginx/html/index.php
# 写入下列内容<?php
phpinfo();?>
: 查看PHP已经加载的扩展
php -m
7. wecenter部署
节点设计
主机网络信息说明Kylin-1192.168.110.1/24Web服务器test192.168.110.3/24测试服务器7.1 wecenter网站介绍
WeCenter诞生于中国,是一款基于PHP和MySQL构建的开源程序。它提供了类似知乎的功能,并整合了Digg和Wiki等多种特性,使得构建专业的知识库变得更加便捷。WeCenter不仅是一个简单的问答网站,更是一个集成了多种社交功能的综合性平台。wecenter是前后端不分离的网站,也就是静态数据和动态数据都存放在同一个目录下。
7.2 wecenter网站部署
: 上传源码包,解压缩后进入目录
mkdir /www/wecenter
unzip WeCenter_V3.6.2.zip
: 新建nginx虚拟主机配置文件
vim /opt/nginx/conf/wecenter.conf
# 文件内容如下
server {
listen 80;
server_name www.wecenter.com;
root /www/wecenter/;
index index.php index.html;
location ~ \.php$ {
root /www/wecenter/;
fastcgi_pass 127.0.0.1:9000;
fastcgi_indexindex.php;
fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;
include fastcgi_params;}}: 修改nginx配置文件
vim /opt/nginx/conf/nginx.conf
# 在http字段中include
include wecenter.conf;: 检查配置文件语法,重新加载Nginx
nginx -t
nginx -s reload: 给网页文件目录添加授权,将软件目录的属组和属主更改为nginx用户
chown-R nginx.nginx /www/wecenter: 新建数据库和用户,用于提供wecenter使用
mysql -u root -pKylin2024> create database wecenter;# 创建数据库wecenter> create user wecenter@'127.0.0.1' identified by 'wecenter@123';# 新建用户wecneter,限制只能本地登陆> grant all privileges on wecenter.* to wecenter@'127.0.0.1';# 赋予wecenter用户对wecenter数据库的全部权限> flush privileges;# 刷新权限,只要设计到权限修改,都需要修改该值
: 登录网站,查看服务器环境检查
: 配置系统,设置连接数据库相关的参数
: 添加管理员
: 设置完参数后,会提示删除install/index.php文件,防止入侵者通过该页面重置网页
rm-rf /www/wecenter/install/index.php
8. WordPress部署
节点设计
主机网络信息说明Kylin-1192.168.110.1/24Web服务器test192.168.110.3/24测试服务器8.1 WordPress网站介绍
WordPress诞生于2003年,最初是一个简单的博客平台,但随着时间的推移,它逐渐演变成一个多功能的CMS。作为一个开源项目,任何人都可以查看、修改和改进其源代码。这种开放性促进了其快速发展,并吸引了一个庞大的开发者社区。WordPress提供了直观和用户友好的后台界面,用户无需具备专业的编程知识,即可轻松添加内容、更改布局和管理网站功能。WordPress提供了数千种免费和付费的主题和模板,涵盖了各种行业和设计风格。用户可以根据自己的品牌形象和网站需求选择合适的主题,从而打造出独具特色的网站外观。
8.2 WordPress网站部署
: 上传源码包,解压缩后进入目录
mkdir /www &&cd /www
unzip wordpress-5.9.3-zh_CN.zip
: 新建nginx虚拟主机配置文件
vim /opt/nginx/conf/wordpress.conf
# 文件内容如下
server {
listen 80;
server_name www.wordpress.com;
root /www/wordpress/;
index index.php index.html;
location ~ \.php$ {
root /www/wordpress/;
fastcgi_pass 127.0.0.1:9000;
fastcgi_indexindex.php;
fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;
include fastcgi_params;}}: 修改nginx配置文件
vim /opt/nginx/conf/nginx.conf
# 在http字段中include
include wordpress.conf;: 检查配置文件语法,重新加载Nginx
nginx -t
nginx -s reload: 给网页文件目录添加授权,将软件目录的属组和属主更改为nginx用户
chown-R nginx:nginx /www/wordpress: 新建数据库和管理员用户,用于提供wecenter使用
mysql -uroot -pKylin2024
>createdatabase WORDPRESS;>createuser wordpress@'127.0.0.1' identified by'Kylin2024';>grantallprivilegeson WORDPRESS.*to wordpress@'127.0.0.1';> flush privileges;
: 登录网站,完成初始化配置
: 运行安装程序,完成信息配置,用户密码:u#G#uvvqI0JmtSZRof
: 验证登录
: 发布一篇博客
: 到数据库中查看该博客相关数据,博客数据是存储在wp_posts表中
useWORDPRESS;
select post_content from wp_posts;
: 根据上述的查询结果,可以看到图片的存储路径在http://www.wordpress.com/wp-content/uploads/2024/10/pic.webp
cd /www/wordpress/wp-content/uploads/2024/10/
九、网站集群部署
1. 部署集群的必要性
根据以上WordPress案例为例,使用httpd工具包所提供的ab命令,对网站进行压测,可以看到PHP的占比迅速提升
yum install-y httpd-tools
ab -n1000-c100 http://www.wordpress.com/index.php # 请求1000次,每次发出100次访问
**-n:**要执行请求的数量 **-c:**一次要发出的多个请求的数目
页:
[1]