apache和php的两种组合方式,module和fpm

2024-08-24 06:38

本文主要是介绍apache和php的两种组合方式,module和fpm,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天我要记录的,是php与apache协同工作的两种方式。一是module模式,php作为apache的一个模块来运行,二是php的fpm模式,亦即php作为单独服务来受理apache的请求。这里只说编译安装。

1、module模式:

centos6自带的apache2.2,默认就是module模式,在配置文件/etc/httpd/conf.d/php.conf中能看到,Apache是加载了php模块。

编译安装:我常用的configure命令是:

 ./configure --prefix=/usr/local/php.mod --sysconf=/usr/local/php.mod/conf --with-config-file-path=/usr/local/php.mod/conf --with-config-file-scan-dir=/usr/local/php.mod/conf.d --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-openssl --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --with-mcrypt --with-bz2 --with-apxs2=/usr/local/apache/bin/apxs --enable-maintainer-zts

其中:

--prefix=/usr/local/php.mod 指定安装路径。我加了个mod后缀,说明是php-mod模式安装的。

--sysconf=/usr/local/php.mod/conf 指定配置文件路径,貌似默认就是这里,但我习惯写上,如果是指向不存在的路径,它会自动创建目录。

--with-config-file-path=/usr/local/php.mod/conf 和--with-config-file-scan-dir=/usr/local/php.mod/conf.d 也是指定配置文件路径,我觉得写上更严谨,明确它搜索配置文件的方式。

--with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd 用于连mysql,用php内置的mysqlnd驱动,都不用指mysql路径。

--with-apxs2=/usr/local/apache/bin/apxs 指明是模块化安装php,apxs是apache的接口,这里就指明php是如何成为apache的模块的。通过它可以找到.so模块文件的安装路径。如果是php-fpm模式,此项就不需要了。

--enable-maintainer-zts

指明支持worker或event的mpm模式,如果是php-fpm模式,此项就不需要。

下一步:编译安装以后,要确认apache配置文件中开启了php模块,亦即:

LoadModule php5_module modules/libphp5.so没有被注释,apache2.2当中,需要区分mpm:

<IfModule prefork.c>LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>LoadModule php5_module modules/libphp5-zts.so
</IfModule>

apache2.4中实测不区分,不需要-zts后缀。所谓libphp.so这个模块文件,就是编译时--with-apxs2选项告诉它应该放在哪里的。

下面这三项一定要有。

AddType application/x-httpd-php .phpAddType application/x-httpd-php-source .phpsDirectoryIndex index.php

如果需要连接mysql,php.ini文件中的socket一定要指定准确。因为php-mod模式是作为apache的模块,所以配置好以后,启动或重载apache服务即可。

但是php.ini文件哪里来的呢?编译安装时不会自动有这个文件,而是在源码目录中,有两个文件:

php.ini-development,php.ini-production,一看便知。随便复制哪个过去,改名为php.ini即可。很多源码都有提供配置范例文件。

2、php-fpm模式:

编译安装时:我用的configure命令是这样:

./configure --prefix=/usr/local/php.fpm --sysconf=/usr/local/php.fpm/conf --with-config-file-path=/usr/local/php.fpm/conf --with-config-file-scan-dir=/usr/local/php.fpm/conf.d --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-openssl --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --with-mcrypt --with-bz2 --enable-fpm

大部分跟php-mod模式一样。但是不一样的是:

--enable-fpm说明是fpm模式安装,取代了之前的--with-apxs2参数。既然不是apache模块,自然--enable-maintainer-zts也就不需要了,但是这一点我没验证,如果有兴趣可以看官方文档。

下一步:编译完成后,依然要配置。

php.ini还是要配置socket项。

php-fpm.conf中需要指明pid路径,要和服务脚本中的pid路径一致。也能看到php-fpm服务监听的ip和端口。根据需要配置即可。

apache配置文件中,要确认没有开启php模块,同时要开启proxy和proxy-fcgi模块。并添加:

ProxyRequests OffProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/path/to/document_root/$1

这里是正则表达式应用,意思是把.php结尾的url过滤出来发给php-fpm,那个$1是对正则分组匹配结果的引用。

apache通过自身的代理模块,把接收到的php请求转发给php-fpm服务,再把php处理之后的结果发给客户端浏览器。相当于php另立门户,成了分包商,apache成了总包商。

如果转发失败,apache直接把.php发过去,客户端浏览器收到的是不能解析的内容,它会提示你另存到磁盘。

当然下面这几项也是需要的:

AddType application/x-httpd-php .phpAddType application/x-httpd-php-source .phpsDirectoryIndex index.php

由于php-fpm是单独的服务,因此,要把服务脚本文件样本sapi/fpm/init.d.php-fpm放到init.d目录中去,确认pid路径和php-fpm.conf中的一致,并赋予x权限。至此,service php-fpm start就可以运行了。

本文完。

这篇关于apache和php的两种组合方式,module和fpm的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1101728

相关文章

hdu4869(逆元+求组合数)

//输入n,m,n表示翻牌的次数,m表示牌的数目,求经过n次操作后共有几种状态#include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdlib.h>#includ

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

【即时通讯】轮询方式实现

技术栈 LayUI、jQuery实现前端效果。django4.2、django-ninja实现后端接口。 代码仓 - 后端 代码仓 - 前端 实现功能 首次访问页面并发送消息时需要设置昵称发送内容为空时要提示用户不能发送空消息前端定时获取消息,然后展示在页面上。 效果展示 首次发送需要设置昵称 发送消息与消息展示 提示用户不能发送空消息 后端接口 发送消息 DB = []@ro

脏页的标记方式详解

脏页的标记方式 一、引言 在数据库系统中,脏页是指那些被修改过但还未写入磁盘的数据页。为了有效地管理这些脏页并确保数据的一致性,数据库需要对脏页进行标记。了解脏页的标记方式对于理解数据库的内部工作机制和优化性能至关重要。 二、脏页产生的过程 当数据库中的数据被修改时,这些修改首先会在内存中的缓冲池(Buffer Pool)中进行。例如,执行一条 UPDATE 语句修改了某一行数据,对应的缓

Java 多线程的基本方式

Java 多线程的基本方式 基础实现两种方式: 通过实现Callable 接口方式(可得到返回值):

前端form表单+ifarme方式实现大文件下载

// main.jsimport Vue from 'vue';import App from './App.vue';import { downloadTokenFile } from '@/path/to/your/function'; // 替换为您的函数路径// 将 downloadTokenFile 添加到 Vue 原型上Vue.prototype.$downloadTokenF

SigLIP——采用sigmoid损失的图文预训练方式

SigLIP——采用sigmoid损失的图文预训练方式 FesianXu 20240825 at Wechat Search Team 前言 CLIP中的infoNCE损失是一种对比性损失,在SigLIP这个工作中,作者提出采用非对比性的sigmoid损失,能够更高效地进行图文预训练,本文进行介绍。如有谬误请见谅并联系指出,本文遵守CC 4.0 BY-SA版权协议,转载请联系作者并注

SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频

摘要 我们介绍 SAM2POINT,这是一种采用 Segment Anything Model 2 (SAM 2) 进行零样本和快速 3D 分割的初步探索。 SAM2POINT 将任何 3D 数据解释为一系列多向视频,并利用 SAM 2 进行 3D 空间分割,无需进一步训练或 2D-3D 投影。 我们的框架支持各种提示类型,包括 3D 点、框和掩模,并且可以泛化到不同的场景,例如 3D 对象、室