文章目录

  • php源码编译
  • PHP-FPM
  • 构建传统缓存策略
  • 构建高速缓存ngixn ->memcache
  • nginx日志可视化


php源码编译

下载安装包解压安装php

[root@server1 ~]# yum install -y bzip2
[root@server1 ~]# tar jxf php-7.4.12.tar.bz2

安装依赖项,编译后安装

[root@server1 ~]# yum install -y systemd-devel libxml2-devel.x86_64 sqlite-devel libcurl-devel libpng-devel oniguruma-devel-6.8.2-1.el7.x86_64.rpm make 
[root@server1 php-7.4.12]# ./configure --prefix=/usr/lnmp/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-inline-optimization --enable-xml --enable-ftp --enable-gd --enable-exif --enable-mbstring  --enable-bcmath --with-fpm-systemd
[root@server1 php-7.4.12]# make
[root@server1 php-7.4.12]# make install

预编译成功

nginx 缓存token nginx 缓存策略_php

PHP-FPM

PHP-FPM是一个实现了Fastcgi的程序,PHP-FPM的管理对象是php-cgi,被PHP官方收购了,后来PHP内核集成了PHP-FPM之后就方便多了,使用enalbe-fpm这个编译参数即可
PHP-CGI
php-cgi是解释PHP脚本的程序,只是个CGI程序,他自己本身只能解析请求,返回结果,不会进程管理

拷贝php-fpm配置文件,修改php-fpm启动文件

[root@server1 /mnt/php-7.4.12]# cd /usr/local/php/etc/
[root@server1 /usr/local/php/etc]# cp php-fpm.conf.default php-fpm.conf
[root@server1 /usr/local/php/etc]# vim php-fpm.conf

去掉注释

nginx 缓存token nginx 缓存策略_html_02

[root@server1 etc]# cd php-fpm.d/
[root@server1 php-fpm.d]# cp www.conf.default www.conf

编辑php核心配置更改时区

[root@server1 php-fpm.d]# cd 
[root@server1 ~]# cd php-7.4.12/
[root@server1 php-7.4.12]# cp php.ini-production /usr/local/php/etc/php.ini
[root@server1 php-7.4.12]# vim /usr/local/php/etc/php.ini

nginx 缓存token nginx 缓存策略_php_03

拷贝解压源码编译包目录中php-fpm.service的到系统systemd下,通过systemctl来控制php

[root@server1 ~]#cp /root/php-7.4.12/sapi/fpm/php-fpm.service  /usr/lib/systemd/system/
[root@server1 php-7.4.12]# vim /usr/lib/systemd/system/php-fpm.service

注释掉这一行内容

nginx 缓存token nginx 缓存策略_html_04


重载服务,启动

[root@server1 php-7.4.12]# systemctl daemon-reload
[root@server1 php-7.4.12]# systemctl enable --now php-fpm.service

修改nginx的配置文件,打开php

[root@server1 php-7.4.12]# vim /usr/local/nginx/conf/nginx.conf

nginx 缓存token nginx 缓存策略_缓存_05

在nginx中写入php测试页面

[root@server1 php-7.4.12]# vim /usr/local/nginx/html/index.php
[root@server1 php-7.4.12]# cat /usr/local/nginx/html/index.php
<?php
phpinfo()
?>
[root@server1 php-7.4.12]#

重载nginx,用浏览器访问

nginx 缓存token nginx 缓存策略_nginx 缓存token_06

构建传统缓存策略

用户访问流程: client -> nginx -> fastcgi_pass -> php-fpm:9000 -> memcached:11211

nginx 缓存token nginx 缓存策略_nginx_07

下载并解压memcache

[root@server1 ~]# tar zxf memcache-4.0.5.2.tgz 
[root@server1 ~]# cd memcache-4.0.5.2/
[root@server1 memcache-4.0.5.2]# ls
cloudbuild.yaml  config.w32  Dockerfile   memcache.php  tests
config9.m4       CREDITS     example.php  php7
config.m4        docker      LICENSE      README
[root@server1 memcache-4.0.5.2]#

安装依赖性

[root@server1 memcache-4.0.5.2]#  yum install -y autoconf automake

phpize命令是准备php扩展安装的编译环境的。用于手动编译安装php扩展,在php的安装目录下有phpize,需要先加入全局变量

[root@server1 memcache-4.0.5.2]# cd /usr/local/lnmp/php/bin/
[root@server1 bin]# ls
phar  phar.phar  php  php-cgi  php-config  phpdbg  phpize
[root@server1 bin]# vim ~/.bash_profile 
[root@server1 bin]# source ~/.bash_profile

nginx 缓存token nginx 缓存策略_nginx_08

cd

[root@server1 ~]# cd memcache-4.0.5.2/
[root@server1 memcache-4.0.5.2]# phpize
[root@server1 memcache-4.0.5.2]# ls

nginx 缓存token nginx 缓存策略_html_09

预编译,及安装

[root@server1 memcache-4.0.5.2]# ./configure --enable-memcache
[root@server1 memcache-4.0.5.2]# make 
[root@server1 memcache-4.0.5.2]# make install

修改php.ini主配置文件,加入extension=memcache模块

[root@server1 memcache-4.0.5.2]# vim /usr/local/lnmp/php/etc/php.ini

nginx 缓存token nginx 缓存策略_缓存_10


查看php的cache模块,添加成功

nginx 缓存token nginx 缓存策略_nginx 缓存token_11

拷贝php的发布样本目录到nginx的发布目录

[root@server1 memcache-4.0.5.2]# cp example.php memcache.php /usr/local/nginx/html/

安装memcached软件,启用memcached服务器,重载php-fpm

[root@server1 memcache-4.0.5.2]# yum install -y memcached
[root@server1 memcache-4.0.5.2]# systemctl start memcached
[root@server1 memcache-4.0.5.2]# systemctl reload php-fpm.service

访问测试页面

nginx 缓存token nginx 缓存策略_nginx 缓存token_12


编辑memcache.php,修改信息

[root@server1 memcache-4.0.5.2]# cd /usr/local/nginx/html
[root@server1 html]# vim memcache.php

nginx 缓存token nginx 缓存策略_nginx_13


访问管理页面,输入自己修改的账号密码

nginx 缓存token nginx 缓存策略_nginx_14


nginx 缓存token nginx 缓存策略_缓存_15


对php测试页面做压测试,当多次访问此时页面,只有第一次是从后端拿的,之后都是从缓存里拿的,所以缓存命中率会越来越高

nginx 缓存token nginx 缓存策略_nginx 缓存token_16

构建高速缓存ngixn ->memcache

nginx 缓存token nginx 缓存策略_nginx_17


构建新性的访问流程:client -> nginx -> memcache

传统缓存是php从缓存拿,响应时间由php决定,这样直接从nginx访问到缓存memcache,查看是否具有缓存,没有缓存再走php处理过程。减少了php的处理过程,加快了速率。

设置openresty里的nginx和memcahe连接
下载openresty安装包,解压编译和安装

[root@server1 ~]# tar zxf openresty-1.19.3.1.tar.gz
[root@server1 ~]# cd openresty-1.19.3.1
[root@server1 openresty-1.19.3.1]# ./configure
[root@server1 openresty-1.19.3.1]# make
[root@server1 openresty-1.19.3.1]# make install

拷贝文件
关闭以前的nginx,为方便设置php部分的文件,直接拷贝以前nginx的配置文件到openresty下的配置文件下

[root@server1 openresty-1.19.3.1]# nginx -s stop 
[root@server1  openresty-1.19.3.1] cp /usr/local/nginx/conf/nginx.conf   /usr/local/openresty/nginx/conf/
cp: overwrite '/usr/local/openresty/nginx/conf/nginx.conf'? y              
[root@ server1 conf] cp /usr/local/nginx/html/index.php /usr/local/openresty/nginx/html/

修改配置文件,添加缓存模块;keepalive 512 保持512个不立即关闭的连接用于提升性能

[root@server1 openresty-1.19.3.1]# vim /usr/local/openresty/nginx/conf/nginx.conf

nginx 缓存token nginx 缓存策略_nginx_18


添加缓存具体配置

nginx 缓存token nginx 缓存策略_nginx_19

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;
        }

当所请求的uri以“.php”结尾时,首先到memcache中查询有没有以nginx 缓存token nginx 缓存策略_html_20args为key的数据,

如果有则直接返回;否则,执行location的逻辑,

如果返回的http状态码为200,则在输出前以nginx 缓存token nginx 缓存策略_html_20args为key,将输入结果存入memcache。

nginx 缓存token nginx 缓存策略_php_22


注释掉之前的memcache模块

location ~ \.php$ {
            set $key $uri$args;
            srcache_fetch GET /memc $key;
            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;
        }

打开这个新的nginx做压力测试
没有失败访问

[root@server1 html]# /usr/local/openresty/nginx/sbin/nginx
[root@erqian ~]# ab -c10 -n1000 http://172.25.1.1/example.php

nginx 缓存token nginx 缓存策略_nginx_23

nginx日志可视化

GoAccess是一个实时网络日志分析器和交互式查看器,可以在浏览器中运行,动态可视化服务器日志并提供统计信息

下载GoAccess源码/编译和安装:
安装依赖性

[root@server1 ~]# yum install GeoIP-devel-1.5.0-13.el7.x86_64.rpm -y
[root@server1 ~]#  yum install ncurses-devel.x86_64 -y

j进入解压后的文件夹,预编译/编译/安装

[root@server1 ~]# cd goaccess-1.4/
[root@server1 goaccess-1.4]# ./configure --enable-utf8 --enable-geoip=legacy
[root@server1 goaccess-1.4]# make
[root@server1 goaccess-1.4]# make install

进入nginx日志目录中,执行goaccess监控语句,并打入后台持续运行,之前配置的高速缓存nginx会影响本实验,应先关闭。

[root@server1 ~]# cd /usr/local/nginx/logs/
[root@server1 logs]# goaccess access.log -o /usr/local/nginx/html/report.html --log-format=COMBINED --real-time-html &

nginx 缓存token nginx 缓存策略_nginx_24


进入浏览器中访问,即可可视化日志文件,

http://172.25.1.1/report.html

nginx 缓存token nginx 缓存策略_nginx 缓存token_25


进行压测,会发现页面随着访问量的增加实施更新

[root@erqian ~]# ab -c 10 -n 5000 http://172.25.1.1/index.php

nginx 缓存token nginx 缓存策略_nginx 缓存token_26