编译安装LAMP之二

在上一篇中,我们已经安装httpd,以及mysql服务。那么接下来,我们将安装php。

我们知道,php工作的模式有三种:cgi, module, fastcgi。通常,apache与php是以模块的方式结合的,鉴于fastcgi的工作模式会有更好的效率,待会儿也会讲解。

一、以模块化的方式编译php, php作为apache的模块被加载

如果我们先前没有安装: libxml2 libxml2-devel bzip2-devel libmcrypt libmcrypt-devel

需要安装这些包:

[[email protected] ~]# yum -y install libxml2 libxml2-devel bzip2-devel libmcrypt libmcrypt-devel

不过,我这边没有libmcrypt*包:

No package libmcrypt available.

No package libmcrypt-devel available.

可以到这个网站下载rpm包:http://rpm.pbone.net/

[[email protected] ~]# ls | grep lib*
[[email protected] ~]# ls lib*
libmcrypt-2.5.8-9.el6.i686.rpm  libmcrypt-devel-2.5.8-9.el6.i686.rpm
[[email protected] ~]# rpm -ivh lib*
warning: libmcrypt-2.5.8-9.el6.i686.rpm: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
Preparing...                ########################################### [100%]
   1:libmcrypt              ########################################### [ 50%]
   2:libmcrypt-devel        ########################################### [100%]

1、解压,编译

--with-apxs2=/usr/local/apache/bin/apxs    # 基于apxs实现让php编译成apache模块

ok, 言归正传。go...

[[email protected] ~]# tar xf php-5.4.30.tar.gz -C /usr/local/src
[[email protected] ~]# cd /usr/local/src/php-5.4.30

[[email protected] php-5.4.30]# ./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 --enable-fpm --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                # php安装路径   
--with-mysql=/usr/local/mysql          # mysql安装路径   
--with-openssl                         # 支持openssl功能   
--with-mysqli=/usr/local/mysql/bin/mysql_config    # mysql与apache访问的另一种接口,安装在二进制目录下   
--enable-mbstring                      # 多字节string   
--with-freetype-dir                    # 安装的字体库头文件   
--with-jpeg-dir                        # jpeg类型的库   
--with-png-dir                         # png类型的库   
--with-zlib                            # 互联网上通用压缩库,先压缩再传送,减少带宽   
--with-libxml-dir=/usr                 # xml库文件的路径   
--enable-xml                           # 支持xml功能      
--enable-sockets                       # php支持套接字功能 
--enable-fpm                           # PHP FastCGI
--with-apxs2=/usr/local/apache/bin/apxs    # 基于apxs实现让php编译成apache模块   
--with-mcrypt                          # 支持额外的加密库   
--with-config-file-path=/etc           # php配置文件放置路径     
--with-config-file-scan-dir=/etc/php.d # php配置文件的分段文件放置路径   
--with-bz2                             # 压缩库   
--enable-maintainer-zts                # 当apache使用worker或event这两个MPM,编译时使用该选项,这一项的使用取决于apache是什么类型的,apache使用的是prefork就不需要;如果使用的是event或者是worker就要添加这一项;apache以线程工作就必须编译这一项

[[email protected] php-5.4.30]# make && make install

/usr/local/php        # 是php的主目录
/usr/local/php/bin    # php的命令行工具
/usr/local/php/etc    # 配置文件

2、为php提供配置文件

在编译的时候已经指定了配置文件的路径,所以php会自动到/etc/目录下去找其配置文件

[[email protected] php-5.4.30]# cp php.ini-production /etc/php.ini

3、整合apache和php

我们知道,对于单纯的web服务器,而不是应用程序服务器来说,它仅支持html格式的静态网页格式。那么apache是如何能够支持动态网页的呢?比如,php等。

PHP有三种工作模式:cgi, moudle, fastcgi。当apache发现处理的页面是动态网页(看文件名后缀),那么它就在配置文件中找,看哪种应用程序(handler)能够编译解释这种类型,就把这些页面交给相应的应用程序处理, 然后应用程序返回apache纯html静态页面,然后apache再把html页面返回给客户端浏览器。

1、编辑 /etc/httpd/httpd.conf配置文件, 定位到 AddType

我们查看/etc/httpd/httpd.conf, 可以看到php被作为apache的一个模块被加载

[[email protected] ~]# vi /etc/httpd/httpd.conf
# 添加下面两行,目的是为了让Apache能解释".php"的文件
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

2、定位到 DirectoryIndex

<IfModule dir_module>
    DirectoryIndex index.php index.html        # 修改apache默认页面类型
</IfModule>

3、测试

[[email protected] ~]# httpd -t
[[email protected] ~]# service httpd restart

[[email protected] ~]# vi /usr/local/apache/htdocs/index.php
# 添加如下内容
<?php
	phpinfo();
?>

通过浏览器访问, 如果出现以下页面,说明OK

4、php与mysql结合

编译php时,确保--with-mysql选项,这样php就能够调用mysql提供的库

[[email protected] ~]# vi /usr/local/apache/htdocs/index.php

<?php
        $conn = mysql_connect(‘localhost‘, ‘root‘, ‘123456‘);
        if ($conn)
                echo "Connect MySQL Success";
        else
                echo "Failure, can‘t connect mysql";
?>

通过浏览器访问,如果出现以下页面,说明OK


apache中配置php支持module模式、cgi模式和fastcgi模式的实验

首先安装apache、mysql和php,依次顺序安装。

apache需要支持fastCGI, 并且php也要支持fastCGI, 两者同时都支持才可以。

1.apache、mysql的安装比较简单,略过

2. php的安装,我安装的是php5.4.30内置了php-fpm,所以不需要再单独下补丁了。

如果php是较低的版本,可能需要单独安装php-fpm

[[email protected] ~]# yum -y install php-fpm

如果内置php-fpm, 那么在编译的时候,指定 --enable-fpm 选项即可

# ./configure --prefix=/usr/local/php
--with-mysql=/usr/local/mysql
--enable-fpm                                # fastCGI
--with-apxs2=/usr/local/apache/bin/apxs     # module

注意:

--enable-fastcgi

--enable-force-cgi-redirect

这2个php新版本已经内置支持,所以如果加上这2个参数,make完毕会提示这2个参数找不到。所以不需要加这2个参数了。

--with-apxs2

这个参数看到有的文章说需要fastcgi模式的话,就不能配置这个,其实也不完全是这样,这个参数的用途只不过是把php的解释模块编译成so文件添加到apache的modules中,并且自动添加到conf文件。如果我们不想用模块模式的话,在httpd.conf中把:

LoadModule php5_module modules/libphp5.so

这行注释掉就可以了。

3.apache mod_fastcgi的安装

### 可能需要如下依赖包,一般不用,先编译mod_fastcgi, 如果编译报错,再安装
### yum -y install httpd-devle apr apr-devel libtool

# wget http://www.fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gz
# tar -zxvf mod_fastcgi-2.4.6.tar.gz
# cd mod_fastcgi-2.4.6
# cp Makefile.AP2 Makefile
# vim Makefile 
## 将Makefile中的top_dir 路径改成你的apache的安装路径
top_dir = /usr/local/apache

# make && make install 
### 安装成功后,会自动把mod_fastcgi.so复制到/usr/local/apache/modules目录下

接下来是如何配置这4种模式:

1.模块模式

这种模式最简单,在http.conf中增加

LoadModule php5_module modules/libphp5.so

即可。然后在添加 AddType

<IfModule mime_module>
AddType application/x-httpd-php .php
AddType applicaiton/x-httpd-php-source .phps

2.CGI模式

这种模式需要在httpd.conf中注释掉

LoadModule php5_module modules/libphp5.so

这行。如果不注释这行会一直走到handler模式。也就是module模式。

然后在httpd.conf增加action:

Action application/x-httpd-php /cgi-bin/php-cgi

如果在/cgi-bin/目录找不到php-cgi.可自行从php的bin里面cp一个。

然后重启apache,再打开测试页面发现Server API变成:CGI/FastCGI。说明成功切换为cgi模式。

# service httpd restart

Fastcgi的优点:

  • 从稳定性上看, fastcgi是以独立的进程池运行来cgi,单独一个进程死掉,系统可以很轻易的丢弃,然后重新分 配新的进程来运行逻辑.
  • 从安全性上看,Fastcgi支持分布式运算. fastcgi和宿主的server完全独立, fastcgi怎么down也不会把server搞垮.
  • 从性能上看, fastcgi把动态逻辑的处理从server中分离出来, 大负荷的IO处理还是留给宿主server, 这样宿主server可以一心一意作IO,对于一个普通的动态网页来说, 逻辑处理可能只有一小部分, 大量的图片等静态IO处理完全不需要逻辑程序的参与.
  • 从扩展性上讲, fastcgi是一个中立的技术标准, 完全可以支持任何语言写的处理程序 (php,java,perl,ruby,c++,python...)
  • 适用操作系统,可在任何平台上http://www.fastcgi.com/dist/mod_fastcgi-current.tar.gz使用

3.FastCgi模式,用apche内置进程管理器

首先要添加mod_fastcgi模块到httpd.conf配置文件:

LoadModule fastcgi_module modules/mod_fastcgi.so

这种模式注释不注释LoadModule php5_module modules/libphp5.so这行貌似没什么关系,但是最好还是注释掉比较好。只要配置了以下模块

<IfModule fastcgi_module>
   FastCgiServer /usr/local/apache/cgi-bin/php-cgi -processes 20
   AddType application/x-httpd-php .php
   AddHandler php-fastcgi .php
   Action php-fastcgi /cgi-bin/php-cgi
</IfModule>

就会自动走到fastcgi模式。

然后重启apache,这个时候用 ps aux | grep php就会发现有很多php-cgi进程在运行。说明配置生效

4.FastCgi模式,用php-fpm进程管理器

首先要添加mod_fastcgi模块到httpd.conf配置文件:

LoadModule fastcgi_module modules/mod_fastcgi.so

然后重启httpd

[[email protected] ~]# service httpd restart
[[email protected] ~]# tail /usr/local/apache/logs/error_log 
[Mon Jul 21 15:44:21 2014] [notice] FastCGI: process manager initialized (pid 1274)

接着编辑 /etc/httpd/conf.d/fastcgi.php.conf 配置文件成:

<IfModule fastcgi_module>
   FastCgiExternalServer /usr/local/apache/cgi-bin/php-cgi -host 127.0.0.1:9000
   AddType application/x-httpd-php .php
   AddHandler php-fastcgi .php
   Action php-fastcgi /cgi-bin/php-cgi
</IfModule>

注释:
#配置fastcgi server

# 可能需要指定php-cgi的位置
ScriptAlias /cgi-bin/ "/usr/local/php/bin/"

#增加MIME类型
AddType application/x-httpd-php .php

#.php结尾的请求都要用php-fastcgi来处理  
AddHandler php-fastcgi .php         

#设置php-fastcgi的处理器
Action php-fastcgi /cgi-bin/php-cgi

注意,127.0.0.1:9000是php-fpm的开启端口,所以我们还需要把php-fpm打开。

如果是yum安装的php-fpm,

/usr/sbin/php-fpm

# php-fpm服务启动脚本: /etc/init.d/php-fpm  , 配置文件/etc/php-fpm.conf ,/etc/php-fpm.d/
# chkconfig --add php-fpm
# chkconfig php-fpm on
# service php-fpm {start|stop}

如果是编译php时,指定的--enable-fpm,

/usr/local/php/sbin/php-fpm start
配置文件: /usr/local/php/etc/php-fpm.conf

查看php-fpm是否启动,我们看到php-fpm监听在9000端口上

[[email protected] ~]# netstat -tulpn | grep php
tcp        0      0 127.0.0.1:9000         0.0.0.0:*         LISTEN    1192/php-fpm     

[[email protected] ~]# ps -ef | grep php
root      1472     1  0 16:14 ?        00:00:00 php-fpm: master process (/etc/php-fpm.conf)
apache    1473  1472  0 16:14 ?        00:00:00 php-fpm: pool www            
apache    1474  1472  0 16:14 ?        00:00:00 php-fpm: pool www            
apache    1475  1472  0 16:14 ?        00:00:00 php-fpm: pool www            
apache    1476  1472  0 16:14 ?        00:00:00 php-fpm: pool www            
apache    1477  1472  0 16:14 ?        00:00:00 php-fpm: pool www

php-fpm有一个主进程 master process,它负责其他子进程的创建与销毁工作。可以在/etc/php-fpm.conf, 以及/etc/php-fpm.d/*.conf中进行配置。

再测试下访问没问题,大功搞成咯。

参考:

https://www.centos.bz/2011/12/configure-apache-run-php-as-fastcgi/

http://ixdba.blog.51cto.com/2895551/806622

编译安装LAMP之二

时间: 2024-10-09 20:24:15

编译安装LAMP之二的相关文章

Centos 7.0 编译安装LAMP(Linxu+apache+mysql+php)之源码安装Mysql (二)

mysql 简介: MySQL是一个关系型数据库管理系统,关系数据库将数据保存在不同的表中,这样就增加了速度并提高了灵活性.目前其属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件.MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言. 安装环境: 系统: centos 7.0 最小化安装 软件

编译安装LAMP之一

环境:CentOS-6.5-i386-minimal httpd-2.2.27.tar.gz mysql-5.5.38-linux2.6-i686.tar.gz php-5.5.14.tar.gz 编译安装的原则:对于我们来说,需要定制的就直接编译,其余的一切皆yum / apt-get搞定 1.关闭iptables和SELinux [[email protected] ~]# service iptables stop [[email protected] ~]# setenforce 0 2

ubuntu10.04编译安装LAMP

ubuntu10.04编译安装LAMP以及简单wordpress的使用 : http://linuxme.blog.51cto.com/1850814/971631 一.源码安装LAMP 网上有一堆关于介绍lamp的在这里我就不罗嗦了,直接上配置过程 1.apr包的安装 apr简介: The mission of the Apache Portable Runtime (APR) project is to create and maintain software libraries that

编译安装LAMP(两种场景)

编译安装LAMP 场景一:AP组合以模块方式结合(编译PHP作为httpd的模块):进而完成虚拟主机PMA(phpmyadmin)和discuz论坛 场景二:AP组合以fpm方式,PHP独立守护进程运行:进而完成虚拟主机PMA(phpmyadmin)和discuz论坛 ==========================场景一============================ 拓扑结构: 主机一 网卡1IP为172.20.1.100 网卡2IP为192.168.217.219 在此计算机上

编译安装 LAMP 平台

> 一.软件包 Linux:CentOS-6.4     Apache:httpd-2.4.9     MySQL:mysql-5.6.19     PHP:php-5.4.30 二.编译安装 httpd 在安装 httpd 之前,首先要安装两个依赖包:apr 和 apr-util.apr 是 apache portable runtime 的缩写,是 apache 提供的一个可以跨平台使用的 API.安装方法很简单,就是编译安装的三步骤: # apr tar xf apr-1.5.1.tar.

Centos 7.0 编译安装LAMP(Linxu+apache+mysql+php)之源码安装Apache (一)

Apache 简介: Apache是世界使用排名第一的Web服务器软件.它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一.它快速.可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中. 安装环境: 系统: centos 7.0 最小化安装 软件:httpd-2.4.26 依赖包:apr .apr-util .pcre .gcc .gcc-c++ .perl-dvel.perl.openssl .openssl-

Linux下指定版本编译安装LAMP

说明: 操作系统:CentOS 6.5 64位 需求: 编译安装LAMP运行环境 各软件版本如下: MySQL:mysql-5.1.73 Apache:httpd-2.2.31 PHP:php-5.2.17 具体操作: 准备篇 一.配置防火墙,开启80端口.3306端口 vi /etc/sysconfig/iptables #编辑防火墙配置文件 # Firewall configuration written by system-config-firewall # Manual customiz

linux架构学习第二十七天 编译安装LAMP(php-fpm)

内容: 第一部分:编译安装LAMP(php以模块的方式工作) 第二部分:编译安装LAMP(php以fpm的方式工作) 第一部分: 前面介绍我们知道, apache + php结合的方式大概几种: 第一种:把php编译时直接编译成apache的模块.module模块化的方式进行工作 第二种:CGI.通用网关接口.apache基于CGI跟hph通信 第三种:fastcgi方式,他也是一种协议,在这种模块下他们两个是这样结合的: 本来php是做为一个模块或都是php解析器运行的,不是监听在某个套接字上

编译安装LAMP+phpMyAdmin

一.准备工作 关闭防火墙.selinux,配置yum源,并移出系统已安装的httpd,mysql,php 二.安装apache ttpd-2.4.10需要较新版本的apr和apr-util,因此需要事先对其进行升级.升级方式有两种,一种是通过源代码编译安装,一种是直接升级rpm包.这里使用源码编译演示. 1.安装apr [[email protected] /]# tar xf apr-1.5.1.tar.bz2 -C /usr/src/ [[email protected] /]# cd /u