LAMP架构:PHP的安装部署及nginx高速缓存

一、php源码编译

  PHP是动态语言,先编译mysql还是php都可以。以前的版本都是先编译数据库,然后再编译php,因为以前版本的php在编译的时候需要mysql的开发库,现在新版本不需要,从php5.4开始用原生的mysqlnd驱动,mysqlnd驱动是php本身自带的。因为是php自带的原生驱动,相当于调用自己内部的变量,如果是plugin的方式,需要额外的内存开销,至少比原先节省40%的内存开销,而且性能更快。

源码编译安装
[root@server5 ~]# yum install -y bzip2 
[root@server5 ~]# tar jxf php-7.4.12.tar.bz2
[root@server5 ~]# cd php-7.4.12
[root@server5 php-7.4.12]# ./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

解决依赖性
[root@server5 php-7.4.12]# yum install -y systemd-devel.x86_64
[root@server5 php-7.4.12]# yum install -y libxml2-devel.x86_64
[root@server5 php-7.4.12]# yum install -y sqlite-devel.x86_64
[root@server5 php-7.4.12]# yum install -y libcurl-devel.x86_64
[root@server5 php-7.4.12]# yum install -y libpng-devel.x86_64

[root@server5 ~]# yum install -y  oniguruma-6.8.2-1.el7.x86_64.rpm oniguruma-devel-6.8.2-1.el7.x86_64.rpm
上面这两个包可以去阿里云下载

在这里插入图片描述

确保系统没有安装其他版本的php,确定不要安装任何系统原有的php版本,当系统上共存多个版本时会容易报错,系统是允许多个版本共存的,比如python可以通过虚拟环境

在这里插入图片描述安装bzip2解压软件,并解压安装包
在这里插入图片描述在这里插入图片描述

fpm介绍
FPM(FastCGI Process Manager)是PHP FastCGI运行模式的一个进程管理器,从它的定义可以看出,FPM的核心功能是进程管理

fastcgi与cgi的区别参考1
fastcgi与cgi的区别参考2

apache是以cgi的方式调用的,是静态编译的没有后台程序,apache需要时调用开启一个进程,处理完之后关闭释放。而php的fastcgi模式会始终处于后台,cgi与fastcgi的最大区别是fastcgi有后台进程时重监听一个端口。
apache和php是动态编译的,Nginx是静态编译的,Nginx重新编译时需要将之前的所有参数都加上。在php中,前端需要的模块太多了,后续需要加模块的话,只需要编译这个模块就可以了
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述

二、启动php,并于nginx整合

1.添加到环境变量

[root@server5 php]# vim ~/.bash_profile 
PATH=$PATH:$HOME/bin:/usr/local/php
[root@server5 php]# source ~/.bash_profile
[root@server5 bin]# which php

在这里插入图片描述在这里插入图片描述

2.修改配置文件,启动php

复制主程配置文件
[root@server5 etc]# pwd
/usr/local/php/etc
[root@server5 etc]# cp php-fpm.conf.default php-fpm.conf

修改配置文件
[root@server5 etc]# vim php-fpm.conf

复制配置文件
[root@server5 etc]# cd php-fpm.d/
[root@server5 php-fpm.d]# ls
www.conf.default
[root@server5 php-fpm.d]# cp www.conf.default www.con

复制源码路径下的生产环境,是php的主配置文件
[root@server5 php-fpm.d]# cd
[root@server5 ~]# cd php-7.4.12
[root@server5 php-7.4.12]# ls
[root@server5 php-7.4.12]# cp php.ini-production /usr/local/php/etc/php.ini

修改主配置文件,修改时区
[root@server5 ~]# cd /usr/local/php/etc/
[root@server5 etc]# vim php.ini
date.timezone = Asia/Shanghai

复制源码目录下的启动文件到/usr/lib/systemd/system/,并修改
[root@server5 fpm]# pwd
/root/php-7.4.12/sapi/fpm
[root@server5 fpm]# cp php-fpm.service /usr/lib/systemd/system/
[root@server5 fpm]# vim /usr/lib/systemd/system/php-fpm.service
#ProtectSystem=full		将该行注释

启动php
[root@server5 fpm]# systemctl start php-fpm

复制主程配置文件

在这里插入图片描述修改配置文件
在这里插入图片描述

在这里插入图片描述
复制配置文件,此文件不修改内容
在这里插入图片描述php-fpm.d是include目录,include目录:存放的调用系统资源的接口文件,进程是以动态的方式启动,监听9000端口

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
复制源码路径下的生产环境,是php的主配置文件,上面与fpm有关的是启动文件

在这里插入图片描述修改主配置文件

在这里插入图片描述
在这里插入图片描述
复制源码目录下的启动文件到/usr/lib/systemd/system/,并修改

fpm介绍
FPM(FastCGI Process Manager)是PHP FastCGI运行模式的一个进程管理器,从它的定义可以看出,FPM的核心功能是进程管理

在这里插入图片描述

在这里插入图片描述

3.测试php:通过整合nginx

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述了解fastcgi.conf文件的作用
fastcgi.conf参数
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

测试
在这里插入图片描述

三、php功能模块的扩展

在这里插入图片描述

php添加memcache功能模块

软件下载地址,下载的源码
http://pecl.php.net/package/memcache

下载软件源码安装包
[root@server5 ~]# wget http://pecl.php.net/get/memcache-4.0.5.2.tgz
解压安装包
[root@server5 ~]# tar zxf memcache-4.0.5.2.tgz 
执行命令,生成configure文件
[root@server5 ~]# cd memcache-4.0.5.2
[root@server5 memcache-4.0.5.2]# yum install -y autoconf
[root@server5 memcache-4.0.5.2]# phpize

编译
[root@server5 memcache-4.0.5.2]# ./configure  --enable-memcache
[root@server5 memcache-4.0.5.2]# make
会找到php编译路径里边带的所有相应的开发包
[root@server5 memcache-4.0.5.2]# make install

修改配置文件声明memcache模块,使之生效
[root@server5 no-debug-non-zts-20190902]# cd /usr/local/php/etc/
[root@server5 etc]# ls
php-fpm.conf  php-fpm.conf.default  php-fpm.d  php.ini
[root@server5 etc]# vim php.ini
extension=memcache
[root@server5 etc]# systemctl reload php-fpm
[root@server5 etc]# php -m | grep memcache

拷贝测试文件进行测试
[root@server5 ~]# cd
[root@server5 ~]# cd memcache-4.0.5.2
[root@server5 memcache-4.0.5.2]# cp example.php memcache.php /usr/local/nginx/html/
[root@server5 memcache-4.0.5.2]# cd /usr/local/nginx/html/
[root@server5 html]# ls
[root@server5 html]# vim memcache.php 
define('ADMIN_USERNAME','admin');       // Admin Username
define('ADMIN_PASSWORD','westos');      // Admin Password
define('DATE_FORMAT','Y/m/d H:i:s');
define('GRAPH_SIZE',200);
define('MAX_ITEM_DUMP',50);

$MEMCACHE_SERVERS[] = '172.25.254.15:11211'; // add more as an array
#$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array

下载memcache守护进程,并开启服务
[root@server5 html]# yum install -y memcached
[root@server5 html]# systemctl start memcached

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述修改配置文件声明memcache模块,使之生效
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述拷贝测试文件,修改设置并进行测试

在这里插入图片描述

在这里插入图片描述在这里插入图片描述memcache.php页面
在这里插入图片描述
在这里插入图片描述example.php页面
在这里插入图片描述在这里插入图片描述在这里插入图片描述
压力测试
处理机制:client ----> nginx:80 *.php ----->phpfpm:9000---->nginx---->client
一旦当nginx将请求交给phpfpm后,客户端在这个过程中是阻塞的,它要等phpfpm处理完之后返回nginx,最后交给客户端,这是一个反向代理机制。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、Openresty构建nginx高速缓存

原生的nginx要做高速缓存,需要增加一些模块:memc-nginx和srcache-nginx模块,srcache模块可以控制多种缓存类型,memc只是其中一种。因为原生的nginx两个模块都没有,而openresty集成了nginx的各种模块。Openresty里面有nginx模块,也有缓存模块,所以要用高速缓存,可以通过Openresty里面的nginx实现。就不需要从网上下载额外的模块,再重新编译nginx使之生效,因为Openresty自带这些模块。Openresty就是用的原生的nginx而且还集成了很多常用的模块。

1.OpenResty简介

  OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
  OpenResty通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。
  OpenResty 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。
OpenResty XRay 分析和解决 B 站重大线上事故

2.OpenResty的技术和优势

OpenResty技术:

Nginx: 一个免费的、开源的、高性能的 HTTP 服务器和反向代理,也是一个电子邮件(IMAP/POP3/SMTP)代理服务器。有关Nginx的介绍,可以查看这篇《Nginx架构原理科普》。
Lua: 一种轻量、小巧、可移植、快速的脚本语言;LuaJIT即时编译器会将频繁执行的Lua代码编译成本地机器码交给CPU直接执行,执行效率更高,OpenResty会默认启用LuaJIT。

OpenResty优势:

  首先我们选择使用OpenResty,是因为Openresty是由Nginx核心加很多第三方模块组成,其最大的亮点是默认集成了Lua开发环境,使得Nginx可以作为一个Web Server使用。
  借助于Nginx的事件驱动模型和非阻塞IO,可以实现高性能的Web应用程序。
   而且OpenResty提供了大量组件如Mysql、Redis、Memcached等等,使在Nginx上开发Web应用更方便更简单。目前在京东如实时价格、秒杀、动态服务、单品页、列表页等都在使用Nginx+Lua架构,其他公司如淘宝、去哪儿网等。

3.传统Nginx缓存与高速缓存策略对比

从上面的实验可以看到,给php加了memcache缓存后,虽然请求没有报错,但是处理速度没有增加。所以想利用nginx高并发特性,增加请求处理速度。
上面一部分做的是传统的缓存策略,但是该策略请求处理速度不高。

使用memc-nginx和srcache-nginx模块构建高效透明的缓存机制
传统缓存策略图
在这里插入图片描述

  传统缓存策略下,当nginx将php请求交给后端php请求的时候,这个生命周期就无法管控了,把数据管控放到nginx,nginx也支持数据缓存(可以做cdn)。如果想让nginx完全把握整个生命周期,缓存需要前移。
 &emsp传统缓存策略给php增加了memcaceh缓存后,请求没有报错了,但是整体nginx吞吐量没有上来,因为nginx把php请求交给php后端后,客户端处于与nginx处于阻塞状态,想要达到高速,需要将nginx前置放到nginx,由nginx去取,后端php同时可以加memcache缓存。nginx也可以做cdn。

高效缓存策略图

在这里插入图片描述>nginx中可以将lua嵌入,让nginx执行lua脚本,可以处理高并发,非阻塞的处理各种请求,openresty项目中可以使用nignx直接构建 srcache+nginx 缓存,而不用通过动态语言来处理。

以下为srcache+nginx的工作流程图
在这里插入图片描述

请求时,nginx先看一下本地memcache缓存中有没有,没有命中时,再发给后端处理,去源站取数据,取完数据后返回,再在本地memcache中存一份。

4.使用openresty构建高速缓存机制

下载安装软件包
在这里插入图片描述
在这里插入图片描述解压安装软件包
在这里插入图片描述
编译
默认会将常用的模块编译进去,直接编译就行。默认安装路径不会覆盖原来的nginx,但是都监听80端口,所以需要先将原生的nginx停掉,再开启Openresty。
在这里插入图片描述
安装
在这里插入图片描述关闭原生nginx,并配置Openresty下的nginx配置文件,与原生nginx配置保持一样

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
启动服务
在这里插入图片描述
在这里插入图片描述
复制发布页面
在这里插入图片描述修改配置文件,给nginx添加缓冲。
有多个缓冲时用负载均衡就可以
memcache是kv引擎,与传统型关系型数据库不一样,是nosql,非关系型数据库可以免维护,到期失效,关系型数据库需要delete

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;#调用自己的变量
        set $memc_exptime 300;
        memc_pass memcache;
        }

在这里插入图片描述

在这里插入图片描述

当所请求的uri以“.php”结尾时,首先到memcache中查询有没有以$uri$args为key的数据,如果有则直接返回;否则,执行location的逻辑,如果返回的http状态码为200,则在输出前以$uri$args为key,将输入结果存入memcache

在这里插入图片描述
在这里插入图片描述
重新加载配置
在这里插入图片描述客户端测试
处理速度加快,没有让请求往后端走,因为在nginx缓存中就拿到了。后端php加速和nginx缓存加速可以一块用,起到双重加速的效果。
在这里插入图片描述复制其他页面进行测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

多于少的区别

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值