编译安装Apache、php、xcache、FastCGI及相关整合

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

一:编译php工作在xcache模式下

在编译安装之前,要首先确保其安装环境,需要安装相关的开发环境的包组Development tools”和“Server Platform Development

Apache

1:安装apache需要先安装apr包和apr-util包,还依赖于pcre-devel包,所以我们要先安装所依赖的包。系统自带的apr和apr-util版本较老,我们这里需要手动去升级,升级的方式有2种,一种是直接升级rpm包,还有一种可以通过源码来进行编译,我们这里使用源码编译进行安装。我们以apr-1.4.6.tar.bz2apr-util-1.5.2.tar.bz2为例。

#yum -y install pcre-devel

(1) 编译安装apr

# tar xf apr-1.4.6.tar.bz2

# cd apr-1.4.6

# ./configure --prefix=/usr/local/apr

# make && make install

(2) 编译安装apr-util

# tar xf apr-util-1.5.2.tar.bz2

# cd apr-util-1.5.2

# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr

# make && make install

(3)编译安装apache

#tar xf httpd-2.4.6.tar.bz2

#cd httpd-2.4.6

# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=event

# make && make install

各选项的意义:

--prefix=/usr/local/apache #指定httpd的安装路径

--sysconfdir=/etc/httpd24 #指定安装后配置文件的路径

--enable-so #这项是关键:支持动态模块装卸载,如果不写的话,php没办法以模块的方式编译成apache的模块了

--enable-ssl #支持https

--enable-cgi #支持cgi动态执行 

--enable-rewrite #支持url重写

--with-zlib #支持使用zlib库将数据发送到客户端之前进行压缩

--with-pcre #和依赖的pcre软件包相关

--with-apr=/usr/local/apr #依赖于apr告知apr的安装路径

--with-apr-util=/usr/local/apr-util #依赖于apr-util,告知其安装路径

--enable-modules=most #支持多数模块

--enable-mpms-shared=all #构建MPM为动态模块,将所有的模块都设为动态共享,可以在系统运行时加载

--with-mpm=prefork #指定安装的模块式prefork,如果安装后想要更改,可以再编辑LoadModule指令内容选择不同的模块。

2:为其提供服务脚本。

# cd /etc/rc.d/init.d/

# cp httpd httpd24 httpd的服务脚本为基础进行修改

#vim httpd24

找到以下选项的位置对其进行修改

110451567.png

#chkconfig --add httpd24 添加httpd24服务

#chkconfig --list httpd24 查看服务的运行状态,默认是关闭的

如果想要设定自动开机启动:

#chkconfig httpd24 on

#service httpd24 start 启动服务

检查80端口是否处于监听状态

#ss -tanl

然后我们通过浏览器做访问测试。

PHP

注意:编译安装php之前,要确保apachemysql安装成功,因为php的有些选项依赖它们的某些文件。mysql在前面的博客中我们已经演示安装了,所以我们可以安装php了。

1:我们以php-5.4.19.tar.bz2为例

#tar xf php-5.4.19.tar.bz2

#cd php-5.4.19

在这个目录下, php.ini-development是在开发环境中建议使用的模板;php.ini-production是在生产环境中建议使用的模板。

编译的时候依赖于libmcrypt-develmhash-devel,所以我们先安装这两个包。

# yum install libmcrypt-devel mhash-devel

#./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/apache/bin/apxs --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts

各选项的意义:

--prefix=/usr/local/php #指定安装路径

--with-mysql=/usr/local/mysql #指定mysql的安装路径

--with-openssl #支持加密功能

--with-mysqli=/usr/local/mysql/bin/mysql_config #指定mysql的高级接口

--enable-mbstring #支持多字节的字符

--with-freetype-dir #支持多种字体文件库

--with-jpeg-dir #支持jpeg图片格式

--with-png-dir #支持pnf图片格式

--with-zlib #支持使用zlib库将数据发送到客户端之前进行压缩

--with-libxml-dir=/usr #指定扩展标记语言库文件路径

--enable-xml #支持扩展标记语言

--enable-sockets #php可以基于sockets进行通信

--with-apxs2=/usr/local/apache/bin/apxs #指将php安装成apache的动态模块

--with-mcrypt #支持加密解密功能

-with-config-file-path=/etc #指定配置文件的路径,主配置文件php.ini放在这里

--with-config-file-scan-dir=/etc/php.d #指定主配置文件的从配置文件路径,这里放置一些以.ini 结尾的文件

--with-bz2 #支持bz2的压缩格式

--enable-maintainer-zts #取决于mpm所选择的模型,worker和event时,需要这个选项,而如果是prefork,就不需要了

在编译安装的过程中还提示有别的包需要安装,其中有libxml2,bzip2,所以我们还要安装libxml2-devel,bzip2-devel。

注意:当提示我们所依赖的包时,我们要安装包的devel的包!

#yum -y install libxml2-devel bzip2-devel

安装好了之后,再重新进行刚才执行错误的编译安装,这一步操作成功后,我们就快成功了。

接着编译:

#make && make install

至此php安装成功了。

2:由于我们安装的php还不能满足要求,所以还要修改它的配置文件。

# vim /etc/httpd24/httpd.conf

可以看到里面多了一个 modules/libphp5.so模块,有了这个模块,就可以解析php脚本了。此时php还不能识别php格式的网页,所以我们还要添加相关的配置。

找到AddType的相关说明添加选项:

AddType application/x-httpd-php .php

这样就能识别php结尾的网页了,还有些网页是以phps结尾的网页,如果也要识别这种格式的网页,那么我们还要添加选项:

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

我们要默认能识别的网页文件是以.php结尾的文件,还需要配置一些选项

找到Directorylndex的位置添加index.php

111026634.png

我们需要测试一下,但是我们有两个版本httpd,一个是编译的,还有一个是rpm包的,所以我们还要编辑一些文件

#vim /etc/profile.d/httpd.sh

export PATH=/usr/local/apache/bin:$PATH

重新读取

# . /etc/profile.d/httpd.sh

这时候测试就能找到我们所编译安装的httpd

进行测试

#httpd -t

可以验证一下

#hash

然后重启服务

#service httpd24 restart

3:验证一下我们安装的php,在这里我们用主服务器验证,主服务器默认的网页的安装路径为/usr/local/apache/htdocs

我们可以在自己的目录下编辑网页

# mkdir /web/htdocs/ -pv

# vim /web/htdocs/index.php

111141483.png

然后修改apache的主配置文件

#vim /etc/httpd24/httpd.conf

找到DocumentRoot的位置,编辑相关内容

#

DocumentRoot "/web/htdocs"

<Directory "/web/htdocs">

提供主配置文件

# cd php-5.4.19

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

重新启动使其生效

#service httpd24 restart

然后在浏览器上测试,显示我们所编辑的网页,测试成功。

Pma的配置设置

我们再安装一个软件能够基于图形化的界面进行管理

phpMyAdmin-3.5.1-all-languages.tar.bz2为例:

在这里启用基于虚拟主机的方式提供服务

首先启用虚拟主机,先创建pma放置的路径

# mkdir /web/htdocs/pma

# tar xf phpMyAdmin-3.5.1-all-languages.tar.bz2

# mv phpMyAdmin-3.5.1-all-languages/* /web/htdocs/pma

#cd /web/htdocs/pma

# cp config.sample.inc.php config.inc.php

# vim config.inc.php

111243332.png

我们先生成随机数写在要求位置,最好用命令生成,

# openssl rand -hex 4

cc0d142f

接着配置虚拟主机

#cd /etc/httpd24

# vim httpd.conf

将中心主机注释掉

#DocumentRoot "/web/htdocs"

找到vhosts

# Virtual hosts

Include /etc/httpd24/extra/httpd-vhosts.conf <------- 启用的选项

# vim /etc/httpd24/extra/httpd-vhosts.conf

将以前的配置注释掉,编辑新的配置

111411433.png

然后检查语法错误、重启服务。

#httpd -t

#service httpd24 restart

访问基于主机名,还要进行解析

111440689.png

打开hosts文件编辑

172.16.4.5 pma.magedu.com

基于主机名访问:在浏览器中输入pma.magedu.com打开网页,输入用户名、密码就OK了。

XCache

XCachephp的加速器,可以提高php的性能

xcache-3.0.3.tar.bz2为例

1、安装

# tar xf xcache-3.0.1.tar.gz

# cd xcache-3.0.1

# /usr/local/php/bin/phpize <------- 识别当前模块

# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config

# make && make install

2、编辑php.ini,整合phpxcache

首先将xcache提供的样例配置导入php.ini

# mkdir /etc/php.d

# cp xcache.ini /etc/php.d

说明:xcache.ini文件在xcache的源码目录中。是一个样例文件。

重新启动识别配置文件

#service httpd24 restart

我们提供一个测试页

#vim /web/htdocs/pma/phptest.php

<?php

phpinfo();

?>

通过浏览器查看:pma.magedu.com/phptest.php

可以找到编辑的文件

进行压力测试

ulimit: 资源限定

ulimit -n 查看当前可以打开的最大数

ulimit -n 2000 设定可以打开2000

#ab -c 100 -n 1000 http://172.16.4.5/index.php

-c: 模拟的并发数

-n: 总的请求数

注意:xcache安装好之后用ab命令测试前,要手动请求几次以生成缓存

#curl 172.16.4.5

#ab -c 2 -n 10 http://172.16.4.5/index.php

#ab -c 3 -n 100http://172.16.4.5/index.php

可以对比xcache安装前后使用ab命令压力测试的结果,就可以体会到xcache对性能的提升有多大了。

二:编译php工作在FastCGI模式下

1:如果在另外一台服务器上安装,要保证安装apachemysql成功,这里我们就不演示了

因为我们在同一台服务器上编译安装,所以我们要将前面编译的php剥离

先停止httpd服务

#service httpd24 stop

#cd /etc/httpd24/

#vim httpd.conf

将相关的模块注释掉

#LoadModule php5_module modules/libphp5.so如果事先没有编译php,就没有这一步了。

我们将以前编译的php改名,

# mv php-5.4.19 php-5.4.19.module

2:重新解压编译安装

# tar xf php-5.4.19.tar.bz2

#cd php-5.4.19

--prefix=/usr/local/php --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d

前面我们编译的时候已经用过了这些路径,所以我们要将有冲突的路径修改一下,所以最终结果为:

# ./configure --prefix=/usr/local/php54 --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 --enable-fpm --with-mcrypt --with-config-file-path=/etc/php54 --with-config-file-scan-dir=/etc/php54/php.d --with-bz2

# make && make install

php提供配置文件:

# mkdir /etc/php54

# mkdir /etc/php54/php.d

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

3、配置php-fpm

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

#cd php-5.4.19

# 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

php-fpm提供配置文件:

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

编辑php-fpm的配置文件:

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

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

pm.max_children = 30 最多能启动多少个进程来响应用户请求的

pm.start_servers = 5 在启动时,启动几个空闲进程

pm.min_spare_servers = 2 最小空闲进程数

pm.max_spare_servers = 8 最大空闲进程数

pm.process_idle_timeout = 10s; 进程的空闲超时时间

pm.max_requests = 500 每一个子进程最多能够接受多少请求

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

注意:刚开始启动的进程数不能小于最小的空闲进程数,还不能大于最大空闲进程数

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

# service php-fpm start

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

# ps aux | grep php-fpm

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

# netstat -tnlp | grep php-fpm

tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 689/php-fpm

配置httpd

1、启用httpd的相关模块

# vim /etc/httpd24/httpd.conf

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

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

2、配置虚拟主机支持使用fcgi

# vim /etc/httpd24/extra/httpd-vhosts.conf

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

ProxyRequests Off

ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT_ROOT/$1

例如:

<VirtualHost *:80>

DocumentRoot "/www/magedu.com"

ServerName magedu.com

ServerAlias www.magedu.com

ProxyRequests Off

ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/web/htdocs/pma/$1

<Directory "/www/magedu.com">

Options none

AllowOverride none

Require all granted

</Directory>

</VirtualHost>

ProxyRequests Off:关闭正向代理

ProxyPassMatch:把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道运行的目录和URI,所以这里直接在fcgi://127.0.0.1:9000后指明了这两个参数,其它的参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定。

将中心主机注释掉

#DocumentRoot "/web/htdocs"

找到vhosts

# Virtual hosts

Include /etc/httpd24/extra/httpd-vhosts.conf <------- 启用的选项



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

# vim /etc/httpd24/httpd.conf

(1)、添加如下二行

AddType application/x-httpd-php .php

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

(2)、定位至DirectoryIndex index.html

修改为:

DirectoryIndex index.php index.html

然后进行测试验证

#httpd -t

启动服务

#service httpd24 start

# ss -tanl 查看80端口是否处于监听状态

访问我们前面所编辑的测试页面,/web/htdocs/pma/目录下的phptest.php

在浏览器中打开172.16.4.5/phptest.php

补充:Apache httpd 2.4以前的版本中,要么把PHP作为Apache的模块运行,要么添加一个第三方模块支持PHP-FPM实现。





本文转自 宋鹏超 51CTO博客,原文链接:http://blog.51cto.com/qidian510/1282663,如需转载请自行联系原作者

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
8月前
|
Ubuntu Apache PHP
解决Ubuntu下Apache不解析PHP问题
解决Ubuntu下Apache不解析PHP问题
|
2月前
|
数据库连接 PHP Apache
PHP在Apache中如何运行?
PHP在Apache中如何运行?
52 5
|
5月前
|
关系型数据库 MySQL 应用服务中间件
win7系统搭建PHP+Mysql+Apache环境+部署ecshop项目
这篇文章介绍了如何在Windows 7系统上搭建PHP、MySQL和Apache环境,并部署ECShop项目,包括安装配置步骤、解决常见问题以及使用XAMPP集成环境的替代方案。
65 1
win7系统搭建PHP+Mysql+Apache环境+部署ecshop项目
|
5月前
|
关系型数据库 Linux 网络安全
"Linux系统实战:从零开始部署Apache+PHP Web项目,轻松搭建您的在线应用"
【8月更文挑战第9天】Linux作为服务器操作系统,凭借其稳定性和安全性成为部署Web项目的优选平台。本文以Apache Web服务器和PHP项目为例,介绍部署流程。首先,通过包管理器安装Apache与PHP;接着创建项目目录,并上传项目文件至该目录;根据需要配置Apache虚拟主机;最后重启Apache服务并测试项目。确保防火墙允许HTTP流量,正确配置数据库连接,并定期更新系统以维持安全。随着项目复杂度提升,进一步学习高级配置将变得必要。
415 0
|
8月前
|
关系型数据库 MySQL PHP
unbuntu搭建LAMP(Apache2+PHP+MySQL+phpmyadmin)
unbuntu搭建LAMP(Apache2+PHP+MySQL+phpmyadmin)
|
8月前
|
运维 Linux Apache
LAMP架构调优(十)——Apache禁止指定目录PHP解析与错误页面优化
LAMP架构调优(十)——Apache禁止指定目录PHP解析与错误页面优化
289 2
|
8月前
|
Apache
apache2.4集成php7或8均失败
apache2.4集成php7或8均失败
65 0
|
8月前
|
安全 网络安全 Apache
Windows下Apache部署多个php项目
在 Windows 系统下,使用 Apache 服务器发布多个 PHP 项目是一项常见的任务。本文将介绍如何在 Windows 操作系统下使用 Apache 发布多个 PHP 项目。在 Windows 操作系统下使用 Apache 发布多个 PHP 项目可能有一些挑战,但是只要您按照本文的步骤进行操作,您就可以成功地完成这项任务。希望本文能够对您有所帮助。
128 0
|
25天前
|
存储 人工智能 大数据
The Past, Present and Future of Apache Flink
本文整理自阿里云开源大数据负责人王峰(莫问)在 Flink Forward Asia 2024 上海站主论坛开场的分享,今年正值 Flink 开源项目诞生的第 10 周年,借此时机,王峰回顾了 Flink 在过去 10 年的发展历程以及 Flink社区当前最新的技术成果,最后展望下一个十年 Flink 路向何方。
313 33
The Past, Present and Future of Apache Flink
|
3月前
|
SQL Java API
Apache Flink 2.0-preview released
Apache Flink 社区正积极筹备 Flink 2.0 的发布,这是自 Flink 1.0 发布以来的首个重大更新。Flink 2.0 将引入多项激动人心的功能和改进,包括存算分离状态管理、物化表、批作业自适应执行等,同时也包含了一些不兼容的变更。目前提供的预览版旨在让用户提前尝试新功能并收集反馈,但不建议在生产环境中使用。
900 13
Apache Flink 2.0-preview released

推荐镜像

更多