lnmp 五之nginx结合php(传统缓存、高速缓存openresty)

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的安装

rehl安装步骤参考

  • 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缓存速度会慢
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值