千家信息网

编译安装LAMP(php-fpm)步骤详解

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,内容:第一部分:编译安装LAMP(php以模块的方式工作)第二部分:编译安装LAMP(php以fpm的方式工作)第一部分:前面介绍我们知道,apache + php结合的方式大概几种:第一种:把php
千家信息网最后更新 2026年11月01日编译安装LAMP(php-fpm)步骤详解

内容:

第一部分:编译安装LAMP(php以模块的方式工作)

第二部分:编译安装LAMP(php以fpm的方式工作)



第一部分:

前面介绍我们知道,

apache + php结合的方式大概几种:

第一种:把php编译时直接编译成apache的模块、module模块化的方式进行工作

第二种:CGI、通用网关接口、apache基于CGI跟hph通信

第三种:fastcgi方式,他也是一种协议,在这种模块下他们两个是这样结合的:

本来php是做为一个模块或都是php解析器运行的,不是监听在某个套接字上接收别人的请求的,而是让别人调用为一个进程使用的,可能是做为别人的子进程在运行,但是工作在fastcgi这种模块下的hph自行启用为一个服务进程,

他监听在某个套接字上,随时可以接受来自客户端的请求的,他也是有一个主进程的,为了可以响应多个用户的请求,他会启用多个子进程,这些子进程我们也可以称为工作进程,

他也是有空闲进程的,一但有客户请求他马上使用空闲的进程响应客户端的请求,将结果返回给前端的调用者,在php5.3.3版本之前他是没有这个能力了,只能工作在模块和CGI的方式下,而在5.3.3之后这个模块直接被收进php模块中,这种模块就叫php-fpm。

所以在以后编译php时,要想跟apache结合,就要编译成php-fpm,这是基于fastcgi工作的模式,并启动这服务进程,也就意味着他是通过套接字跟前端的调用者通信,既然基于套按字通信了,那么前端的web服务器和后面的php服务器完全可以工作在不同的主机上,实现了所谓的分层机制。

apache不会跟数据库打交道,他是个静态web服务器,跟数据库打交道的是应用程序,作为应用程序的源驱动能够基于某个API跟服务器之间建立会话,而后他会通过我们的mysql语句发送给数据库,数据库再将结果返回给应用程序,不是php进程,而是php进程中所执行的代码。



编译安装LAMP

1、准备干净的操作系统,并且编译环境准备

2、相关的编译源码包准备

3、选择编译安装的版本(centos6.8+httpd2.4.10+mariadb5.5.46+php5.6.4)

4、编译安装以及测试LAMP


1、编译安装的环境准备:

# yum groupinstall "Development Tools" "Server Platform Development" -y

2、准备相关的源码包:

下载地址:

apache编译相关

apr="http://mirrors.aliyun.com/apache/apr/apr-1.5.2.tar.bz2"

aprutil="http://mirrors.aliyun.com/apache/apr/apr-util-1.5.4.tar.bz2"

HTTPD="http://mirrors.aliyun.com/apache/httpd/httpd-2.4.23.tar.gz"

PHP编译相关:

PHP="http://mirrors.sohu.com/php/php-5.4.28.tar.gz"

libmytRPM="http://mirrors.aliyun.com/epel/6/x86_64/libmcrypt-2.5.8-9.el6.x86_64.rpm"

libdelRPM="http://mirrors.aliyun.com/epel/6/x86_64/libmcrypt-devel-2.5.8-9.el6.x86_64.rpm"

mariadb编译相关:

MYSQL="http://cdn.mysql.com//archives/mysql-5.5/mysql-5.5.41-linux2.6-x86_64.tar.gz"


这里操作的编译安装顺序:apache--mariadb--PHP



一、编译安装apache


1、解决依赖关系

httpd-2.4.10需要较新版本的apr和apr-util,因此需要事先对其进行升级。apr可以理解是中间的转换器,是的apache能运行在windows、linux、MAC等多平台上,升级方式有两种,一种是通过源代码编译安装,一种是直接升级rpm包。

(1) 编译安装apr

# tar xf apr-1.5.2.tar.bz2
# cd apr-1.5.2
# ./configure --prefix=/usr/local/apr
# make && make install

(2) 编译安装apr-util

# tar xf apr-util-1.5.4.tar.bz2
# cd apr-util-1.5.4
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
# make && make install

(3) httpd-2.4.10编译过程也要依赖于pcre-devel软件包,需要事先安装。此软件包系统光盘自带,因此,找到并安装即可。

# yum install pcre-devel -y


2、编译安装httpd-2.4.10

# tar xf httpd-2.4.10.tar.bz2
# cd httpd-2.4.10
# ./configure --prefix=/usr/local/apache2 --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork --with-pcre --with-zlib --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/
# make && make install

3、启动httpd:

[root@localhost php-5.6.4]# echo "export PATH=/usr/local/apache2/bin:$PATH" > /etc/profile.d/httpd.sh [root@localhost php-5.6.4]# source /etc/profile.d/httpd.sh


二、安装mariadb-5.5.46

1、mysql的安装有三种方式:

rpm包安装

二进制的通用包安装

源码的编译安装

这里演示的是二进制的通用包安装,注意:二进制的通用包和源码包命名是有区别的,千万不要混淆,二进制包一般带有linux字样,如mariadb-5.5.46-linux-x86_64.tar.gz是二进制包,而mariadb-5.5.46.tar.gz则是源码包!

这里演示把数据库文件存放在一个目录中

这里假设挂载目录为/mydata,而后需要创建/mydata/data目录做为mysql数据的存放目录。

2、新建用户以安全方式运行进程:

# groupadd -r mysql
# useradd -g mysql -r -s /sbin/nologin
# mkdir -pv /mydata/data
# chown -R mysql:mysql /mydata/data


3、安装并初始化mysql-5.5.46

# tar xf mariadb-5.5.46-linux-x86_64.tar.gz -C /usr/local
# cd /usr/local/
# ln -sv mariadb-5.5.46-linux-x86_64  mysql
# cd mysql
# chown -R mysql:mysql  .
# scripts/mysql_install_db --user=mysql --datadir=/mydata/data


4、为mysql提供主配置文件:

# cd /usr/local/mysql
# cp support-files/my-large.cnf  /etc/my.cnf

修改配置:

thread_concurrency = 2 #并修改此文件中thread_concurrency的值为你的CPU个数乘以2
datadir = /mydata/data #需要添加如下行指定mysql数据文件的存放位置


5、为mysql提供sysv服务脚本:

# cd /usr/local/mysql
# cp support-files/mysql.server  /etc/rc.d/init.d/mysqld
# chmod +x /etc/rc.d/init.d/mysqld

添加至服务列表:

# chkconfig --add mysqld# chkconfig mysqld on

而后就可以启动服务测试使用了。


为了使用mysql的安装符合系统使用规范,并将其开发组件导出给系统使用,这里还需要进行如下步骤:

6、输出mysql的man手册至man命令的查找路径:

编辑/etc/man.config,添加如下行即可:

MANPATH  /usr/local/mysql/man

7、输出mysql的头文件至系统头文件路径/usr/include:

这可以通过简单的创建链接实现:

# ln -sv /usr/local/mysql/include  /usr/include/mysql

8、输出mysql的库文件给系统库查找路径:

# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf

而后让系统重新载入系统库:

# ldconfig

9、修改PATH环境变量,让系统可以直接使用mysql的相关命令。

#vim /etc/profile.d/mysql.sh export PATH=/usr/local/mysql/bin:$PATHsource /etc/profile.d/mysql.sh


三、编译安装php-5.6.4


1、解决依赖关系:

如果想让编译的php支持mcrypt扩展,需要安装两个rpm包:

# rpm -ivh libmcrypt-2.5.8-9.el6.x86_64.rpm# rpm -ivh libmcrypt-devel-2.5.8-9.el6.x86_64.rpm


2、编译安装php-5.6.4

# yum install -y libxml2-devel
# tar xf php-5.6.4.tar.xz
# cd php-5.6.4
#./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml  --enable-sockets --with-apxs2=/usr/local/apache2/bin/apxs --with-mcrypt  --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d   --enable-maintainer-zts
# make
# make intall


注意:如果httpd使用线程模型MPM,需要额外的--enable-maintainer-zts选项;

注意:如果要以fpm方式运行php,需要编译时移除--with-apxs选项,额外添加--enable-fpm选项;


为php提供配置文件(位于解压的源码包目录):

# cp php.ini-production /etc/php.ini


3、 编辑apache配置文件httpd.conf,以apache支持php

 # vim /etc/httpd/httpd.conf

添加如下二行

   AddType application/x-httpd-php  .php   AddType application/x-httpd-php-source  .phps


定位至DirectoryIndex index.html

修改为:

    DirectoryIndex  index.php  index.html


而后重新启动httpd,或让其重新载入配置文件即可测试php是否已经可以正常使用。


4、这里安装phpMyAdmin进行测试验证:

1、解压phpMyAdmin-4.4.14.1-all-languages.zip

2、讲phpMyAdmin-4.4.14.1-all-languages移至web站点的根目录,并命名为pma目录:/usr/local/apache2/htdocs/pma

3、进入pma目录,启用默认到配置文件

cp libraries/config.default.php config.inc.php

4、编辑该配置文件,设置相应的数据库帐号和密码

5、测试打开该目录的web站点,只要能登录上数据库,说明,A+M+P已经结合工作成功。

测试正常,至此,LAMP已经编译成功,并能工作。



第二部分、编译安装LAMP(php以fpm的方式工作)

一、编译安装LAMP

1、编译安装:

和前面的步骤一样,只不过在编译安装PHP时,移除--with-apxs选项,额外添加--enable-fpm选项;

#./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml  --enable-sockets  --with-mcrypt  --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d   --enable-maintainer-zts --enable-fpm


2、为php提供配置文件:

# cp php.ini-production /etc/php.ini


3、配置php-fpm

为php-fpm提供Sysv init脚本,并将其添加至服务列表:

# cp sapi/fpm/init.d.php-fpm  /etc/rc.d/init.d/php-fpm
# chmod +x /etc/rc.d/init.d/php-fpm
# chkconfig --add php-fpm
# chkconfig php-fpm on


4、为php-fpm提供配置文件:

# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf


5、编辑php-fpm的配置文件:

# vim /usr/local/php/etc/php-fpm.conf

配置fpm的相关选项为你所需要的值,并启用pid文件(如下最后一行):

pid = /usr/local/php/var/run/php-fpm.pid


6、接下来就可以启动php-fpm了:

# service php-fpm start


使用如下命令来验正(如果此命令输出有中几个php-fpm进程就说明启动成功了):

[root@localhost fpm]# ss -tanlState       Recv-Q Send-Q                            Local Address:Port                              Peer Address:Port LISTEN      0      50                                            *:3306                                         *:*     LISTEN      0      32                                            *:21                                           *:*     LISTEN      0      128                                          :::22                                          :::*     LISTEN      0      128                                           *:22                                           *:*     LISTEN      0      100                                         ::1:25                                          :::*     LISTEN      0      100                                   127.0.0.1:25                                           *:*     [root@localhost fpm]# service php-fpm startStarting php-fpm  done[root@localhost fpm]# ss -tanlState       Recv-Q Send-Q                            Local Address:Port                              Peer Address:Port LISTEN      0      128                                   127.0.0.1:9000                                         *:*     LISTEN      0      50                                            *:3306                                         *:*     LISTEN      0      32                                            *:21                                           *:*     LISTEN      0      128                                          :::22                                          :::*     LISTEN      0      128                                           *:22                                           *:*     LISTEN      0      100                                         ::1:25                                          :::*     LISTEN      0      100                                   127.0.0.1:25                                           *:*     [root@localhost fpm]#


默认情况下,fpm监听在127.0.0.1的9000端口,也可以使用如下命令验正其是否已经监听在相应的套接字。




二、配置httpd

1、启用httpd的相关模块

在Apache httpd 2.4以后已经专门有一个模块针对FastCGI的实现,此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩充,因此,这两个模块都要加载

LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

同时把libphp5.so的模块注释

#LoadModule php5_module        modules/libphp5.so


2、配置中心主机支持使用fcgi(也可以配置虚拟主机,配置差不多,这里就不演示了)

在相应的虚拟主机中添加类似如下两行。

ProxyRequests Off  #关闭正向代理ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/usr/local/apache2/htdocs/$1  #把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道运行的目录和URI,所以这里直接在fcgi://127.0.0.1:9000后指明了这两个参数,其它的参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定。


3、编辑apache配置文件httpd.conf,让apache能识别php格式的页面,并支持php格式的主页

  # vim /etc/httpd/httpd.conf   AddType application/x-httpd-php  .php   AddType application/x-httpd-php-source  .phps


定位至DirectoryIndex index.html

修改为:

    DirectoryIndex  index.php  index.html


测试成功,已经能访问php页面

三、测试phpMyAdmin:

这里再次安装phpMyAdmin进行测试验证:

1、解压phpMyAdmin-4.4.14.1-all-languages.zip

2、将phpMyAdmin-4.4.14.1-all-languages移至web站点的根目录,并命名为pma目录:/usr/local/apache2/htdocs/pma

3、进入pma目录,启用默认到配置文件

cp libraries/config.default.php config.inc.php

4、编辑该配置文件,设置相应的数据库帐号和密码

$cfg['Servers'][$i]['user'] = 'nihao';$cfg['Servers'][$i]['password'] = '123456';

5、测试打开该目录的web站点,只要能登录上数据库,说明,A+M+P已经结合工作成功。


测试正常,至此,LAMP已经编译成功,并能工作。



OK,更多文章请关注我的博客。

编译 文件 配置 模块 进程 目录 数据 方式 工作 测试 服务 数据库 系统 源码 运行 二进制 命令 准备 成功 两个 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 湖北九亚互联网络科技有限公司 深圳市人人互联网科技有限公司 中国互联网科技工作委员会毛军 互联网未来科技 奇酷互联网科技公司 北京互联网络科技有限公司 上海喔噻互联网科技 奇士达互联网科技 狮子座互联网科技培训 互联网金融监管科技 湖南洣水互联网科技有限公司扣款 来此购互联网科技有限公司 华夏互联网科技业 健康食品互联网创新科技园项目 科技赋能视角下互联网保险发展 互联网金融科技公司的优势 互联网科技快讯热点 互联网高科技绘画 高科技和互联网的现代国家 科技发展第三阶段互联网时代 杭州互联网科技公司 互联网与未来科技 唐信互联网科技 大连 新兴科技互联网创新大赛颁奖典礼 乌苏新华互联网科技做什么的 华中科技大学互联网的牛人 广东工业互联网大赛深圳学泰科技 九思连强互联网电子科技有限公司 珠海东科互联网科技有限公司 保山浩联互联网科技有限公司
0