文章目录
- 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
预编译成功
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
去掉注释
[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
拷贝解压源码编译包目录中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
注释掉这一行内容
重载服务,启动
[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中写入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,用浏览器访问
构建传统缓存策略
用户访问流程: client -> nginx -> fastcgi_pass -> php-fpm:9000 -> memcached:11211
下载并解压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
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
预编译,及安装
[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
查看php的cache模块,添加成功
拷贝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
访问测试页面
编辑memcache.php,修改信息
[root@server1 memcache-4.0.5.2]# cd /usr/local/nginx/html
[root@server1 html]# vim memcache.php
访问管理页面,输入自己修改的账号密码
对php测试页面做压测试,当多次访问此时页面,只有第一次是从后端拿的,之后都是从缓存里拿的,所以缓存命中率会越来越高
构建高速缓存ngixn ->memcache
构建新性的访问流程: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
添加缓存具体配置
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中查询有没有以args为key的数据,
如果有则直接返回;否则,执行location的逻辑,
如果返回的http状态码为200,则在输出前以args为key,将输入结果存入memcache。
注释掉之前的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日志可视化
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 &
进入浏览器中访问,即可可视化日志文件,
http://172.25.1.1/report.html
进行压测,会发现页面随着访问量的增加实施更新
[root@erqian ~]# ab -c 10 -n 5000 http://172.25.1.1/index.php