一、常见web信息
www(world wide web):万维网,也就是全球信息广播
网址:
URI:Uniform Resource Identifier,统一资源标识,分为URL和URN
URN:Uniform Resource Naming,统一资源命名,P2P下载使用的磁力链接是URN的一种实现
URL:Uniform Resorce Locator,统一资源定位符,用于描述某服务器某特定资源位置区别:URL提供查找该事物的方法。URN仅用于命名,而不指定地址
http协议(Hyper Text Transfer Protocol):超文本传输协议,从服务器传输html到本地浏览器的传输协议,工作于B/S架构上。
1.1 URL构成
<scheme>://<user>:<password>@<host>:<port>/<path>:<params>?<query>#<frag>
scheme | 方案 | 访问服务器以获取资源是要使用哪种协议 |
user | 用户 | 某些方案访问资源时需要的用户名 |
password | 密码 | 用户对应的密码,中间用:分隔 |
host | 主机 | 资源宿主服务器的主机名或IP地址 |
port | 端口 | 资源宿主服务器正在监听的端口号,很多方案有默认端口号 |
path | 路径 | 服务器资源的本地名,由一个/将其与前面的URL组件分隔 |
params | 参数 | 输入指定的参数,参数为名/值对,多个参数,用;分隔 |
query | 查询 | 传递参数给程序,如数据库,用?分隔,多个查询用&分隔 |
frag | 片段 | 一小片或一部分资源的名字,此组件在客户端使用,用#使用 |
1.2 http工作机制
一次http事务包括:http请求,http响应
1.3 web资源类型
静态文件:无需服务端做出额外处理,服务器端和客户端的文件内容相同
常见文件后缀:.html,.txt,.jpg,.js,.css,mp3,avi
动态文件:服务端执行程序,返回执行的结果,服务器端和客户端的文件内容不相同
常见文件后缀:.php,jsp,asp
1.4 mine(Multipurpose Internet Mail Extensions)多用途因特网邮件扩展
设计目的:为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理
为了支持多媒体数据类型,HTTP协议中就使用了附加在文档之前的MIME数据类型信息来标识数据类型。
主要功能:让服务器将它们发送的多媒体数据的类型告诉浏览器
服务器将MIME标志符放入传送的数据中来告诉浏览器使用哪种插件读取相关文件
MIME类型存在于HTTP响应报文的响应头部信息里,它是一种文本标记
MIME格式: type/subtype 文件类型后缀(html txt jpg png... ...)
1.5 http访问请求完整过程
1.建立连接:
TCP的3次握手建立链接,向服务器发送http请求,服务器拒绝或允许
2.接受请求
接受客户端请求报文对某个资源的一次请求过程web响应访问模型a.单进程I/O模型:启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应
b.多进程I/O模型:并行启动多个进程,每个进程响应一个连接请求
c.复用I/O结构:启动一个进程,同时响应N个连接请求
d.复用的多进程I/O模型:启动M个进程,每个进程响应N个连接请求,同时接收M*N个请求3.处理请求:
服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理常用请求Method: GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS
4.访问资源:
服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源
5.构建响应报文:
一旦Web服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中包含有响应状态码、响应首部,如果生成了响应主体的话,还包括响应主体
响应实体:如果事务处理产生了响应主体,就将内容放在响应报文中回送过去。响应报文中通常包括:
描述了响应主体MIME类型的Content-Type首部
描述了响应主体长度的Content-Length
实际报文的主体内容
2)URL重定向:web服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径
3)MIME类型:Web服务器要负责确定响应主体的MIME类型。多种配置服务器的方法可将MIME类型与资源管理起来
6发送响应报文
Web服务器通过连接发送数据时也会面临与接收数据一样的问题。服务器可能有很多条到各个客户端的连接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录连接的状态,还要特别注意对持久连接的处理。对非持久连接而言,服务器应该在发送了整条报文之后,关闭自己这一端的连接。对持久连接来说,连接可能仍保持打开状态,在这种情况下,服务器要正确地计算Content-Length首部,不然客户端就无法知道响应什么时候结束
1.6 http协议保温头部结构
1.6.1 请求报文
1.6.2 响应报文
二、nginx实验
2.1 nginx源码编译
1.将下载好的安装包放置到家目录,可以利用mobaxterm等软件直接拖动复制
2.解压
3.检测环境支持
4.下载所需依赖包
5.开始编译并将编译好文件放入指定位置
6.到指定目录的sbin文件中开启nginx服务
tar zxf nginx-1.24.0.tar.gz #解压 cd nginx-1.24.0 ./configure #检测环境依赖支持 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-pcre --with-stream --with-stream_ssl_module #添加所需依赖 yum install gcc dnf sreach pcre dnf install pcre-devel.x86_64 -y dnf search openssl dnf install openssl-devel.x86_64 -y dnf search zlib dnf install zlib-devel.x86_64 -y /configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-pcre --with-stream --with-stream_ssl_module make #编译 make -j2 #使用两个核心(不建议使用,可能导致内存溢出) make install #是将objs中文件copy到指定位置 cd /usr/local/nginx/ useradd -s /sbin/nologin -M nginx #创建不含家目录的系统用户 id nginx #查看用户情况 ./nginx #开启nginx服务 ps aux | grep nginx #查看进程 netstat -antlupe |grep nginx #查看端口 du -sh nginx #查看文件大小 ./nginx -s stop #停止服务 ./nginx -s reload #重启服务 #.o结尾的都是模块 #减少nginx占用内存 /usr/local/nginx/sbin/nginx -s stop #关闭nginx rm -fr /usr/local/nginx/ #卸载软件 make clean #删除编译后代码 vim auto/cc/gcc #关闭debug功能 #编辑用户环境变量文件 vim ~/.bash_profile #编辑当前用户环境变量文件 source ~/.bash_profile #加载配置使配置生效
2.2 平滑升级及回滚
curl -I 172.25.254.100 #查看版本
vim /root/nginx-1.24.0/src/core/nginx.h #可修改版本名称
wget https://nginx.org/download/nginx-1.26.2.tar.gz #网上下载
tar zxf nginx-1.26.2.tar.gz
tar zxf echo-nginx-module-0.63.tar.gz #提前下载好的模块解压
cd nginx-1.26.2/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --add-module=/root/echo-nginx-module-0.63 --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-pcre --with-stream --with-stream_ssl_module
make #注意,不用make install
cd /usr/local/nginx/sbin
cp nginx nginx.old
\cp -f /root/nginx-1.26.2/objs/nginx /usr/local/nginx/sbin/
kill -USR2 57949 #杀死master进程,只启动新进程,不监听端口
kill -WINCH 57949 #回收worker进程
kill -HUP 57949 #激活旧版本
kill -WICH 58007 #回收新版本master进程
cd /usr/local/nginx/sbin
cp nginx nginx.new
\cp -f nginx.old nginx
kill -9 58007 #杀掉新进程
2.3 nginx命令参数
参数 | 意义 |
-v | 查看版本信息 |
-V | 查看详细信息 |
-t | 检测配置文件 |
-T | 检测并打印 |
-q | 静默模式 |
-s | 发送信号,stop\quit\reopen\reload #reload信号在不关闭进程的情况下,使其重新生效,会生成新的worker,但是master不会重新生成 |
-p | 指定nginx位置 |
-c | 配置文件路径 |
-g | 设置全局指令,注意和配置文件不要同时配置,否则冲突 |
2.4 设定nginx开机启动文件
2.5 全局配置参数优化
2.6 子配置文件
vim /usr/local/nginx/conf/nginx.conf
mkdir -p /usr/local/nginx/conf.d
vim /usr/local/nginx/conf.d/vhost.conf
location 用法 详解
符号 含义 = 用于标准uri前,需要请求字串与uri精确匹配,大小敏感,如果匹配成功就停止向下匹配并立
即处理请求^~ 用于标准uri前,表示包含正则表达式,并且匹配以指定的正则表达式开头
对uri的最左边部分做匹配检查,不区分字符大小写~ 用于标准uri前,表示包含正则表达式,并且区分大小写 ~* 匹配起始于此uri的所有的uri \ 用于标准uri前,表示包含正则表达式并且转义字符。可以将 . * ?等转义为普通符号
2.7 用户认证
2.8 自定义错误页面
2.9 自定义日志
2.10 文件检测
vim /usr/local/nginx/conf.d/vhost.conf
nginx -s reload
rm -fr /data/web/html/index.html
rm -fr /data/web/html/error/
mkdir /data/web/html/error/
echo error default > /data/web/html/error/default.htm
curl www.timinglee.org
2.11 长链接管理
dnf install telnet -y #下载测试工具
vim /usr/local/nginx/conf/nginx.conf
2.12 下载服务器
mkdir /data/web/download
dd if=/dev/zero of=/data/web/download/wfile bs=1M count=100
vim /usr/local/nginx/conf.d/vhost.conf
nginx -s reload
autoindex on | off; #自动文件索引功能,默为off
autoindex_exact_size on | off; #计算文件确切大小(单位bytes),off 显示大概大小(单位K、M),默认on
autoindex_localtime on | off ; #显示本机时间而非GMT(格林威治)时间,默认off
autoindex_format html | xml | json | jsonp; #显示索引的页面文件风格,默认html
limit_rate rate; #限制响应客户端传输速率(除GET和HEAD以外的所有方法),单位
B/s,bytes/second, #默认值0,表示无限制,此指令由
ngx_http_core_module提供
set $limit_rate 4k; #也可以通变量限速,单位B/s,同时设置,此项优级高.
2.13 状态页
vim /usr/local/nginx/conf.d/status.conf
nginx -s reload
Active connections: #当前处于活动状态的客户端连接数
#包括连接等待空闲连接数=reading+writing+waiting
accepts: #统计总值,Nginx自启动后已经接受的客户端请求连接的总数。
handled: #统计总值,Nginx自启动后已经处理完成的客户端请求连接总数
#通常等于accepts,除非有因worker_connections限制等被拒绝的连接
requests: #统计总值,Nginx自启动后客户端发来的总的请求数
2.14 数据压缩
vim /usr/local/nginx/conf/nginx.conf
nginx -s reload
curl --head --compressed 172.25.254.100/big.html
echo hello timinglee > /data/web/html/small.html
du -sh /usr/local/nginx/logs/access.log
cat /usr/local/nginx/logs/access.log
cat /usr/local/nginx/logs/access.log > /data/web/html/big.html
curl --head --compressed 172.25.254.100/big.html
curl --head --compressed 172.25.254.100/small.html
#启用或禁用gzip压缩,默认关闭
gzip on | off;
#压缩比由低到高从1到9,默认为1,值越高压缩后文件越小,但是消耗cpu比较高。基本设定未4或者5
gzip_comp_level 4;
#禁用IE6 gzip功能,早期的IE6之前的版本不支持压缩
gzip_disable "MSIE [1-6]\.";
#gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;
#启用压缩功能时,协议的最小版本,默认HTTP/1.1
gzip_http_version 1.0 | 1.1;
#指定Nginx服务需要向服务器申请的缓存空间的个数和大小,平台不同,默认:32 4k或者16 8k;
gzip_buffers number size;
#指明仅对哪些类型的资源执行压缩操作;默认为gzip_types text/html,不用显示指定,否则出错
gzip_types mime-type ...;
#如果启用压缩,是否在响应报文首部插入“Vary: Accept-Encoding”,一般建议打开
gzip_vary on | off;
#预压缩,即直接从磁盘找到对应文件的gz后缀的式的压缩文件返回给用户,无需消耗服务器CPU
#注意: 来自于ngx_http_gzip_static_module模块
gzip_static on | off;3
2.15 nginx变量
变量可以分为内置变量和自定义变量,内置变量是由nginx模块自带
内置变量
$remote_addr; #存放了客户端的地址,注意是客户端的公网IP
$args; #变量中存放了URL中的所有参数
#例如:https://search.jd.com/Search?keyword=手机&enc=utf-8
#返回结果为: keyword=手机&enc=utf-8
$is_args #如果有参数为? 否则为空
$document_root; #保存了针对当前资源的请求的系统根目录,例如:/webdata/nginx/timinglee.org/lee。
$document_uri; #保存了当前请求中不包含参数的URI,注意是不包含请求的指令
#比如:http://lee.timinglee.org/var?\id=11111会被定义为/var
#返回结果为:/var
$host; #存放了请求的host名称
limit_rate 10240;
echo $limit_rate;
#如果nginx服务器使用limit_rate配置了显示网络速率,则会显示,如果没有设置, 则显示0
$remote_port; #客户端请求Nginx服务器时随机打开的端口,这是每个客户端自己的端口
$remote_user; #已经经过Auth Basic Module验证的用户名
$request_body_file; #做反向代理时发给后端服务器的本地资源的名称
$request_method; #请求资源的方式,GET/PUT/DELETE等
$request_filename; #当前请求的资源文件的磁盘路径,由root或alias指令与URI请求生成的文件绝对路径,
#如:webdata/nginx/timinglee.org/lee/var/index.html
$request_uri; #包含请求参数的原始URI,不包含主机名,相当于:$document_uri?$args,
#例如:/main/index.do?id=20190221&partner=search
$scheme; #请求的协议,例如:http,https,ftp等
$server_protocol; #保存了客户端请求资源使用的协议的版本,例如:HTTP/1.0,HTTP/1.1,HTTP/2.0等
$server_addr; #保存了服务器的IP地址
$server_name; #虚拟主机的主机名
$server_port; #虚拟主机的端口号
$http_user_agent; #客户端浏览器的详细信息
$http_cookie; #客户端的所有cookie信息
$cookie_<name> #name为任意请求报文首部字部cookie的key名
$http_<name> #name为任意请求报文首部字段,表示记录请求报文的首部字段,ame的对应的首部字段名需要为小写,如果有横线需要替换为下划线
#示例:
echo $http_user_agent;
echo $http_host;
$sent_http_<name> #name为响应报文的首部字段,name的对应的首部字段名需要为小写,如果有横线需要替换为下划线,此变量有问题
echo $sent_http_server;
$arg_<name> #此变量存放了URL中的指定参数,name为请求url中指定的参数
echo $arg_id;自定义变量名称和值,使用指令set $variable value;
语法格式:Syntax: set $variable value;
Default: —
Context: server, location, if
2.16 rewrite模块
if
= #比较变量和字符串是否相等,相等时if指令认为该条件为true,反之为false
!= #比较变量和字符串是否不相等,不相等时if指令认为条件为true,反之为false
~ #区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假
!~ #区分大小写字符,判断是否匹配,不满足匹配条件为真,满足匹配条件为假
~* #不区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假
!~* #不区分大小字符,判断是否匹配,满足匹配条件为假,不满足匹配条件为真
-f 和 !-f #判断请求的文件是否存在和是否不存在
-d 和 !-d #判断请求的目录是否存在和是否不存在
-x 和 !-x #判断文件是否可执行和是否不可执行
-e 和 !-e #判断请求的文件或目录是否存在和是否不存在(包括文件,目录,软链接)
#注意:
#如果$变量的值为空字符串或0,则if指令认为该条件为false,其他条件为true。
#nginx 1.0.1之前$变量的值如果以0开头的任意字符串会返回falseset
指定key并给其定义一个变量,变量可以调用Nginx内置变量赋值给key
另外set定义格式为set $key value,value可以是text, variables和两者的组合。break
用于中断当前相同作用域(location)中的其他Nginx配置
与该指令处于同一作用域的Nginx配置中,位于它前面的配置生效
位于后面的 ngx_http_rewrite_module 模块中指令就不再执行
Nginx服务器在根据配置处理请求的过程中遇到该指令的时候,回到上一层作用域继续向下读取配置,该指令可以在server块和locationif块中使用
注意: 如果break指令在location块中后续指令还会继续执行,只是不执行ngx_http_rewrite_module 模块的指令,其它指令还会执行return
return用于完成对请求的处理,并直接向客户端返回响应状态码,比如:可以指定重定URL(对于特殊重定向状态码,301/302等) 或者是指定提示文本内容(对于特殊状态码403/500等),处于此指令后的所有配置都将不被执行,return可以在server、if 和 location块进行配置
return code; #返回给客户端指定的HTTP状态码
return code [text]; #返回给客户端的状态码及响应报文的实体内容
#可以调用变量,其中text如果有空格,需要用单或双引号
return code URL; #返回给客户端的URL地址
2.16.2 rewrite指令
通过正则表达式的匹配来改变URI,可以同时存在一个或多个指令,按照顺序依次对URI进行匹配,rewrite主要是针对用户请求的URL或者是URI做具体处理
rewrite regex replacement [flag];
. #匹配除换行符以外的任意字符
\w #匹配字母或数字或下划线或汉字
\s #匹配任意的空白符
\d #匹配数字
\b #匹配单词的开始或结束
^ #匹配字付串的开始
$ #匹配字符串的结束
* #匹配重复零次或更多次
+ #匹配重复一次或更多次
? #匹配重复零次或一次
(n) #匹配重复n次
{n,} #匹配重复n次或更多次
{n,m} #匹配重复n到m次
*? #匹配重复任意次,但尽可能少重复
+? #匹配重复1次或更多次,但尽可能少重复
?? #匹配重复0次或1次,但尽可能少重复
{n,m}? #匹配重复n到m次,但尽可能少重复
{n,}? #匹配重复n次以上,但尽可能少重复
\W #匹配任意不是字母,数字,下划线,汉字的字符
\S #匹配任意不是空白符的字符
\D #匹配任意非数字的字符
\B #匹配不是单词开头或结束的位置
[^x] #匹配除了x以外的任意字符
[^lee] #匹配除了magedu 这几个字母以外的任意字符
2.16.3 rewrite flag 使用介绍
利用nginx的rewrite的指令,可以实现url的重新跳转,rewrite有四种不同的flag,分别是redirect(临时重定向302)、permanent(永久重定向301)、break和last。其中前两种是跳转型的flag,后两种是代理型跳转型指由客户端浏览器重新对新地址进行请求
代理型是在WEB服务器内部实现跳转
flag 说明redirect;
#临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URL给客户端
#由客户端重新发起请求;使用相对路径,或者http://或https://开头,状态码:302
permanent;
#重写完成后以永久重定向方式直接返回重写后生成的新URL给客户端
#由客户端重新发起请求,状态码:301
break;
#重写完成后,停止对当前URL在当前location中后续的其它重写操作
#而后直接跳转至重写规则配置块之后的其它配置,结束循环,建议在location中使用
#适用于一个URL一次重写
last;
#重写完成后,停止对当前URI在当前location中后续的其它重写操作,
#而后对新的URL启动新一轮重写检查,不建议在location中使用
#适用于一个URL多次重写,要注意避免出现超过十次以及URL重写后返回错误的给用户
2.16.4 rewrite案例: 域名永久与临时重定向
域名的临时的调整,后期可能会变,之前的域名或者URL可能还用、或者跳转的目的域名和URL还会跳转,这种情况浏览器不会缓存跳转,临时重定向不会缓存域名解析记录(A记录),但是永久重定向会缓存。
2.17 判断文件是否存在
mkdir /data/web/html/{test1,test2,break,last} -p
echo test1 > /data/web/html/test1/index.html
echo test2 > /data/web/html/test2/index.html
echo break > /data/web/html/break/index.html
echo last > /data/web/html/last/index.html
vim /usr/local/nginx/conf.d/vars.conf
nginx -s reload
2.18 全栈加密
mkdir /usr/local/nginx/certs
openssl req -newkey rsa:2048 -nodes -sha256 -keyout /usr/local/nginx/certs/timinglee.org.key -x509 -days 365 -out /usr/local/nginx/certs/timinglee.org.crt
2.19 防盗链
mkdir -p /data/web/html/images
2.20 反向代理及动静分离
172.25.254.100
vim /usr/local/nginx/conf.d/vhost.conf
nginx -s reload
172.25.254.10
yum install httpd php -y
systemctl enable --now httpd
systemctl restart httpd
vim /var/www/html/index.php
172.25.254.20
yum install httpd -y
systemctl enable --now httpd
mkdir /var/www/html/static
echo static 172.25.254.20 > /var/www/html/static/index.html
vim /etc/httpd/conf/httpd.conf
2.21 缓存
ab -n1000 -c100 http://www.timinglee.org/static/index.html #压测
2.22 反向代理负载均衡
在http中定义缓存信息
proxy_cache_path /var/cache/nginx/proxy_cache #定义缓存保存路径,proxy_cache会自动创建
levels=1:2:2 #定义缓存目录结构层次
#1:2:2可以生成2^4x2^8x2^8=2^20=1048576个目录
keys_zone=proxycache:20m #指内存中缓存的大小,主要用于存放key和metadata
(如:使用次数)
#一般1M可存放8000个左右的key
inactive=120s #缓存有效时间
max_size=10g; #最大磁盘占用空间,磁盘存入文件内容的缓存空间最大值
#调用缓存功能,需要定义在相应的配置段,如server{...};或者location等
proxy_cache proxycache;
proxy_cache_key $request_uri; #对指定的数据进行MD5的运算做为缓存的key
proxy_cache_valid 200 302 301 10m; #指定的状态码返回的数据缓存多长时间
proxy_cache_valid any 1m; #除指定的状态码返回的数据以外的缓存多长时间,必须设置,否则不会缓存#server支持的parameters如下:
weight=number #设置权重,默认为1,实现类似于LVS中的WRR,WLC等
max_conns=number #给当前后端server设置最大活动链接数,默认为0表示没有限制
max_fails=number #后端服务器的下线条件,当客户端访问时,对本次调度选中的后端服务器连续进行检测多少次,如果都失败就标记为不可用,默认为1次,当客户端访问时,才会利用TCP触发对探测后端服务器健康性检查,而非周期性的探测
fail_timeout=time #后端服务器的上线条件,对已经检测到处于不可用的后端服务器,每隔此时间间隔再次进行检测是否恢复可用,如果发现可用,则将后端服务器参与调度,默认为10秒
backup #设置为备份服务器,当所有后端服务器不可用时,才会启用此备用服务器
down #标记为down状态,可以平滑下线后端服务器
resolve #当server定义的是主机名的时候,当A记录发生变化会自动应用新IP而不用重启Nginxhash KEY [consistent];
#基于指定请求报文中首部字段或者URI等key做hash计算,使用consistent参数,将使用ketama一致性hash算法,适用于后端是Cache服务器(如varnish)时使用,consistent定义使用一致性hash运算,一致性hash基于取模运算
hash $request_uri consistent; #基于用户请求的uri做hash
hash $cookie_sessionid #基于cookie中的sessionid这个key进行hash调度,实现会话绑定
ip_hash; #源地址hash调度方法,基于的客户端的remote_addr(源地址IPv4的前24位或整个IPv6地址)做hash计算,以实现会话保持
least_conn; #最少连接调度算法,优先将客户端请求调度到当前连接最少的后端服务器,相当于LVS中的WLC
2.23 编译php
yum install -y bzip2 systemd-devel libxml2-devel sqlite-devel libpng-devel libcurl-devel oniguruma-devel
cd php-3.8.9
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-curl --with-iconv --with-mhash --with-zlib --with-openssl --enable-mysqlnd --with-mysqli --with-pdo-mysql --disable-debug --enable-sockets --enable-soap --enable-xml --enable-ftp --enable-gd --enable-exif --enable-mbstring --enable-bcmath --with-fpm-systemd
yum install -y bzip2 systemd-devel libxml2-devel sqlite-devel libpng-devel libcurl-devel
cd /mnt/
dnf list oniguruma
wget https://mirrors.aliyun.com/rockylinux/9.4/devel/x86_64/kickstart/Packages/o/oniguruma-devel-6.9.6-1.el9.5.x86_64.rpm
dnf install oniguruma-devel-6.9.6-1.el9.5.x86_64.rpm
make && make install
cd /usr/local/php/etc/
cp -p php-fpm.conf.default php-fpm.conf
vim php-fpm.conf #图1
cd /usr/local/php/etc/php-fpm.d
cp -p www.conf.default www.conf
vim www.conf
cd /root/php-8.3.9
cp php.ini-production /usr/local/php/etc/php.ini
cd /usr/local/php/etc
vim php.ini #图2
cd /root/php-8.3.9/sapi/fpm
cp php-fpm.service /lib/systemd/system/
vim /lib/systemd/system/php-fpm.service #图3
systemctl daemon-reload
systemctl start php-fpm
netstat -antlupe | grep php
cd /usr/local/php/etc/php-fpm.d/
vim www.conf
systemctl restart php-fpm
2.24 PHP 使用
mkdir -p /data/web/php
vim ~/.bash_profile #添加环境变量
source ~/.bash_profile
vim /data/web/php/index.php
vim /usr/local/nginx/conf/fastcgi.conf
cd /usr/local/nginx/conf
cd ..
mkdir conf.d
vim conf/nginx.conf
cd conf.d
vim vhost.conf
2.25 缓存优化
dnf install autoconf
phpize
./configure && make && make install
cd /usr/local/php/lib/php/extensions/no-debug-non-0831/
systemctl restart php-fpm.service
dnf install memcached -y
vim /etc/sysconfig/memcached
systemctl start memcached.service
netstat -antlupe | grep mem
cp example.php memcache.php /data/web/php/
vim /data/web/php/memcache.php
vim /usrs/local/nginx/conf.d/vhost.conf
2.26 nginx二次开发
killall -9 nginx
tar zxf openresty-1.25.3.1.tar.gz
cd openresty-1.25.3.1
./configure --prefix=/usr/local/openresty --with-http_realip_module --with-http_sub_module --with-http_gzip_static_module --with-http_stub_status_module --without-http_memcached_module --with-stream --with-stream_ssl_module --with-pcre --with-http_ssl_module
gmake && gmake install
vim ~/.bash_profile
source ~/.bash_profile
openresty