立山 发表于 2024-11-11 01:02:15

LNMP 架构(Linux+NGINX+memcache+PHP)

目次

1 源码编译PHP与NGINX

1.1 NGINX 源码编译

1.2 PHP 源码编译安装

2 实现PHP与NGINX的连接

2.1 php-fpm的具体介绍

2.2 LNMP与LAMP的区别


2.3 PHP配置文件的介绍

2.4 实例实现php-fpm 与 NGINX的连接

2.4.1 指定pid的存放位置

2.4.2 php-fpm设置监听本身端口与IP

2.4.3 主配置文件中设置所在时区

2.4.4 设置 php-fpm 的服务(systemd)

2.4.5 fastcgi.conf 的介绍

2.4.6 设置NGINX与php-fpm的连接

3 php的动态扩展模块(php的缓存模块)

3.1 memcache的介绍与支持模块的获取

3.2 源码编译memcache模块

3.3 利用php内置脚本生成configure环境检测脚本 

3.4 memcache模块的编译安装

4 摆设 memcached 缓存数据库提高LNMP性能

4.1 复制测试文件到nginx发布目次中并修改

4.2 摆设memcached

4.3 浏览器访问memcache.php

4.4 实现php的高速缓存

4.5 变量定义的区别

4.6 客户端测试

1 源码编译PHP与NGINX


随着 Nginx Web 服务的逐渐盛行, 又岀现了新的 Web 服务环境组合—LNMP 或 LEMP, 其中 LNMP 为 Linux 、 Nginx , MySQL、PHP 等首字母的缩写, 而 LEMP 中的 E 则表示 Nginx, 它 取 自 Nginx 名 字 的 发 音( engine X )。 现在, LNMP 已经逐渐成为国内大中型互联网公司网站的主流组合环境, 因此, 我们必须纯熟把握 LNMP 环境的搭建、 优化及维护方法。
LNMP组合工作流程
当 LNMP 组合工作时, 首先是用户通过浏览器输人域名哀求 Nginx Web 服务, 如果哀求是静态资源, 则由 Nginx 解析返回给用户; 如果是动态哀求( .php 结尾 ), 那么Nginx 就会把它通过 FastCGI 接口( 生产常用方法) 发送给 PHP 引擎服务( FastCGI 进程php-fpm ) 进行解析, 如果这个动态哀求要读取数据库数据, 那么 PHP 就会继续向后哀求 MySQL 数据库, 以读取需要的数据, 并终极通过 Nginx 服务把获取的数据返回给用户, 这就是 LNMP 环境的根本哀求顺序流程 
https://i-blog.csdnimg.cn/direct/e75832ed86c64863bb4fbff4c68265d3.png
https://i-blog.csdnimg.cn/direct/94eb1026c49e435ca118a6e9f0cafd54.png

https://i-blog.csdnimg.cn/direct/6cd6dc49e1244656aa533ccd5f606d9d.png

CGI协议固然办理了语言解析器和 Web Server 之间通讯的问题,但是它的效率很低,因为 Web Server每收到一个哀求都会创建一个CGI进程,PHP解析器都会解析php.ini文件,初始化环境,哀求竣事的时间再关闭进程,对于每一个创建的CGI进程都会实行这些操作,所以效率很低,而FastCGl是用来提高CGI性能的,FastCGl每次处置处罚完哀求之后不会关闭掉进程,而是保存这个进程,使这个进程可以处置处罚多个哀求。这样的话每个哀求都不消再重新创建一个进程了,大大提升了处置处罚效率。


什么是PHP-FPM?
PHP-FPM   FastCGl Process Manager


[*]FastCGl进程管理器)是一个实现了Fastcgi的程序,并且提供进程管理的功能
[*]进程包括master进程和worker进程。master进程只有一个,负责监听端口,接受来自webserver的哀求
[*]worker进程一般会有多个,每个进程中会嵌入一个PHP解析器,进行PHP代码的处置处罚


   Nginx基于模块ngx_http_fastcgi_module实现通过fastcgi协议将指定的客户端哀求转发至php-fpm处 理,其配置指令如下指令描述fastcgi_pass address:port;转发哀求到后端服务器,address为后端的fastcgi server的地址,可用位置:location, if in locationfastcgi_index name;fastcgi默认的主页资源,示例:fastcgi_index index.php;fastcgi_param parameter value ;设置传送给FastCGI服务器的参数值,可以是文本,变量或组合,可用于将Nginx的内置变量赋值给自定义key
1.1 NGINX 源码编译

由于原先的原先已经编译过NGINX了,所以需要删掉之前的编译文件
检查环境是否适合安装
# 删除之前编译过的 重新编译
# make clean
rm -rf Makefile objs

# ./configure --prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-pcre \
--with-stream\
--with-stream_ssl_module \
--add-module=/usr/local/src/memc-nginx-module-0.20 \
# Memcached 缓存模块,用于让 Nginx 通过 Memcached 存储和检索缓存数据。
# 这样可以让 Nginx 更高效地处理动态内容,减少对后端应用服务器的压力。
--add-module=/usr/local/src/echo-nginx-module-0.63 \
# Echo 模块提供了一些实用的输出过滤器和变量,主要用于测试和调试目的。
# 它可以用来实现一些高级的输出控制功能,如输出缓冲区管理和异步 I/O。
--add-module=/usr/local/src/srcache-nginx-module-0.33
# 简单的缓存模块,它能够将请求的结果存储在一个中间缓存服务器(如 memcached 或 Redis)中,
# 以便下次相同的请求可以直接从缓存中读取,从而提高性能 编译NGINX生成模块与二进制文件 -- 不需要安装 (make install)
# make
make -f objs/Makefile
make: 进入目录“/usr/local/src/nginx-1.26.1” https://i-blog.csdnimg.cn/direct/28ccc2d996c14bff863f2a9212698bad.png
编译后会在objs下生成一个nginx文件,他是整个nginx的焦点,将他移动到原先nginx的sbin目次下做替换
# cd objs/
# ls
addon         nginx            ngx_auto_headers.hsrc
autoconf.errnginx.8            ngx_modules.c
Makefile      ngx_auto_config.hngx_modules.o

      
# ls /usr/local/nginx/sbin
nginx      nginx.old
# cp -a nginx /usr/local/nginx/sbin/nginx.new
# cd /usr/local/nginx/sbin/
# ls
nginxnginx.newnginx.old


# mv nginx nginx_1.26
# mv nginx.new nginx

# 检查模块是否添加
# nginx -V
nginx version: nginx/1.26.1
built by gcc 11.4.1 20231218 (Red Hat 11.4.1-3) (GCC)
built with OpenSSL 3.0.7 1 Nov 2022
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-pcre --with-stream --with-stream_ssl_module --add-module=/usr/local/src/memc-nginx-module-0.20 --add-module=/usr/local/src/echo-nginx-module-0.63 --add-module=/usr/local/src/srcache-nginx-module-0.33 https://i-blog.csdnimg.cn/direct/ecdb904a1cda426f8bc051aeb56b3d6e.png


1.2 PHP 源码编译安装

# ./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-xml \
--enable-ftp \
--with-fpm-systemd \ 以下是表明 
./configure \
--prefix=/usr/local/php \       # 安装路径
--with-config-file-path=/usr/local/php/etc \   # 指定配置路径
--enable-fpm \            # 用CGI方式启动程序
--with-fpm-user=nginx \      # 指定运行用户身份
--with-fpm-group=nginx \   
--with-curl \            # 打开curl浏览器支持
--with-iconv \             # 启用iconv函数,转换字符编码
--with-mhash \             # mhash加密方式扩展库
--with-zlib \             # 支持zlib库,用于压缩http压缩传输
--with-openssl \          # 支持ssl加密
--enable-mysqlnd \         # mysql数据库
--with-mysqli \         #
--with-pdo-mysql \         # 关闭debug功能
--disable-debug \         # 支持套接字访问
--enable-sockets \      # 支持soap扩展协议
--enable-xml \            # 支持xml
--enable-ftp \            # 支持gd库
--enable-gd \             # 支持图片元数据
--enable-exif \         # 支持多字节字符串
--enable-mbstring \       # 打开图片大小调整,用到zabbix监控的时候用了这个模块
--enable-bcmath \         # 支持systemctl管理cgi
--with-fpm-systemd \      
在编译的结尾出现了错误
https://i-blog.csdnimg.cn/direct/b5d0e12bc5214c37bbf82b307faa3b26.png
办理方法,探求包安装他
https://i-blog.csdnimg.cn/direct/cbde50851aa248d38756b4f8321cbc9b.png

https://i-blog.csdnimg.cn/direct/6b4dee052233458d93a4e0a497d1b6be.png
再次进行编译
# ./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-xml \
--enable-ftp \
--with-fpm-systemd \ https://i-blog.csdnimg.cn/direct/cc0c7fcf551b4b9487dd08c814044d14.png


再次测试环境
# ./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-xml \
--enable-ftp \
--with-fpm-systemd \ https://i-blog.csdnimg.cn/direct/0276ae6cc52c4d05be1c528967027e7b.png


 继续测试环境
# ./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-xml \
--enable-ftp \
--with-fpm-systemd \ https://i-blog.csdnimg.cn/direct/3691367890324acba7e4c02400270ce4.png

 继续测试环境
# ./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-xml \
--enable-ftp \
--with-fpm-systemd \ https://i-blog.csdnimg.cn/direct/d25a91e9ddc646e8bca9109226849064.png

 继续测试
# ./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-xml \
--enable-ftp \
--with-fpm-systemd \ https://i-blog.csdnimg.cn/direct/d84b2142089b42fbaf97f9faec0de0e0.png
办理方案
https://i-blog.csdnimg.cn/direct/67d5772a00ad4a9582a1b5517a0969a9.png
# yum install https://mirrors.aliyun.com/rockylinux/9.4/CRB/x86_64/kickstart/Packages/o/oniguruma-devel-6.9.6-1.el9.5.0.1.x86_64.rpm https://i-blog.csdnimg.cn/direct/0fddf40019254ebe8a01d49dc10adb24.png
 再次测试环境
# ./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-xml \
--enable-ftp \
--with-fpm-systemd \ 环境检测乐成!
https://i-blog.csdnimg.cn/direct/51131323f9b64905a08d24ab97505864.png

接下来进行PHP的make编译并安装
# make && make install https://i-blog.csdnimg.cn/direct/db094fcfe9dc4a7b893fb343de8445f2.png
已经安装乐成
https://i-blog.csdnimg.cn/direct/b4895dceeb9b41d8b6edf3a1ac0645d8.png

2 实现PHP与NGINX的连接

2.1 php-fpm的具体介绍

PHP-FPM (FastCGI Process Manager) 是一种管理 PHP FastCGI协议 进程的程序,它可以更有用地运行 PHP 应用程序。PHP-FPM 提供了一个更好的方式来管理和调整 PHP FastCGI 进程,包括启动、制止和重启进程,以及监控性能。
对于 Nginx 来说,PHP-FPM 提供了一个稳定的接口来处置处罚 PHP 哀求。Nginx 通过 FastCGI 协议将 PHP 哀求转发给 PHP-FPM,后者负责解析哀求并生成响应。这种架构使得 Nginx 能够专注于静态文件处置处罚和反向代理,而 PHP-FPM 则专注于处置处罚 PHP 哀求,提高了整体性能和稳定性。
2.2 LNMP与LAMP的区别

在apache中PHP下载之后就可以直接利用,这是因为他本来就拥有一个PHP模块
但在NGINX中不一样PHP与NGINX是两个截然不一样的服务。但又有人想要将他们串起来利用
于是就诞生了php-fpm
功能LNMPLAMP利用的网站服务不同NginxApachePHP作用不同在LAMP中PHP是当作Apache的一个模块来利用LNMP中PHP是当作一个独立进程来利用的(即PHP_FPM) https://i-blog.csdnimg.cn/direct/55120b9bb6974eb9b6c2b254613353a0.png
https://i-blog.csdnimg.cn/direct/1c1e1997c2a441eaa57af50278390beb.png


2.3 PHP配置文件的介绍

实现PHP与NGINX连接的大致操作(具体操作往下滑)
php有三个配置文件:
php.ini                        主配置文件
php-fpm.conf        进程服务配置文件
www.conf                扩展配置文件 --专门给web浏览器提供接口的文件

# tree
.
├── php-fpm.conf
├── php-fpm.conf.default
├── php-fpm.d
│   ├── www.conf
│   └── www.conf.default
└── php.ini

1、其中 php.ini 在解压的压缩包中 /usr/local/src/php-8.3.9/php.ini-development
cp -p /usr/local/src/php-8.3.9/php.ini-development /usr/local/php/etc/php.ini
vim php.ini
date.timezone = Asia/Shanghai # 修改时区

2、php-fpm.conf 在已经编译好的php中 的etc下--示例文件

ls /usr/local/php/etc/
php-fpm.conf.defaultphp-fpm.dphp.ini

cp -p php-fpm.conf.default php-fpm.conf
vim php-fpm.conf
pid = run/php-fpm.pid


3、www.conf 在意见编译好的php中etc/php-fpm.d/ 下

ls /usr/local/php/etc/php-fpm.d/--示例文件
www.conf.default

cp -p www.conf.default www.conf
vim php-fpm.d/www.conf
listen = 192.168.239.100:9000# 也可以填0.0.0.0

php -m                 #验证安装的模块  PHP配置文件大致介绍
php-fpm.conf ######################################################################

示例
# pid = run/php-fpm.pid
# error_log = log/php-fpm.log

PHP-FPM 的主配置文件,其中包含了 PHP-FPM 服务的全局配置选项。
这些选项控制着 PHP-FPM 的整体行为,包括监听地址、PID 文件位置、日志文件位置等

php-fpm.d ######################################################################

这是一个目录,包含了一个或多个 .conf 文件,每个文件都可以定义一个或多个 pool。
这些 pool 用于配置不同的 PHP-FPM 进程组,通常用于不同的用途或网站。
例如,www.conf 通常用于配置处理 Web 请求的进程池。


www.conf ######################################################################

示例
# listen = 127.0.0.1:9000
# pm = dynamic
# pm.max_children = 5
# pm.start_servers = 2
# pm.min_spare_servers = 1
# pm.max_spare_servers = 3

这是一个位于 php-fpm.d 目录下的配置文件,专门用于配置处理 Web 请求的 PHP-FPM 进程池。
它通常包含了许多针对 Web 请求的特定配置选项,例如进程数量、最大请求数、超时设置等。

php.ini ######################################################################

# date.timezone = Asia/Shanghai
# error_reporting = E_ALL
# display_errors = Off
# log_errors = On

# 扩展模块
extension=memcache

# 如果扩展文件不在默认的扩展目录中,需要在 php.ini 文件中指定正确的扩展目录
extension_dir = "/path/to/extension/directory"
extension=memcached.so

这是 PHP 的主配置文件,它包含了 PHP 的运行时配置选项。
这些配置项控制着 PHP 脚本的行为,例如错误处理、内存限制、上传文件大小限制等。



bin 目录
├── bin                  # 包含 PHP 的执行文件和工具
│   ├── phar -> phar.phar# 符号链接到 phar.phar,用于处理 PHAR (PHP Archive) 文件
│   ├── phar.phar         # PHAR 执行文件
│   ├── php               # PHP 的命令行界面(CLI)版本
│   ├── php-cgi         # PHP 的 CGI 版本
│   ├── php-config      # 用于查询 PHP 配置信息的工具
│   ├── phpdbg            # PHP 的调试器
│   └── phpize            # 用于准备 PHP 扩展模块构建环境的脚本

sbin 目录
├── sbin               # 包含 PHP-FPM 的服务守护进程
│   └── php-fpm         # PHP-FPM 的服务守护进程 PHP源码安装各个目次的作用
bin 目录包含了 PHP 的执行文件和工具。
etc 目录包含了 PHP 和 PHP-FPM 的配置文件。
include 目录包含了 PHP 的头文件。
lib 目录包含了 PHP 的库文件和扩展。
php 目录包含了 PHP 的源码和手册页面。
sbin 目录包含了 PHP-FPM 的服务守护进程。
var 目录包含了 PHP-FPM 的运行时文件和日志文件。
2.4 实例实现php-fpm 与 NGINX的连接

   PHP端:

        指定pid存放位置   --  php-fpm.conf
        service文件的利用  --  php-fpm.service
        监听本身IP与端口处置处罚web服务器的哀求  --  www.conf
        设置所在时区  --  php.ini --> 拷贝源码包中的php.ini-production

NGINX端:

        设置PHP端的IP与端口做为链接(实在是php-fpm)

2.4.1 指定pid的存放位置

# vim /usr/local/php/etc/php-fpm.conf https://i-blog.csdnimg.cn/direct/2f2f916741864ac7be44bfb772125db5.png

2.4.2 php-fpm设置监听本身端口与IP

IP设置为 0.0.0.0 即全部人访问 
此处为listen 监听本身的IP与端口
注意:NGINX 上 fastcgi_pass 参数填的为PHP服务器的IP和端口
# mv www.conf.default www.conf
# vim /usr/local/php/etc/php-fpm.d/www.conf https://i-blog.csdnimg.cn/direct/124893b62593488f86850a777a189f24.png

2.4.3 主配置文件中设置所在时区

查看编译过后的php安装包内文件
php.ini-production 是 PHP 的配置文件之一,通常用于生产环境。它包含了一系列默认设置,旨在优化 PHP 性能和安全性,使其更适合在生产环境中运行。这些设置可能包括限制内存消耗、禁用不必要的扩展等。
https://i-blog.csdnimg.cn/direct/81c4b42a0c40442399e12bd36e77e2b3.png
设置所在时区
将此文件拷贝一份到php的etc目次下面
cp -p /usr/local/src/php-8.3.9/php.ini-production/usr/local/php/etc/php.ini

# vim /usr/local/php/etc/php.ini
# 设置时区
date.timezone = Asia/Shanghai https://i-blog.csdnimg.cn/direct/03e852e6cae7418fbb69210e48f5c2eb.png
https://i-blog.csdnimg.cn/direct/b76a84b6fa834ce3ad5f5b98c0864343.png
2.4.4 设置 php-fpm 的服务(systemd)

php-fpm.service 是编译之后官方提供的服务文件
# cp -p /usr/local/src/php-8.3.9/sapi/fpm/php-fpm.service /lib/systemd/system/

# vim /lib/systemd/system/php-fpm.service https://i-blog.csdnimg.cn/direct/1375513c44da48659e51b849e496ae60.png
重启php服务
# systemctl restart php-fpm.service

# 查看监听端口
# netstat -tunlpt | grep php
tcp      0      0 0.0.0.0:9000            0.0.0.0:*               LISTEN      175854/php-fpm: mas 查看服务状态
https://i-blog.csdnimg.cn/direct/7ba83fb1592948afb29912a4449ac3d3.png

2.4.5 fastcgi.conf 的介绍

fastcgi.conf 是一个 Nginx 的配置文件,用于配置 FastCGI 协议干系的设置。FastCGI 是一种常驻型的通用网关接口,用于提高 Web 服务器性能。它允许外部进程(如 PHP-FPM)处置处罚动态内容哀求,而不是像 CGI 那样每次哀求都需要启动一个新的进程
https://i-blog.csdnimg.cn/direct/a3e58cdfb93c4a43ae7ffc19cd8fb407.png
# vim fastcgi.conf 没有他NGINX就无法与PHP进行连接,变量需要对应,这个文件中就相称于一个说明书一样
https://i-blog.csdnimg.cn/direct/ec44685b902346bfbed84ccc9db3f0f9.png

2.4.6 设置NGINX与php-fpm的连接

准备php测试页面
   增长PHP数据内容   # pwd
/usr/local/nginx/conf.d
# mkdir -p /data/web/php

# vim /data/web/php/index.php
<?php
phpinfo();
?>
编写NGINX与PHP的连接配置
# vim php.conf
server {
      listen 80;
      server_name php.shuyan.com;
      index index.php;
      location ~ \.php$ {
            root /data/web/php;
            # 指定PHP处理程序的位置。Nginx将把PHP请求传递给位于IP地址192.168.239.100、
            # 端口9000上的FastCGI进程。通常这是一个运行PHP-FPM的服务。
            fastcgi_pass 192.168.239.100:9000;
            # 确认了index.php是通过FastCGI处理的默认索引文件
            fastcgi_index index.php;

            # 在这里包含NGINX与PHP的变量对应表
            include fastcgi.conf;
      }
}重新启动服务
# systemctl restart nginx
# systemctl restart php-fpm.service  https://i-blog.csdnimg.cn/direct/56d2298dfda04946930137bb0a6a9d51.png
https://i-blog.csdnimg.cn/direct/7eb07c72e91e48e78a00f802dd105da2.png

3 php的动态扩展模块(php的缓存模块)

3.1 memcache的介绍与支持模块的获取

https://i-blog.csdnimg.cn/direct/ffc0f60f820048e2bc41d182c66ea2b3.png

PHP本来是不支持memcache的 需要增长扩展模块来支持memcache
memcache -- 非关系型数据库(键值对)
实现PHP的性能提升需要借助memcache减少对PHP的负担
实现过程:
   NGINX PHP (已做好链接)--> 安装PHP支持memcache的模块 --> 安装memcache数据库
能使 PHP 支持 memcache 的模块https://i-blog.csdnimg.cn/blog_migrate/003a2ce7eb50c2e24a8c624c260c5930.pnghttp://pecl.php.net/package/memcache
https://i-blog.csdnimg.cn/direct/4d151bb0053c4de4b4e96a777fd484e3.png
3.2 源码编译memcache模块

由于我们需要源码编译而碰巧又没有.configure
# cd memcache-8.2/
# ls
config9.m4config.w32docker      example.phpmemcache.phpsrc
config.m4   CREDITS   DockerfileLICENSE      README      tests
3.3 利用php内置脚本生成configure环境检测脚本 

   phpize 是一个用于准备 PHP 扩展模块构建环境的脚本。要从源码编译 PHP 扩展时,通常需要先运行 phpize 脚本来生成所需的 configure 脚本和其他构建文件。
但是发现了一个问题,他似乎是需要这么一个包来支持他
https://i-blog.csdnimg.cn/direct/7f2a642be7c84ca0886f0f1d6bb3c783.png
# yum install autoconf
# phpize
Configuring for:
PHP Api Version:         20230831
Zend Module Api No:      20230831
Zend Extension Api No:   420230831

# ls
autom4te.cacheconfig.h.inconfigure.acdocker       LICENSE       run-tests.php
build         config.m4    config.w32    Dockerfile   memcache.phpsrc
config9.m4      configure    CREDITS       example.phpREADME      tests
https://i-blog.csdnimg.cn/direct/2e2d60080d36448a9fdf0551ba8c992c.png

3.4 memcache模块的编译安装

# ./configure && make && make install https://i-blog.csdnimg.cn/direct/80ad86883c354ad8b268d640b8011756.png
https://i-blog.csdnimg.cn/direct/299f390e568e4d9ba7c67d6f574c0c01.png
# vim /usr/local/php/etc/php.ini
# 在模块部分增加这一行
extension=memcache


# systemctl restart php-fpm.service
# php-fpm -m | grep mem
memcache https://i-blog.csdnimg.cn/direct/8049ee46a78d4d688fab536516b9867f.png

4 摆设 memcached 缓存数据库提高LNMP性能

4.1 复制测试文件到nginx发布目次中并修改

memcache.php
它用于演示怎样利用 PHP 与 Memcache 服务器进行交互,并提供了一些根本的功能,如密码掩护、连接到 Memcache 服务器等。
# cp -p memcache.php example.php /data/web/php/ https://i-blog.csdnimg.cn/direct/f16042eabb73410c99b351b4622dccb6.png
# vim /data/web/php/memcache.php https://i-blog.csdnimg.cn/direct/ce5118ff887842c28a61178eb1714daf.png
https://i-blog.csdnimg.cn/direct/cea7bf6d591f4f38a75b6ac4ae9b9edb.png
4.2 摆设memcached

    https://i-blog.csdnimg.cn/direct/c8c2c46789b9459d9f64f65436338890.png
4.3 浏览器访问memcache.php

浏览器访问,输入刚才修改过的用户密码
https://i-blog.csdnimg.cn/direct/c52d3b66951f4ad19e89867fbb9f208c.png

https://i-blog.csdnimg.cn/direct/338161fa4a4f400d99f9dc1b57377e31.png
但单靠这样是实现不了加速访问的,肯定是需要减少所走的路径
接下来就要介绍怎样利用memcache链接NGINX
https://i-blog.csdnimg.cn/direct/d2f69b65d5744516b8345197d331f90f.png
4.4 实现php的高速缓存

    nginx中默认不支持memc和srcache功能,需要借助第三方模块来让nginx支持此功能,所以nginx需要重新编译,但在之前的实行中已经提前安装好模块 了如下图
   https://i-blog.csdnimg.cn/direct/777da41a5f0b46fb87837a0822aae86b.png             # 定义一个上游服务器组,用于连接到 Memcache 服务器
upstream memcache {
    # 指定 Memcache 服务器的地址和端口
    server 0.0.0.0:11211;
    # 设置连接池大小,即同时保持活动的连接数
    keepalive 512;
}

# 配置一个 Nginx 服务器块
server {
    # 监听 80 端口
    listen 80;
   
    # 设置网站根目录
    root /data/web/php;
   
    # 设置服务器名称
    server_name php.shuyan.com;
   
    # 配置一个内部 location,用于与 Memcache 服务器交互
    location /memc {
      # 设置为内部 location,意味着只能由其他 location 调用
      internal;
      
      # 设置 Memcache 连接超时时间
      memc_connect_timeout 100ms;
      
      # 设置 Memcache 发送数据超时时间
      memc_send_timeout 100ms;
      
      # 设置 Memcache 接收数据超时时间
      memc_read_timeout 100ms;
      
      # 设置 Memcache 的 key,这里使用查询字符串
      set $memc_key $query_string;
      
      # 设置 Memcache 中数据的有效时间(单位:秒)
      set $memc_exptime 300;
      
      # 指定上游服务器组,这里是前面定义的 memcache
      memc_pass memcache;
    }

    # 配置一个 location,用于处理 PHP 请求
    location ~ \.php$ {
      # 设置默认索引文件
      index index.php;
      
      # 设置 Memcache 的 key,这里使用 URI 和查询字符串
      set $key $uri$args;
      
      # 使用 srcache_fetch 指令尝试从 Memcache 获取缓存的数据
      # 如果缓存中存在,则直接返回缓存数据
      # 如果缓存中不存在,则执行后面的 PHP 处理逻辑
      srcache_fetch GET /memc $key;
      
      # 使用 srcache_store 指令将 PHP 处理的结果存储到 Memcache
      srcache_store PUT /memc $key;
      
      # 指定 FastCGI 后端服务器的地址和端口
      fastcgi_pass 192.168.239.100:9000;
      
      # 设置默认索引文件为 index.php
      fastcgi_index index.php;
      
      # 包含 FastCGI 配置文件
      include fastcgi.conf;
    }
}   4.5 变量定义的区别

   set $key $uri$args;:

    这行代码在 location ~ \.php$ 中定义。
    它用于生成用于缓存操作的 key。
    $uri 包含请求的 URI,例如 /index.php。
    $args 包含请求的查询字符串,例如 ?param=value。
    因此,$key 包含完整的 URI 和查询字符串,例如 /index.php?param=value。
    这个 key 用于 srcache_fetch 和 srcache_store 指令。

set $memc_key $query_string;:

    这行代码在 location /memc 中定义。
    它用于生成用于 Memcache 操作的 key。
    $query_string 包含请求的查询字符串,例如 param=value。
    因此,$memc_key 仅包含查询字符串,例如 param=value。
    这个 key 用于 memc_pass 指令。   
   为什么需要两个不同的 key?
    $key:
用于 srcache_fetch 和 srcache_store 指令。
包含完整的 URI 和查询字符串。
用于在缓存中查找或存储数据。

$memc_key:
用于 location /memc 中的 Memcache 操作。
仅包含查询字符串。
用于与 Memcache 服务器交互。


$key 和 $memc_key 虽然看起来相似,但在 Nginx 配置中有不同的用途。
$key 用于 srcache_fetch 和 srcache_store 指令,包含完整的 URI 和查询字符串。
$memc_key 仅包含查询字符串,用于与 Memcache 服务器交互。
通常情况下,$key 和 $memc_key 可以使用相同的值,但如果需要区别对待 URI 和查询字符串,
可以定义不同的变量。    4.6 客户端测试

   https://i-blog.csdnimg.cn/direct/8d85b51cab9049b4a55d7d12b80cef7a.png         开启memcache服务             # systemctl start memcached.service          https://i-blog.csdnimg.cn/direct/51bd27049106467eb309c6c060fb0f4f.png
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: LNMP 架构(Linux+NGINX+memcache+PHP)