目录
php实验步骤
安装php
1. tar jxf php-7.4.13.tar.bz2
2. cd php-7.4.13
3. ./configure --prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/php/etc --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-iconv --with-curl --with-mhash --with-zlib --with-openssl --enable-mysqlnd --with-mysqli --with-pdo-mysql --disable-debug --enable-sockets --enable-soap --enable-inline-optimization --enable-xml --enable-ftp --enable-gd --enable-exif --enable-mbstring --enable-bcmath --with-fpm-systemd
4. 解决报错
yum install systemd-devel -y
yum install libxml2-devel -y
yum install sqlite-devel -y
yum install libcurl-devel -y
yum install libpng-devel -y
在阿里巴巴镜像站下载oniguruma和oniguruma-devel包后yum install oniguruma-* -y
5.再次./configure
./configure --prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/php/etc --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-iconv --with-curl --with-mhash --with-zlib --with-openssl --enable-mysqlnd --with-mysqli --with-pdo-mysql --disable-debug --enable-sockets --enable-soap --enable-inline-optimization --enable-xml --enable-ftp --enable-gd --enable-exif --enable-mbstring --enable-bcmath --with-fpm-systemd
6. make
7. make install
oniguruma这个包本地没有,需要在阿里巴巴开源镜像站中下载。
发现安装成功
修改.bash_profile
拷贝php-fpm配置文件
1.复制开发环境并重命名
cd /root/php-7.4.13
cp php.ini-production /usr/local/lnmp/php/etc/php.ini
2.复制php-fpm.service
cd /root/php-7.4.13/sapi/fpm
cp php-fpm.service /etc/systemd/system
3.复制php-fpm.conf.default
cd /usr/local/lnmp/php/etc
cp php-fpm.conf.default php-fpm.conf
vim php-fpm.conf
4.复制www.conf.default
cd /usr/local/lnmp/php/etc/php-fpm.d
cp www.conf.default www.conf
5.创建php-fpm.log
cd /usr/local/lnmp/php/var/log
touch php-fpm.log
chmod 777 php-fpm.log
6.修改php-fpm启动文件并启动php-fpm
vim /etc/systemd/system/php-fpm.service
ProtectSystem=false #默认php-fpm启动时只读挂载/usr目录
systemctl daemon-reload
systemctl start php-fpm
7.查看进程
systemctl status php-fpm
ps ax
将pid打开
查看进程
创建一个动态页面
1.新建一个index.php
cd /usr/local/lnmp/nginx/html
vim index.php
<?php
phpinfo()
?>
2.修改nginx配置文件
vim /usr/local/lnmp/nginx/conf/nginx.conf
修改nginx配置文件:
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf;
}
3.重启nginx
nginx -t
nginx -s reload
4.在浏览器中访问测试
修改nginx.conf文件,否则php无法生效。
这个配置的意思是 在浏览器中访问的.php文件,实际读取的是 $document_root(网站根目录)下的.php文件 。也就是说当访问127.0.0.1/index.php的时候,需要读取网站根目录下面的index.php文件,如果没有配置这一配置项时,nginx不会去网站根目录下访问.php文件,所以返回空白。
在浏览器中测试
memcache实验步骤
memcache简介
- memcache是什么?
(1)memcache就是一个数据库,但是数据存在内存中。常用来做缓存服务器,将从数据库查询的数据缓存起来,减少数据库查询,加快查询速度。
(2)memcache通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。memcache主要用于分担数据库的压力,memcache将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。 - 明确使用场景:缓存服务器
- 适合存储的数据:
(1)访问比较频繁的数据,安全性差的数据,丢失无所谓的数据。
(2)数据更新比较频繁的数据,比如用户的在线状态。
(3)数据的单个键值不能太大,不要超过1MB数据。
传统缓存机制
nginx - php - memcache 协同下的 请求的完整访问过程:
(1)用户发送http请求报文给nginx服务器
(2)nginx会根据文件url和后缀来判断请求
(3)如果请求的是静态内容,nginx会将结果直接返回给用户; 如果请求的是动态内容,nginx会将请求交给 fastcgi客户端 ,通过 fastcgi_pass 将这个请求发送给 php-fpm
(4)php-fpm 会将请求交给 wrapper
(5)wrapper 收到请求会生成新的线程调用php动态程序解析服务器
(6)memcache服务器先检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作;如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中。每次更新数据库的同时更新memcached中的数据,保证一致性;
(7)php会将查询到的结果交给nginx
(8)nginx会生成一个响应报文返还给用户
部署阶段
1.解压memcache包
tar zxf memcache-4.0.5.2.tgz
cd memcache-4.0.5.2
2.安装autoconf
yum install -y autoconf
phpize #主要作用是检测php的环境还有就是在特定的目录生成相应的configure文件
./configure
3.make
4.make install
5.配置高速缓存
cd /usr/local/lnmp/php/lib/php/extensions/no-debug-non-zts-20190902/
ls
vim php.ini
extension=memcache.so
6.重启php-fpm服务
systemctl reload php-fpm
php -m | grep memcache
7.安装缓存器服务
yum install -y memcached
8.开启缓存器服务
systemctl enable --now memcached
9.测试
netstat -antlp | grep memcache #检测11211端口
测试阶段
1.复制memcache目录下文件到nginx发布目录
cd /root/memcache-4.0.5.2
cp example.php memcache.php /usr/local/nginx/html
2.修改刚拷贝到nginx发布目录中的文件,其中example.php不修改,只修改memcache.php
cd /usr/local/nginx/html
vim memcache.php
3.测试
要保证nginx开启,php-fpm服务开启
开始测试
进入监控页面
当访问example.php时实际上访问的是memcache(多次刷新example.php页面保持不变),此时memcache的命中率超高,这个缓存可以降低php的开销。
效率对比
传统memcache机制与没有缓存机制对比测试
1.先压测通过memcache缓存访问php文件,可以看到速度很快,很流畅,并且没有访问失败。
2.接下来测试不通过memcache,直接访问本地index.php文件
加大测试量
测试不通过memcache
速度变慢,还有失败请求
增大测试量
构建nginx高速缓存(优化传统memcache)
- 传统缓存问题所在: nginx特点:高并发,高性能。但是php动态资源请求是由外部的php处理,至于什么时候能处理完成,是由php决定,不由nginx决定。所以,最大的缺点是会造成nginx阻塞。
- 高速缓存原理: 客户端通过http协议访问nginx(只能处理静态,动态php资源会调用php-pfm)nginx调用php进行处理,php处理完成后将结果返回给nginx,而nginx内部恰好有memcache进行缓存,当有相同请求进来时,nginx就直接可以将结果返回给客户端,明显会有加速的过程,ngingx也不会被阻塞。
openresty的安装
- memc模块扩展了nginx标准的memcache模块,增加了set、add、delete等memcache命令,而srcache则是为location增加了透明的基于subrequest的缓存层。两者配合使用,可以实现上面提到的高效缓存机制。但是,原生的nginx并不带memc模块和srcache模块,一般情况下还需要下载两个模块并重新编译nginx。
- OpenResty(自带memc、srcache模块)是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
- OpenResty 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。
准备:将nginx停掉
1.下载repo文件
wget https://openresty.org/package/rhel/openresty.repo
mv openresty.repo /etc/yum.repos.d
2.检查可更新的程序并安装openresty
yum check-update
yum install -y openresty
3.修改配置文件
cd /usr/local/openresty/nginx/conf
vim nginx.conf
4.新建一个php文件
vim index.php
<?php
phpinfo()
?>
5.开启openresty
6.测试
配置高速缓存
1.修改配置文件
cd /usr/local/openresty/nginx/conf
vim nginx.conf
upstream memcache { #upstream定义有多少个memcache,目前只有一个
server 127.0.0.1:11211;
keepalive 512; #保持512个不立即关闭的连接用于提升性能
}
location /memc {
internal; #表示只接受内部访问
memc_connect_timeout 100ms;
memc_send_timeout 100ms;
memc_read_timeout 100ms;
set $memc_key $query_string; #使用内置的$query_string来作为key
set $memc_exptime 300; #表示缓存失效时间
memc_pass memcache;
}
location ~ \.php$ {
set $key $uri$args;
srcache_fetch GET /memc $key; #先去找memcache,定义的url是/memc。找不到的话去fastcgi找,如果返回值为200是正常的,则将数据缓存到memcache中。
srcache_store PUT /memc $key;
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf;
}
2.重启服务
systemctl reload openresty
3.压力测试
cd /usr/local/openresty/nginx/html
cp /usr/local/nginx/html/example.php .
在server4上测试
ab -c100 -n 10000 http://www.lyueyue.org/example.php
不使用openresty缓存速度会慢