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

立山  论坛元老 | 2024-11-11 01:02:15 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1028|帖子 1028|积分 3084

目次

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 环境的根本哀求顺序流程 





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 [if_not_empty];设置传送给FastCGI服务器的参数值,可以是文本,变量或组合,可用于将Nginx的内置变量赋值给自定义key
1.1 NGINX 源码编译

由于原先的原先已经编译过NGINX了,所以需要删掉之前的编译文件
检查环境是否适合安装
  1. # 删除之前编译过的 重新编译
  2. [root@NGINX nginx-1.26.1]# make clean
  3. rm -rf Makefile objs
  4. [root@NGINX nginx-1.26.1]# ./configure --prefix=/usr/local/nginx \
  5. --user=nginx \
  6. --group=nginx \
  7. --with-http_ssl_module \
  8. --with-http_v2_module \
  9. --with-http_realip_module \
  10. --with-http_gzip_static_module \
  11. --with-http_stub_status_module \
  12. --with-pcre \
  13. --with-stream  \
  14. --with-stream_ssl_module \
  15. --add-module=/usr/local/src/memc-nginx-module-0.20 \
  16. # Memcached 缓存模块,用于让 Nginx 通过 Memcached 存储和检索缓存数据。
  17. # 这样可以让 Nginx 更高效地处理动态内容,减少对后端应用服务器的压力。
  18. --add-module=/usr/local/src/echo-nginx-module-0.63 \
  19. # Echo 模块提供了一些实用的输出过滤器和变量,主要用于测试和调试目的。
  20. # 它可以用来实现一些高级的输出控制功能,如输出缓冲区管理和异步 I/O。
  21. --add-module=/usr/local/src/srcache-nginx-module-0.33
  22. # 简单的缓存模块,它能够将请求的结果存储在一个中间缓存服务器(如 memcached 或 Redis)中,
  23. # 以便下次相同的请求可以直接从缓存中读取,从而提高性能
复制代码
编译NGINX生成模块与二进制文件 -- 不需要安装 (make install)
  1. [root@NGINX nginx-1.26.1]# make
  2. make -f objs/Makefile
  3. make[1]: 进入目录“/usr/local/src/nginx-1.26.1”
复制代码

编译后会在objs下生成一个nginx文件,他是整个nginx的焦点,将他移动到原先nginx的sbin目次下做替换
  1. [root@NGINX nginx-1.26.1]# cd objs/
  2. [root@NGINX objs]# ls
  3. addon         nginx              ngx_auto_headers.h  src
  4. autoconf.err  nginx.8            ngx_modules.c
  5. Makefile      ngx_auto_config.h  ngx_modules.o
  6.       
  7. [root@NGINX objs]# ls /usr/local/nginx/sbin
  8. nginx      nginx.old  
  9. [root@NGINX objs]# cp -a nginx /usr/local/nginx/sbin/nginx.new
  10. [root@NGINX objs]# cd /usr/local/nginx/sbin/
  11. [root@NGINX sbin]# ls
  12. nginx  nginx.new  nginx.old
  13. [root@NGINX sbin]# mv nginx nginx_1.26
  14. [root@NGINX sbin]# mv nginx.new nginx
  15. # 检查模块是否添加
  16. [root@NGINX sbin]# nginx -V
  17. nginx version: nginx/1.26.1
  18. built by gcc 11.4.1 20231218 (Red Hat 11.4.1-3) (GCC)
  19. built with OpenSSL 3.0.7 1 Nov 2022
  20. TLS SNI support enabled
  21. 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
复制代码



1.2 PHP 源码编译安装

  1. [root@NGINX php-8.3.9]# ./configure \
  2. --prefix=/usr/local/php \
  3. --with-config-file-path=/usr/local/php/etc \
  4. --enable-fpm \
  5. --with-fpm-user=nginx \
  6. --with-fpm-group=nginx \
  7. --with-curl \
  8. --with-iconv \
  9. --with-mhash \
  10. --with-zlib \
  11. --with-openssl \
  12. --enable-mysqlnd \
  13. --with-mysqli \
  14. --with-pdo-mysql \
  15. --disable-debug \
  16. --enable-sockets \
  17. --enable-xml \
  18. --enable-ftp \
  19. --with-fpm-systemd \
复制代码
以下是表明 
  1. ./configure \
  2. --prefix=/usr/local/php \       # 安装路径
  3. --with-config-file-path=/usr/local/php/etc \     # 指定配置路径
  4. --enable-fpm \              # 用CGI方式启动程序
  5. --with-fpm-user=nginx \      # 指定运行用户身份
  6. --with-fpm-group=nginx \     
  7. --with-curl \              # 打开curl浏览器支持
  8. --with-iconv \             # 启用iconv函数,转换字符编码
  9. --with-mhash \             # mhash加密方式扩展库
  10. --with-zlib \             # 支持zlib库,用于压缩http压缩传输
  11. --with-openssl \          # 支持ssl加密
  12. --enable-mysqlnd \         # mysql数据库
  13. --with-mysqli \           #
  14. --with-pdo-mysql \         # 关闭debug功能
  15. --disable-debug \         # 支持套接字访问
  16. --enable-sockets \        # 支持soap扩展协议
  17. --enable-xml \            # 支持xml
  18. --enable-ftp \            # 支持gd库
  19. --enable-gd \             # 支持图片元数据
  20. --enable-exif \           # 支持多字节字符串
  21. --enable-mbstring \       # 打开图片大小调整,用到zabbix监控的时候用了这个模块
  22. --enable-bcmath \         # 支持systemctl管理cgi
  23. --with-fpm-systemd \      
复制代码

在编译的结尾出现了错误

办理方法,探求包安装他



再次进行编译
  1. [root@NGINX php-8.3.9]# ./configure \
  2. --prefix=/usr/local/php \
  3. --with-config-file-path=/usr/local/php/etc \
  4. --enable-fpm \
  5. --with-fpm-user=nginx \
  6. --with-fpm-group=nginx \
  7. --with-curl \
  8. --with-iconv \
  9. --with-mhash \
  10. --with-zlib \
  11. --with-openssl \
  12. --enable-mysqlnd \
  13. --with-mysqli \
  14. --with-pdo-mysql \
  15. --disable-debug \
  16. --enable-sockets \
  17. --enable-xml \
  18. --enable-ftp \
  19. --with-fpm-systemd \
复制代码



再次测试环境
  1. [root@NGINX php-8.3.9]# ./configure \
  2. --prefix=/usr/local/php \
  3. --with-config-file-path=/usr/local/php/etc \
  4. --enable-fpm \
  5. --with-fpm-user=nginx \
  6. --with-fpm-group=nginx \
  7. --with-curl \
  8. --with-iconv \
  9. --with-mhash \
  10. --with-zlib \
  11. --with-openssl \
  12. --enable-mysqlnd \
  13. --with-mysqli \
  14. --with-pdo-mysql \
  15. --disable-debug \
  16. --enable-sockets \
  17. --enable-xml \
  18. --enable-ftp \
  19. --with-fpm-systemd \
复制代码



 继续测试环境
  1. [root@NGINX php-8.3.9]# ./configure \
  2. --prefix=/usr/local/php \
  3. --with-config-file-path=/usr/local/php/etc \
  4. --enable-fpm \
  5. --with-fpm-user=nginx \
  6. --with-fpm-group=nginx \
  7. --with-curl \
  8. --with-iconv \
  9. --with-mhash \
  10. --with-zlib \
  11. --with-openssl \
  12. --enable-mysqlnd \
  13. --with-mysqli \
  14. --with-pdo-mysql \
  15. --disable-debug \
  16. --enable-sockets \
  17. --enable-xml \
  18. --enable-ftp \
  19. --with-fpm-systemd \
复制代码


 继续测试环境
  1. [root@NGINX php-8.3.9]# ./configure \
  2. --prefix=/usr/local/php \
  3. --with-config-file-path=/usr/local/php/etc \
  4. --enable-fpm \
  5. --with-fpm-user=nginx \
  6. --with-fpm-group=nginx \
  7. --with-curl \
  8. --with-iconv \
  9. --with-mhash \
  10. --with-zlib \
  11. --with-openssl \
  12. --enable-mysqlnd \
  13. --with-mysqli \
  14. --with-pdo-mysql \
  15. --disable-debug \
  16. --enable-sockets \
  17. --enable-xml \
  18. --enable-ftp \
  19. --with-fpm-systemd \
复制代码


 继续测试
  1. [root@NGINX php-8.3.9]# ./configure \
  2. --prefix=/usr/local/php \
  3. --with-config-file-path=/usr/local/php/etc \
  4. --enable-fpm \
  5. --with-fpm-user=nginx \
  6. --with-fpm-group=nginx \
  7. --with-curl \
  8. --with-iconv \
  9. --with-mhash \
  10. --with-zlib \
  11. --with-openssl \
  12. --enable-mysqlnd \
  13. --with-mysqli \
  14. --with-pdo-mysql \
  15. --disable-debug \
  16. --enable-sockets \
  17. --enable-xml \
  18. --enable-ftp \
  19. --with-fpm-systemd \
复制代码

办理方案

  1. [root@NGINX php-8.3.9]# 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
复制代码

 再次测试环境
  1. [root@NGINX php-8.3.9]# ./configure \
  2. --prefix=/usr/local/php \
  3. --with-config-file-path=/usr/local/php/etc \
  4. --enable-fpm \
  5. --with-fpm-user=nginx \
  6. --with-fpm-group=nginx \
  7. --with-curl \
  8. --with-iconv \
  9. --with-mhash \
  10. --with-zlib \
  11. --with-openssl \
  12. --enable-mysqlnd \
  13. --with-mysqli \
  14. --with-pdo-mysql \
  15. --disable-debug \
  16. --enable-sockets \
  17. --enable-xml \
  18. --enable-ftp \
  19. --with-fpm-systemd \
复制代码
环境检测乐成!


接下来进行PHP的make编译并安装
  1. [root@NGINX php-8.3.9]# make && make install
复制代码

已经安装乐成


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
利用的网站服务不同NginxApache
PHP作用不同在LAMP中PHP是当作Apache的一个模块来利用LNMP中PHP是当作一个独立进程来利用的(即PHP_FPM)




2.3 PHP配置文件的介绍

实现PHP与NGINX连接的大致操作(具体操作往下滑)
  1. php有三个配置文件:
  2. php.ini                        主配置文件  
  3. php-fpm.conf        进程服务配置文件
  4. www.conf                扩展配置文件 --专门给web浏览器提供接口的文件
  5. [root@PHP etc]# tree
  6. .
  7. ├── php-fpm.conf
  8. ├── php-fpm.conf.default
  9. ├── php-fpm.d
  10. │   ├── www.conf
  11. │   └── www.conf.default
  12. └── php.ini
  13. 1、其中 php.ini 在解压的压缩包中 /usr/local/src/php-8.3.9/php.ini-development
  14. cp -p /usr/local/src/php-8.3.9/php.ini-development /usr/local/php/etc/php.ini
  15. vim php.ini
  16. date.timezone = Asia/Shanghai # 修改时区
  17. 2、php-fpm.conf 在已经编译好的php中 的etc下  --示例文件
  18. ls /usr/local/php/etc/
  19. php-fpm.conf.default  php-fpm.d  php.ini
  20. cp -p php-fpm.conf.default php-fpm.conf
  21. vim php-fpm.conf
  22. pid = run/php-fpm.pid
  23. 3、www.conf 在意见编译好的php中etc/php-fpm.d/ 下  
  24. ls /usr/local/php/etc/php-fpm.d/  --示例文件
  25. www.conf.default
  26. cp -p www.conf.default www.conf
  27. vim php-fpm.d/www.conf
  28. listen = 192.168.239.100:9000  # 也可以填0.0.0.0
  29. php -m                 #验证安装的模块
复制代码
 PHP配置文件大致介绍
  1. php-fpm.conf ######################################################################
  2. 示例
  3. # pid = run/php-fpm.pid
  4. # error_log = log/php-fpm.log
  5. PHP-FPM 的主配置文件,其中包含了 PHP-FPM 服务的全局配置选项。
  6. 这些选项控制着 PHP-FPM 的整体行为,包括监听地址、PID 文件位置、日志文件位置等
  7. php-fpm.d ######################################################################
  8. 这是一个目录,包含了一个或多个 .conf 文件,每个文件都可以定义一个或多个 pool。
  9. 这些 pool 用于配置不同的 PHP-FPM 进程组,通常用于不同的用途或网站。
  10. 例如,www.conf 通常用于配置处理 Web 请求的进程池。
  11. www.conf ######################################################################
  12. 示例
  13. # listen = 127.0.0.1:9000
  14. # pm = dynamic
  15. # pm.max_children = 5
  16. # pm.start_servers = 2
  17. # pm.min_spare_servers = 1
  18. # pm.max_spare_servers = 3
  19. 这是一个位于 php-fpm.d 目录下的配置文件,专门用于配置处理 Web 请求的 PHP-FPM 进程池。
  20. 它通常包含了许多针对 Web 请求的特定配置选项,例如进程数量、最大请求数、超时设置等。
  21. php.ini ######################################################################
  22. # date.timezone = Asia/Shanghai
  23. # error_reporting = E_ALL
  24. # display_errors = Off
  25. # log_errors = On
  26. # 扩展模块
  27. extension=memcache
  28. # 如果扩展文件不在默认的扩展目录中,需要在 php.ini 文件中指定正确的扩展目录
  29. extension_dir = "/path/to/extension/directory"
  30. extension=memcached.so
  31. 这是 PHP 的主配置文件,它包含了 PHP 的运行时配置选项。
  32. 这些配置项控制着 PHP 脚本的行为,例如错误处理、内存限制、上传文件大小限制等。
  33. bin 目录
  34. ├── bin                  # 包含 PHP 的执行文件和工具
  35. │   ├── phar -> phar.phar  # 符号链接到 phar.phar,用于处理 PHAR (PHP Archive) 文件
  36. │   ├── phar.phar         # PHAR 执行文件
  37. │   ├── php               # PHP 的命令行界面(CLI)版本
  38. │   ├── php-cgi           # PHP 的 CGI 版本
  39. │   ├── php-config        # 用于查询 PHP 配置信息的工具
  40. │   ├── phpdbg            # PHP 的调试器
  41. │   └── phpize            # 用于准备 PHP 扩展模块构建环境的脚本
  42. sbin 目录
  43. ├── sbin                 # 包含 PHP-FPM 的服务守护进程
  44. │   └── php-fpm           # PHP-FPM 的服务守护进程
复制代码
PHP源码安装各个目次的作用
  1. bin 目录包含了 PHP 的执行文件和工具。
  2. etc 目录包含了 PHP 和 PHP-FPM 的配置文件。
  3. include 目录包含了 PHP 的头文件。
  4. lib 目录包含了 PHP 的库文件和扩展。
  5. php 目录包含了 PHP 的源码和手册页面。
  6. sbin 目录包含了 PHP-FPM 的服务守护进程。
  7. 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的存放位置

  1. [root@NGINX etc]# vim /usr/local/php/etc/php-fpm.conf
复制代码


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

IP设置为 0.0.0.0 即全部人访问 
此处为listen 监听本身的IP与端口
注意:NGINX 上 fastcgi_pass 参数填的为PHP服务器的IP和端口
  1. [root@NGINX php-fpm.d]# mv www.conf.default www.conf
  2. [root@NGINX etc]# vim /usr/local/php/etc/php-fpm.d/www.conf
复制代码


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

查看编译过后的php安装包内文件
php.ini-production 是 PHP 的配置文件之一,通常用于生产环境。它包含了一系列默认设置,旨在优化 PHP 性能和安全性,使其更适合在生产环境中运行。这些设置可能包括限制内存消耗、禁用不必要的扩展等。

设置所在时区
将此文件拷贝一份到php的etc目次下面
  1. cp -p /usr/local/src/php-8.3.9/php.ini-production  /usr/local/php/etc/php.ini
  2. [root@PHP ~]# vim /usr/local/php/etc/php.ini
  3. # 设置时区
  4. date.timezone = Asia/Shanghai
复制代码


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

php-fpm.service 是编译之后官方提供的服务文件
  1. [root@NGINX fpm]# cp -p /usr/local/src/php-8.3.9/sapi/fpm/php-fpm.service /lib/systemd/system/
  2. [root@NGINX fpm]# vim /lib/systemd/system/php-fpm.service
复制代码

重启php服务
  1. [root@NGINX conf.d]# systemctl restart php-fpm.service
  2. # 查看监听端口
  3. [root@NGINX php-fpm.d]# netstat -tunlpt | grep php
  4. tcp        0      0 0.0.0.0:9000            0.0.0.0:*               LISTEN      175854/php-fpm: mas
复制代码
查看服务状态


2.4.5 fastcgi.conf 的介绍

fastcgi.conf 是一个 Nginx 的配置文件,用于配置 FastCGI 协议干系的设置。FastCGI 是一种常驻型的通用网关接口,用于提高 Web 服务器性能。它允许外部进程(如 PHP-FPM)处置处罚动态内容哀求,而不是像 CGI 那样每次哀求都需要启动一个新的进程

  1. [root@NGINX conf]# vim fastcgi.conf
复制代码
没有他NGINX就无法与PHP进行连接,变量需要对应,这个文件中就相称于一个说明书一样


2.4.6 设置NGINX与php-fpm的连接

准备php测试页面
   增长PHP数据内容   
  1. [root@NGINX conf.d]# pwd
  2. /usr/local/nginx/conf.d
  3. [root@NGINX conf.d]# mkdir -p /data/web/php
  4. [root@NGINX conf.d]# vim /data/web/php/index.php
  5. <?php
  6.   phpinfo();
  7. ?>
复制代码

  编写NGINX与PHP的连接配置
  1. [root@NGINX conf.d]# vim php.conf
  2. server {
  3.         listen 80;
  4.         server_name php.shuyan.com;
  5.         index index.php;
  6.         location ~ \.php$ {
  7.             root /data/web/php;
  8.             # 指定PHP处理程序的位置。Nginx将把PHP请求传递给位于IP地址192.168.239.100、
  9.             # 端口9000上的FastCGI进程。通常这是一个运行PHP-FPM的服务。
  10.             fastcgi_pass 192.168.239.100:9000;
  11.             # 确认了index.php是通过FastCGI处理的默认索引文件
  12.             fastcgi_index index.php;
  13.             # 在这里包含NGINX与PHP的变量对应表
  14.             include fastcgi.conf;
  15.         }
  16. }
复制代码
重新启动服务
  1. [root@NGINX ~]# systemctl restart nginx
  2. [root@NGINX ~]# systemctl restart php-fpm.service
复制代码
 



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

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



PHP本来是不支持memcache的 需要增长扩展模块来支持memcache
memcache -- 非关系型数据库(键值对)
实现PHP的性能提升需要借助memcache减少对PHP的负担
实现过程:
   NGINX PHP (已做好链接)--> 安装PHP支持memcache的模块 --> 安装memcache数据库
  能使 PHP 支持 memcache 的模块
http://pecl.php.net/package/memcache

3.2 源码编译memcache模块

由于我们需要源码编译而碰巧又没有.configure
  1. [root@PHP src]# cd memcache-8.2/
  2. [root@PHP memcache-8.2]# ls
  3. config9.m4  config.w32  docker      example.php  memcache.php  src
  4. config.m4   CREDITS     Dockerfile  LICENSE      README        tests
复制代码
3.3 利用php内置脚本生成configure环境检测脚本 

   phpize 是一个用于准备 PHP 扩展模块构建环境的脚本。要从源码编译 PHP 扩展时,通常需要先运行 phpize 脚本来生成所需的 configure 脚本和其他构建文件。
  但是发现了一个问题,他似乎是需要这么一个包来支持他

  1. [root@PHP memcache-8.2]# yum install autoconf
  2. [root@PHP memcache-8.2]# phpize
  3. Configuring for:
  4. PHP Api Version:         20230831
  5. Zend Module Api No:      20230831
  6. Zend Extension Api No:   420230831
  7. [root@PHP memcache-8.2]# ls
  8. autom4te.cache  config.h.in  configure.ac  docker       LICENSE       run-tests.php
  9. build           config.m4    config.w32    Dockerfile   memcache.php  src
  10. config9.m4      configure    CREDITS       example.php  README        tests
复制代码


3.4 memcache模块的编译安装

  1. [root@PHP memcache-8.2]# ./configure && make && make install
复制代码


  1. [root@PHP memcache-8.2]# vim /usr/local/php/etc/php.ini
  2. # 在模块部分增加这一行
  3. extension=memcache
  4. [root@PHP memcache-8.2]# systemctl restart php-fpm.service
  5. [root@PHP memcache-8.2]# php-fpm -m | grep mem
  6. memcache
复制代码


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

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

  memcache.php
它用于演示怎样利用 PHP 与 Memcache 服务器进行交互,并提供了一些根本的功能,如密码掩护、连接到 Memcache 服务器等。
  1. [root@PHP memcache-8.2]# cp -p memcache.php example.php /data/web/php/
复制代码

  1. [root@PHP conf.d]# vim /data/web/php/memcache.php
复制代码


4.2 摆设memcached

   
  
4.3 浏览器访问memcache.php

浏览器访问,输入刚才修改过的用户密码



但单靠这样是实现不了加速访问的,肯定是需要减少所走的路径
接下来就要介绍怎样利用memcache链接NGINX

4.4 实现php的高速缓存

    nginx中默认不支持memc和srcache功能,需要借助第三方模块来让nginx支持此功能,所以nginx需要重新编译,但在之前的实行中已经提前安装好模块 了如下图
     
            
  1. # 定义一个上游服务器组,用于连接到 Memcache 服务器
  2. upstream memcache {
  3.     # 指定 Memcache 服务器的地址和端口
  4.     server 0.0.0.0:11211;
  5.     # 设置连接池大小,即同时保持活动的连接数
  6.     keepalive 512;
  7. }
  8. # 配置一个 Nginx 服务器块
  9. server {
  10.     # 监听 80 端口
  11.     listen 80;
  12.    
  13.     # 设置网站根目录
  14.     root /data/web/php;
  15.    
  16.     # 设置服务器名称
  17.     server_name php.shuyan.com;
  18.    
  19.     # 配置一个内部 location,用于与 Memcache 服务器交互
  20.     location /memc {
  21.         # 设置为内部 location,意味着只能由其他 location 调用
  22.         internal;
  23.         
  24.         # 设置 Memcache 连接超时时间
  25.         memc_connect_timeout 100ms;
  26.         
  27.         # 设置 Memcache 发送数据超时时间
  28.         memc_send_timeout 100ms;
  29.         
  30.         # 设置 Memcache 接收数据超时时间
  31.         memc_read_timeout 100ms;
  32.         
  33.         # 设置 Memcache 的 key,这里使用查询字符串
  34.         set $memc_key $query_string;
  35.         
  36.         # 设置 Memcache 中数据的有效时间(单位:秒)
  37.         set $memc_exptime 300;
  38.         
  39.         # 指定上游服务器组,这里是前面定义的 memcache
  40.         memc_pass memcache;
  41.     }
  42.     # 配置一个 location,用于处理 PHP 请求
  43.     location ~ \.php$ {
  44.         # 设置默认索引文件
  45.         index index.php;
  46.         
  47.         # 设置 Memcache 的 key,这里使用 URI 和查询字符串
  48.         set $key $uri$args;
  49.         
  50.         # 使用 srcache_fetch 指令尝试从 Memcache 获取缓存的数据
  51.         # 如果缓存中存在,则直接返回缓存数据
  52.         # 如果缓存中不存在,则执行后面的 PHP 处理逻辑
  53.         srcache_fetch GET /memc $key;
  54.         
  55.         # 使用 srcache_store 指令将 PHP 处理的结果存储到 Memcache
  56.         srcache_store PUT /memc $key;
  57.         
  58.         # 指定 FastCGI 后端服务器的地址和端口
  59.         fastcgi_pass 192.168.239.100:9000;
  60.         
  61.         # 设置默认索引文件为 index.php
  62.         fastcgi_index index.php;
  63.         
  64.         # 包含 FastCGI 配置文件
  65.         include fastcgi.conf;
  66.     }
  67. }
复制代码
  4.5 变量定义的区别

  
  1. set $key $uri$args;:
  2.     这行代码在 location ~ \.php$ 中定义。
  3.     它用于生成用于缓存操作的 key。
  4.     $uri 包含请求的 URI,例如 /index.php。
  5.     $args 包含请求的查询字符串,例如 ?param=value。
  6.     因此,$key 包含完整的 URI 和查询字符串,例如 /index.php?param=value。
  7.     这个 key 用于 srcache_fetch 和 srcache_store 指令。
  8. set $memc_key $query_string;:
  9.     这行代码在 location /memc 中定义。
  10.     它用于生成用于 Memcache 操作的 key。
  11.     $query_string 包含请求的查询字符串,例如 param=value。
  12.     因此,$memc_key 仅包含查询字符串,例如 param=value。
  13.     这个 key 用于 memc_pass 指令。
复制代码
  
   为什么需要两个不同的 key?
   
  1. $key:
  2. 用于 srcache_fetch 和 srcache_store 指令。
  3. 包含完整的 URI 和查询字符串。
  4. 用于在缓存中查找或存储数据。
  5. $memc_key:
  6. 用于 location /memc 中的 Memcache 操作。
  7. 仅包含查询字符串。
  8. 用于与 Memcache 服务器交互。
  9. $key 和 $memc_key 虽然看起来相似,但在 Nginx 配置中有不同的用途。
  10. $key 用于 srcache_fetch 和 srcache_store 指令,包含完整的 URI 和查询字符串。
  11. $memc_key 仅包含查询字符串,用于与 Memcache 服务器交互。
  12. 通常情况下,$key 和 $memc_key 可以使用相同的值,但如果需要区别对待 URI 和查询字符串,
  13. 可以定义不同的变量。
复制代码
   4.6 客户端测试

     
         开启memcache服务             [root@PHP ~]# systemctl start memcached.service         

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立山

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表