第四篇 以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运行:
Unix 系统下的 Nginx 1.4.x:
压力测试:
使用模块方式加载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 配置选项列表:
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来生成。
参考视频马哥:
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代替,此变量指代的是前面提到的根,这根通常是安装目录,具体看情况定,直接指向地址也可以。