第四篇 以FASTCGI方式安装PHP


为PHP提供配置文件:

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

为php-fpm提供服务启动脚本,并将其添加到启动列表

#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/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

编辑php-fpm的配置文件:

一、APACHE以FASTcgi工作


1、概述:

    php是一台应用服务器,且支持fastcgi。php5.3以前php是不支持fastcgi工作模式的,于是第三方php-fpm为php提供插件,为fastcgi提供了可能,后来php将php-fpm收购并整合到php5.5之后的版本中,所以不再需要单独安装php-fpm插件了。

     apache和php直接的通讯是通过socket(套接字)实现的,php默认通过9000端口接受apache提出的请求,所以如果apache和php在同一台服务器的时候,php的设置可以是127.0.0.1:9000,这样php只可以在本地通讯,保证了数据安全,如果不是在同一台服务器上ip地址应该设置成可以和其他主机通讯的ip地址。                

        同样的apache要和php通讯,自身也要工作在代理模式,将用户对php的请求转发给php服务器,并对结果进行转发。

        代理分为正向代理和反向代理,什么是正向代理呢,就是对内部用户范围互联网资源提供代理服务。反向代理就是内部有web、ftp等资源,并且互联网用户要访问局域网资源的情况,需要代理服务器,这个对外提供代理功能的服务器称为 反向代理。

        所以apache对于用户要访问PHP功能的时候,实现的是反向代理功能。


2、设置方法:

httpd设置:

a、启动代理功能

b、实现fcgi功能


a、apache方面设置

如果是一个已经存在的lamp环境,需要先停止httpd服务,然后注释掉“loadmodule php5_module”相关的模块。

#LoadModule php5_module        modules/libphp5.so


编译安装

在apache2.4以后有一个专门针对fastcgi的模块,名称是mod_proxy_fcgi.so,实际上是作为mod_proxy.so的扩展补充,因此在编译的时候一下两个模块需要加载


LoadModule proxy_module modules/mod_proxy.so

#LoadModule proxy_connect_module modules/mod_proxy_connect.so

#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so

#LoadModule proxy_http_module modules/mod_proxy_http.so

LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so



配置虚拟主机支持使用fcgi

proxyrequests off         //关闭正向代理,因为这里使用的是反向代理。

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

解释:.*表示任意字符串,\.表示点号,$表示结尾,^表示以url开头的。总的含义就是以url开头的后面是任意字符,并且以php结尾的url链接,都到php应用服务器查找信息。(url,如果php服务器是单独的服务器,这个ip地址应该指向php服务器ip地址)。

而后面的$1表示对前面^/(.*\.php)$的引用。


示例:
10.40.0.227、httpd服务器虚拟主机配置

<virtualhost *:80>

documentroot "/www/magedu.com"

servername magedu.com

serveralias www.magedu.com

proxyrequests off

proxypassmatch ^/(.*\.php)$ fcgi://10.40.0.228:9000/www/magedu.com/$1

<directory "/www/magedu.com">

options none

allowoverride none

require all granted

</directory>

</virtualhost>


Php-fpm服务器,10.40.0.228配置


[root@localhost magedu.com]# pwd

/www/magedu.com

[root@localhost magedu.com]# cat index.php 

hello world

<?php

phpinfo()

?>


配置httpd.conf

1、添加以下内容:

addtype application/x-httpd-php .php

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

directoryindex index.php index.html


b、php方面设置


编译安装


此编译和模块安装编译区别不大,只是增加重新了参数,添加“--enable-fpm” —enable-maintainer-zts参数。这里重新定义了一个新的安装位置为/usr/local/php-fpm目录,配置文件目录是/etc/php-fpm/

[root@localhost php-5.5.32]# ./configure --prefix=/usr/local/php --enable-fpm  --with-mysql=mysqlnd --with-openssl --with-mysqli=mysqlnd --enable-mbstring --enable-xml --with-mcrypt --with-config-file-path=/etc/php-fpm    --enable-maintainer-zts --with-zlib-dir=/usr

mysqli是指mysql的高级接口

apxs2是支持apache模块的接口。

zts对应的是apache的worker和event模块。

mod_php对应的是prefork模块。

config-file-path是指定php的配置文件目录php.ini

mcrypt:phpmyadmin软件包需要此程序,需要到epel中下载libmcrypt。

With-config-file-scan-dir=/etc/php.d


配置php-fpm配置文件

(编译安装时有一个dufault文件,可以再误删除后使用/usr/local/php/etc/php-ftm.conf.default)

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

pm.max_children = 50            //最小启动fastcgi进程数

pm.start_servers = 5                //fpm在启动时启动的进程数

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

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

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

pm.start_servers默认值的公式:Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2

listen = 127.0.0.1:9000

用于设置httpd服务和php进行通信时,作为服务器端的php的ip地址。

复制启动脚本

[root@localhost php-5.5.32]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm


马哥教育编译LAMP之以fastcgi运行:http://edu.51cto.com/lession/id-75778.html

Unix 系统下的 Nginx 1.4.x:http://php.net/manual/zh/install.unix.nginx.php


压力测试:

使用模块方式加载php进行压力测试

Concurrency Level:      1000

Time taken for tests:   17.992 seconds

Complete requests:      1000

Failed requests:        95

   (Connect: 0, Receive: 0, Length: 95, Exceptions: 0)

Total transferred:      82144897 bytes

HTML transferred:       81977897 bytes

Requests per second:    55.58 [#/sec] (mean)

Time per request:       17992.489 [ms] (mean)

Time per request:       17.992 [ms] (mean, across all concurrent requests)

Transfer rate:          4458.51 [Kbytes/sec] received


使用fastcgi方式加载php进行压力测试

Concurrency Level:      1000

Time taken for tests:   4.258 seconds

Complete requests:      1000

Failed requests:        96

   (Connect: 0, Receive: 0, Length: 96, Exceptions: 0)

Total transferred:      82971780 bytes

HTML transferred:       82815780 bytes

Requests per second:    234.85 [#/sec] (mean)

Time per request:       4258.041 [ms] (mean)

Time per request:       4.258 [ms] (mean, across all concurrent requests)


Transfer rate:          19029.20 [Kbytes/sec] received

错误汇总:

问题:出现cp: overwrite `/etc/rc.d/init.d/php-fpm'? y

File size limit exceeded

解决:此问题通常是系统自带的ulimit的限制了系统最大启动文件引起的,通过ulimit -a可以查看到file size的启动大小,将此数值改大小,并重新拷贝即可。

Nginx架构(nginx1.4.x)

修改默认的 location 块,使其支持 .php 文件:

location / {    root   html;    index  index.php index.html index.htm;}

下一步配置来保证对于 .php 文件的请求将被传送到后端的 PHP-FPM 模块, 取消默认的 PHP 配置块的注释,并修改为下面的内容:

localtion{

    fastcgi_index index.php;

    fstcgi_pass 127.0.0.1:9000;

    include fastcgi_params;    

    fastcgi_param     SCRIPT_FILENAME     $document_root$fastcgi_script_name;

    fastcgi_param     SCRIPT_NAME            $fastcgi_script_name;

}

以下为东田教育网站nginx的php配置。

 server {

        listen 80;

        server_name 10.10.10.10;

        root /dtedu/setup/www;


        location / {

            index index.html index.htm index.php;

            try_files $uri $uri/ @mvc;

        }


        location @mvc {

            rewrite ^/(.*)$ /index.php?_r=$1 last;

        }


        location ~ \.(php|php5)$ {

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME /dtedu/setup/www/$fastcgi_script_name;

            include        fastcgi_params;

            include        fastcgi.conf;

        }

   }

}



php.ini 配置选项列表:http://www.php.net/manual/zh/ini.list.php

PHP手册:http://www.php.net/manual/zh/

核心配置参数详解:http://www.php.net/manual/zh/ini.core.php



Phpmyadmin

一、Phpmyadmin

是由php软件开发的针对mysql数据库系统的web界面管理系统。可以对数据表进行管理工作,方便学习sql语句。


安装配置

1、解压缩到web页面存放的目录下,我这里是/usr/local/apache/htdocs/phpadm

2、将config.sample.inc.php文件更名为config.inc.php文件

3、编辑config.inc.php文件

tar安装,编辑配置文件config.sample.inc.php,需要随机添加字符串到blowfish_secret字段中,可以使用openssl rand -hex 8来生成。


参考视频马哥:http://edu.51cto.com/lesson/id-75756.html


Php配置文件

如果要使httpd可以翻译php网页文件,需要在httpd.conf位置文件中添加如下代码:

AddType application/x-httpd-php .php  .php3

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




常见问题:

1、LNMP架构安装完毕后,访问页面直接另存为,并且在查看error.log的时候显示

2016/03/15 01:20:59 [error] 2154#0: *9 connect() failed (111: Connection refused) while connecting to upstream, client: 10.40.0.56, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "10.40.0.213"

处理方法:

首先查看各个平台是否正常运行。

此问题通常集中在php-fpm上,重启此服务

修改nginx.conf文件的            

fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;

也可以使用$document_root代替,此变量指代的是前面提到的根,这根通常是安装目录,具体看情况定,直接指向地址也可以。