提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
一、PHP源码编译
仍然是编译三部曲
420 ./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-inline-optimization --enable-xml --enable-ftp --enable-gd --enable-exif --enable-mbstring --enable-bcmath --with-fpm-systemd
421 make
422 make install
编译完成之后我们进行启动
首先将php服务复制到系统默认的启动目录中
[root@server1 fpm]# cp php-fpm.service /usr/lib/systemd/system/
然后将default文件复制为系统能够识别的conf文件
[root@server1 etc]# cp php-fpm.conf.default php-fpm.conf
[root@server1 php-fpm.d]# cp www.conf.default www.conf
同样将php.ini复制到系统的默认目录下
[root@server1 php-7.4.12]# cp php.ini-production /usr/local/php/etc/php.ini
关闭php服务的下面这个选项,因为开启之后会将许多目录设置为只读,由于系统要写入文件来开启服务,所以我们要给他添加权限,不能让它只读
# Mounts the /usr, /boot, and /etc directories read-only for processes invoked by this unit.
#ProtectSystem=full
最后启动服务,查看9000端口,发现存在,说明服务已经启动
[root@server1 system]# systemctl start php-fpm.service
[root@server1 system]# netstat -antlp | grep :9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 31598/php-fpm: mast
[root@server1 system]# vim php-fpm.service
二、nginx和 PHP整合(高速缓存)
首先对nginx.conf中的内容进行修改
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;
}
然后再在html下新建一个index.php,在里边写入函数,我们在浏览器访问我们这个页面就可以看到相应的内容
[root@server1 html]# cat index.php
<?php
phpinfo()
?>
我们新加入一个memcache模块,当我们想要使用phpize脚本的时候会发现用不了,但是它php里边存在,这是因为系统的环境变量没有检测到它,我们就要修改环境变量
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin:/usr/local/php/bin
export PATH
查看环境变量,看到加入成功就可以继续
[root@server1 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin:/usr/local/php/bin
memcache的作用是做高速缓存,因为它是运行在内存中,所以我们要是从memcache中取数据,那么速度会比从数据库中取数据快
当我们进行压测时候会发现,这种方式来处理数据效率会非常高,几乎没有报错出现
Document Path: /example.php
Document Length: 116 bytes
Concurrency Level: 10
Time taken for tests: 0.463 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 279000 bytes
HTML transferred: 116000 bytes
Requests per second: 2160.47 [#/sec] (mean)
Time per request: 4.629 [ms] (mean)
Time per request: 0.463 [ms] (mean, across all concurrent requests)
Transfer rate: 588.64 [Kbytes/sec] received
传统缓存策略与高效缓存策略的差异
传统缓存策略是由客户端发送请求之后交给nginx,以fastcgi_pass的方式发送给php-fpm来处理,处理完成之后再回到nginx并返回客户端,这种方式会造成数据的阻塞,因为nginx是高并发,所以它会不断地发送数据,但是php-fpm处理速度有限,所以在其中会造成阻塞;
而高效缓存策略就不一样了,它是由nginx完全连接了客户端和memcache,在第一次数据请求完成访问之后,再次访问便会非常快,而且缓存的速度完全由nginx掌握,但是前提是要自行添加几个模块
由于我们需要添加两个模块,所以我们不妨停掉原来的nginx,安装openresty,它就包含了我们需要的模块,和安装nginx一样,configure、make、make install,完了之后我们可以将原来目录下的配置文件cp过来,就不用再重新配置
然后我们在现有的nginx.conf中添加以下内容,目的是设置负载均衡以及以高速缓存的方式访问
location /memc {
internal;
memc_connect_timeout 100ms;
memc_send_timeout 100ms;
memc_read_timeout 100ms;
set $memc_key $query_string;
set $memc_exptime 300;
memc_pass memcache;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
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;
}
进行重载之后,我们测试后发现,缓存数据的速度比之前加速缓存都快了三倍多,并且没有出现错误
Concurrency Level: 10
Time taken for tests: 0.116 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Non-2xx responses: 1000
Total transferred: 315000 bytes
HTML transferred: 159000 bytes
Requests per second: 8625.30 [#/sec] (mean)