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

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 location
fastcgi_index name;fastcgi默认的主页资源,示例:fastcgi_index index.php;
fastcgi_param parameter value [if_not_empty];设置传送给FastCGI服务器的参数值,可以是文本,变量或组合,可用于将Nginx的内置变量赋值给自定义key

1.1 NGINX 源码编译

由于原先的原先已经编译过NGINX了,所以需要删掉之前的编译文件

检查环境是否适合安装

# 删除之前编译过的 重新编译
[root@NGINX nginx-1.26.1]# make clean
rm -rf Makefile objs[root@NGINX nginx-1.26.1]# ./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)

[root@NGINX nginx-1.26.1]# make
make -f objs/Makefile
make[1]: 进入目录“/usr/local/src/nginx-1.26.1”

编译后会在objs下生成一个nginx文件,他是整个nginx的核心,将他移动到原先nginx的sbin目录下做替换

[root@NGINX nginx-1.26.1]# cd objs/
[root@NGINX objs]# ls
addon         nginx              ngx_auto_headers.h  src
autoconf.err  nginx.8            ngx_modules.c
Makefile      ngx_auto_config.h  ngx_modules.o[root@NGINX objs]# ls /usr/local/nginx/sbin
nginx      nginx.old  
[root@NGINX objs]# cp -a nginx /usr/local/nginx/sbin/nginx.new
[root@NGINX objs]# cd /usr/local/nginx/sbin/
[root@NGINX sbin]# ls
nginx  nginx.new  nginx.old[root@NGINX sbin]# mv nginx nginx_1.26
[root@NGINX sbin]# mv nginx.new nginx# 检查模块是否添加
[root@NGINX sbin]# 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

1.2 PHP 源码编译安装

[root@NGINX php-8.3.9]# ./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 \      

在编译的结尾出现了错误

解决方法,寻找包安装他

再次进行编译

[root@NGINX php-8.3.9]# ./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 \

再次测试环境

[root@NGINX php-8.3.9]# ./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 \

 继续测试环境

[root@NGINX php-8.3.9]# ./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 \

 继续测试环境

[root@NGINX php-8.3.9]# ./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 \

 继续测试

[root@NGINX php-8.3.9]# ./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 \

解决方案

[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

 再次测试环境

[root@NGINX php-8.3.9]# ./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 \

环境检测成功!

接下来进行PHP的make编译并安装

[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连接的大致操作(详细操作往下滑)

php有三个配置文件: 
php.ini			主配置文件  
php-fpm.conf	进程服务配置文件 
www.conf		扩展配置文件 --专门给web浏览器提供接口的文件[root@PHP etc]# tree 
.
├── php-fpm.conf
├── php-fpm.conf.default
├── php-fpm.d
│   ├── www.conf
│   └── www.conf.default
└── php.ini1、其中 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.default  php-fpm.d  php.inicp -p php-fpm.conf.default php-fpm.conf
vim php-fpm.conf
pid = run/php-fpm.pid3、www.conf 在意见编译好的php中etc/php-fpm.d/ 下  ls /usr/local/php/etc/php-fpm.d/  --示例文件
www.conf.defaultcp -p www.conf.default www.conf
vim php-fpm.d/www.conf
listen = 192.168.239.100:9000  # 也可以填0.0.0.0php -m 		#验证安装的模块

 PHP配置文件大致介绍

php-fpm.conf ######################################################################示例
# pid = run/php-fpm.pid
# error_log = log/php-fpm.logPHP-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的存放位置

[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和端口

[root@NGINX php-fpm.d]# mv www.conf.default www.conf
[root@NGINX etc]# vim /usr/local/php/etc/php-fpm.d/www.conf 

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

查看编译过后的php安装包内文件

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

设置所在时区

将此文件拷贝一份到php的etc目录下面

cp -p /usr/local/src/php-8.3.9/php.ini-production  /usr/local/php/etc/php.ini[root@PHP ~]# vim /usr/local/php/etc/php.ini 
# 设置时区
date.timezone = Asia/Shanghai

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

php-fpm.service 是编译之后官方提供的服务文件

[root@NGINX fpm]# cp -p /usr/local/src/php-8.3.9/sapi/fpm/php-fpm.service /lib/systemd/system/[root@NGINX fpm]# vim /lib/systemd/system/php-fpm.service

重启php服务

[root@NGINX conf.d]# systemctl restart php-fpm.service# 查看监听端口
[root@NGINX php-fpm.d]# netstat -tunlpt | grep php
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 那样每次请求都需要启动一个新的进程

[root@NGINX conf]# vim fastcgi.conf

没有他NGINX就无法与PHP进行连接,变量需要对应,这个文件中就相当于一个说明书一样

2.4.6 设置NGINX与php-fpm的连接

准备php测试页面

增加PHP数据内容
[root@NGINX conf.d]# pwd 
/usr/local/nginx/conf.d
[root@NGINX conf.d]# mkdir -p /data/web/php[root@NGINX conf.d]# vim /data/web/php/index.php 
<?phpphpinfo();
?>

编写NGINX与PHP的连接配置

[root@NGINX conf.d]# 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;}
}

重新启动服务

[root@NGINX ~]# systemctl restart nginx
[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 的模块icon-default.png?t=N7T8http://pecl.php.net/package/memcache

3.2 源码编译memcache模块

由于我们需要源码编译而恰巧又没有.configure

[root@PHP src]# cd memcache-8.2/
[root@PHP memcache-8.2]# ls
config9.m4  config.w32  docker      example.php  memcache.php  src
config.m4   CREDITS     Dockerfile  LICENSE      README        tests

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

phpize 是一个用于准备 PHP 扩展模块构建环境的脚本。要从源码编译 PHP 扩展时,通常需要先运行 phpize 脚本来生成所需的 configure 脚本和其他构建文件。

但是发现了一个问题,他似乎是需要这么一个包来支持他

[root@PHP memcache-8.2]# yum install autoconf
[root@PHP memcache-8.2]# phpize
Configuring for:
PHP Api Version:         20230831
Zend Module Api No:      20230831
Zend Extension Api No:   420230831[root@PHP memcache-8.2]# ls
autom4te.cache  config.h.in  configure.ac  docker       LICENSE       run-tests.php
build           config.m4    config.w32    Dockerfile   memcache.php  src
config9.m4      configure    CREDITS       example.php  README        tests

3.4 memcache模块的编译安装

[root@PHP memcache-8.2]# ./configure && make && make install

[root@PHP memcache-8.2]# vim /usr/local/php/etc/php.ini
# 在模块部分增加这一行
extension=memcache[root@PHP memcache-8.2]# systemctl restart php-fpm.service
[root@PHP memcache-8.2]# php-fpm -m | grep mem
memcache

4 部署 memcached 缓存数据库提高LNMP性能

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

memcache.php

它用于演示如何使用 PHP 与 Memcache 服务器进行交互,并提供了一些基本的功能,如密码保护、连接到 Memcache 服务器等。

[root@PHP memcache-8.2]# cp -p memcache.php example.php /data/web/php/

[root@PHP conf.d]# vim /data/web/php/memcache.php

4.2 部署memcached

4.3 浏览器访问memcache.php

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

但单靠这样是实现不了加速访问的,肯定是需要减少所走的路径

接下来就要介绍如何使用memcache链接NGINX

4.4 实现php的高速缓存

nginx中默认不支持memcsrcache功能,需要借助第三方模块来让nginx支持此功能,所以nginx需要重新编译,但在之前的实验中已经提前安装好模块 了如下图

# 定义一个上游服务器组,用于连接到 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;# 指定上游服务器组,这里是前面定义的 memcachememc_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 处理的结果存储到 Memcachesrcache_store PUT /memc $key;# 指定 FastCGI 后端服务器的地址和端口fastcgi_pass 192.168.239.100:9000;# 设置默认索引文件为 index.phpfastcgi_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 客户端测试

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/877522.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

配置 昇腾 Ascend C/C++ 开发环境

配置 昇腾 Ascend C/C 开发环境 flyfish 这里以Orange Pi Ai Pro 为例 先说如何配置MindStudio&#xff0c;然后再说如何查看Orange Pi Ai Pro的一些信息 Orange Pi AI Pro 开发板是香橙派联合华为精心打造的高性能AI 开发板&#xff0c;其搭载了昇腾 AI 处理器。Linux 桌面…

VSCode系列 - 如何用VSCode搭建C++高效开发环境(2)

1. 插件的用法 1.1. C/C 1.1.1. 插件介绍1.1.2. 插件配置 1.2. Clang-Format1.3. cpp-check-lint 1.3.1. cpplint1.3.2. cppcheck1.3.3. 插件的使用 1.4. C/C Advanced Lint 1.4.1. 插件介绍1.4.2. 插件配置 1.5. Bracket Pair Colorizer 1.5.1. 插件介绍1.5.2. 功能配置 1.6. …

【机器学习】探索机器学习在旅游业的革新之旅

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀目录 &#x1f50d;1. 引言&#x1f4d2;2. 机器学习在旅游需求分析中的应用&#x1f31e;用户行为数据分析&#x1f319;旅客偏好预测模型⭐…

Java面试八股之如何保证消息队列中消息不重复消费

如何保证消息队列中消息不重复消费 要保证消息队列中的消息不被重复消费&#xff0c;通常需要从以下几个方面来着手&#xff1a; 消息确认机制&#xff1a; 对于像RabbitMQ这样的消息队列系统&#xff0c;可以使用手动确认&#xff08;manual acknowledge&#xff09;机制来…

C++ 设计模式——策略模式

策略模式 策略模式主要组成部分例一&#xff1a;逐步重构并引入策略模式第一步&#xff1a;初始实现第二步&#xff1a;提取共性并实现策略接口第三步&#xff1a;实现具体策略类第四步&#xff1a;实现上下文类策略模式 UML 图策略模式的 UML 图解析 例二&#xff1a;逐步重构…

【c语言】整数在内存中的储存(大小端字节序)

整数在内存中的储存&#xff08;大小端字节序&#xff09; 1.整数在内存中的储存 2.大小端字节序 3.整数在内存中储存例子 4.字节序判断 5.死循环现象 文章目录 整数在内存中的储存&#xff08;大小端字节序&#xff09;整数在内存中的储存大小端字节序什么是大小端为什么会有…

Unity 麦扣 x 勇士传说 全解析 之 怪物基类(2)(附各模块知识的链接,零基础也包学会的牢弟)(案例难度:★★☆☆☆)

1.怪物的动画逻辑一览 2.怪物的受伤死亡逻辑一览 using System.Collections; using System.Collections.Generic; using System.Xml; using UnityEngine;public class Monster : MonoBehaviour {[Header("速度")]public float normalSpeed;public float chaseSpeed;…

在国产芯片上实现YOLOv5/v8图像AI识别-【2.5】yolov8使用C++部署在RK3588更多内容见视频

本专栏主要是提供一种国产化图像识别的解决方案&#xff0c;专栏中实现了YOLOv5/v8在国产化芯片上的使用部署&#xff0c;并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。 B站配套视频&#xff1a;https://www.bilibili.com/video/BV1or421T74f 背景…

nginx简介及功能

一、简介&#xff1a; 1、nginx、apache是什么&#xff1f; ‌Nginx‌是一个高性能的HTTP和反向代理web服务器&#xff0c;同时也提供了IMAP/POP3/SMTP服务。它由伊戈尔赛索耶夫为Rambler.ru站点开发&#xff0c;以其稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而…

OSI七层网络模型 /TCP/IP五层模型以及封装分用的详细讲解

文章目录 协议分层的好处OSI七层网络模型TCP/IP五层网络模型网络设备所在的分层(重点)封装和分用 协议分层的好处 第一点&#xff1a; 在网络通信中&#xff0c;如果使用一个协议来解决所有的问题&#xff0c;那么这个协议就会非常的庞大&#xff0c;非常不利于去学习和理解&…

2023华为od机试C卷【转盘寿司】C 实现 单调栈

#include <stdio.h> #include <stdlib.h>/*单调栈 旋转寿司3 15 6 14 3 21 9 17*/ int main() {int i 0;int len 0;int data 0;int nums[501];char c ;while(scanf("%d",&nums[i]) 1){i;len;c getchar();if(c \n)break;}int *out NULL;int *s…

C语言-部分字符串函数详解 1-4

C语言-部分字符串函数详解 1-4 前言1.strlen1.1基本用法1.2注意事项\0size_t 1.3模拟实现 2.strcpy2.1基本用法2.2注意事项**源字符串必须以 \0 结束****会将源字符串中的 \0拷贝到目标空间****目标空间必须可修改****目标空间必须能容纳下源字符串的内容** 2.3模拟实现 3.strn…

【深度学习】【语音TTS】GPT-SoVITS v2 实战,训练一个人的音色,Docker镜像

文章目录 原理Dockerdocker push训练教程: https://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1e/xyyqrfwiu3e2bgyk 原理 Docker 不用docker不行,不好分配显卡, 做个docker镜像: docker pull pytorch/pytorch:2.1.2

接口基础知识9:详解response body(响应体)

课程大纲 一、定义 HTTP响应体&#xff08;HTTP Response Body&#xff09;&#xff1a;服务器返回给客户端的数据部分&#xff0c;‌它包含了服务器对客户端请求的响应内容&#xff08;如客户端请求的资源、客户端请求的执行结果&#xff09;。 与请求类似&#xff0c;HTTP …

python之matplotlib (3 坐标轴设置)

写在前面 在说明坐标轴设置之前&#xff0c;我有必要和大家说清楚图像设置的一些方法&#xff0c;避免陷入困扰模糊的地步。前面我们说过&#xff0c;画图的三种方法&#xff08;python之matplotlib &#xff08;1 介绍及基本用法&#xff09;-CSDN博客&#xff09;。而设置也…

2024开源资产管理系统推荐 8款免费开源IT资产管理系统/软件

开源资产管理系统 开源资产管理系统是帮助企业管理、跟踪和优化其资产的强大工具。这些系统能够自动记录资产的详细信息&#xff0c;如采购日期、使用情况、维护记录等&#xff0c;从而实现资产的全生命周期管理。企业可以通过这些系统优化资产使用效率&#xff0c;减少资产闲…

【TCP】确认应答、超时重传机制和TCP报头

TCP 相关机制 TCP 基本特点&#xff1a;有连接、可靠传输、面向字节流、全双工 有连接、面向字节流和全双工都能在前面的代码中体现有连接&#xff1a;必须要先调用 accept 建立联系才能处理面向字节流&#xff1a;会拿到 clientSocket 对象的 InputStream 和 OutputStream&a…

python人工智能002:jupyter基本使用

小知识&#xff1a;将jupyter修改为中文&#xff0c;修改用户变量&#xff0c; 注意是用户变量&#xff0c;不是系统变量 新增用户变量 变量名&#xff1a;LANG 变量值&#xff1a;zh_CN.UTF8 然后重启jupyter 上一章的软件安装完成之后&#xff0c;就可以创建文件夹来学习写…

MaxKB(二):Ubuntu24.04搭建maxkb开发环境

接上文&#xff1a;windows10搭建maxkb开发环境&#xff08;劝退指南&#xff09; 上文在windows10环境搭建maxkb开发环境遇到各种坑&#xff0c;后面就转战ubuntu平台&#xff0c;果然比较顺利的完成开发环境搭建。当然遇到相关的问题还是可以参考上文《windows10搭建maxkb开发…

拟合与插值|线性最小二乘拟合|非线性最小二乘拟合|一维插值|二维插值

挖掘数据背后的规律是数学建模的重要任务&#xff0c;拟合与插值是常用的分析方法 掌握拟合与插值的基本概念和方法熟悉Matlab相关程序实现能够从数据中挖掘数学规律 拟合问题的基本提法 拟合问题的概念 已知一组数据(以二维为例)&#xff0c;即平面上n个点 ( x i , y i ) …