# tar -jxvf php-5.4.13.tar.bz2
# cd php-5.4.13
此处编译安装了我们项目经常用到的PHP模块,如有其它需要可以自定义添加.
#./configure --prefix=/usr/local/php5 --enable-fastcgi --enable-fpm --with-libxml-dir=/usr/local/lib --with-zlib-dir=/usr/local/lib --with-MySQL=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-gd --enable-soap --enable-sockets --enable-xml --enable-mbstring --with-png-dir=/usr/local --with-jpeg-dir=/usr/local --with-curl=/usr/lib --with-freetype-dir=/usr/include/freetype2/freetype/ --enable-bcmath --enable-maintainer-zts
在“./configure”编译选项中,“--enable-fastcgi”是启用对PHP的FastCGI支持,“--enable-fpm”是激活对FastCGI模式的fpm支持。
# make
# make install
安装结束后:
添加php配置文件,需要CP 一个源码里面的php.ini-development或php.ini-production
到/usr/local/php/lib 为 php.ini
# cd ~/php-5.4.13
# cp php.ini-development /usr/local/php5/lib/php.ini
PHP配置: (修改php.ini,默认目录/usr/local/php5/lib/php.ini)
# vi /usr/local/php5/lib/php.ini
-------------------------
expose_php = Off
display_errors = Off
date.timezone =PRC
log_errors = On
error_log = /usr/local/nginx/logs/php_error.log
-------------------------
配置启动FastCGI进程:
# cd /usr/local/php5/etc/
# cp php-fpm.conf.default php-fpm.conf
优化配置:
# vi php-fpm.conf
内存小于4G服务器(值可逐级递减):
修改如下参数:
--------------
pm=dynamic
pm.max_children=40
pm.start_servers=10
pm.min_spare_servers=10
pm.max_spare_servers=40
--------------
内存大于4G服务器(值可逐级递增):
修改如下参数:
--------------
pm=static
pm.max_children=100
--------------
启动服务:
# /usr/local/php5/sbin/php-fpm
# ps -ef|grep php-fpm
----------------------------
root 3829 1 0 01:33 ? 00:00:00 php-fpm: master process
(/usr/local/php5/etc/php-fpm.conf)
nobody 3830 3829 0 01:33 ? 00:00:00 php-fpm: pool www
nobody 3831 3829 0 01:33 ? 00:00:00 php-fpm: pool www
root 3836 1908 0 01:36 pts/0 00:00:00 grep php-fpm
----------------------------
重启fpm:
# pkill php-fpm
# /usr/local/php5/sbin/php-fpm
配置nginx支持php:
由于Nginx本身不会对PHP进行解析,因此要实现Nginx对PHP的支持,其实是将对PHP页面的请求交给fastCGI进程监听的IP地址及端口。如果把php-fpm当做动态应用服务器,那么Nginx其实就是一个反向代理服务器。
Nginx通过反向代理功能实现对PHP的解析,这就是Nginx实现PHP动态解析的原理。
这里假定Nginx的安装目录为/usr/local,则Nginx配置文件的路径为/usr/local/nginx/conf/nginx.conf。下面是在Nginx下支持PHP解析的一个虚拟主机配置实例。
# vi /usr/local/nginx/conf/nginx.conf
添加到http层级:
----------------
server {
server_name ;
location / {
index index.html index.php;
root /usr/local/nginx/html/www.abc.com;
}
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/www.abc.com$fastcgi_script_name;
include fastcgi_params;
}
}
------------------
通过location指令,将所有以php为后缀的文件都交给127.0.0.1:9000来处理,而这里的IP地址和端口就是FastCGI进程监听的IP地址和端口。
fastcgi_param指令指定放置PHP动态程序的主目录,也就是$fastcgi_script_name前面指定的路径,这里是/usr/local/nginx/html/www.abc.com目录,建议将这个目录与Nginx虚拟主机指定的根目录保持一致.
fastcgi_params文件是FastCGI进程的一个参数配置文件,在安装Nginx后,会默认生成一个这样的文件,这里通过include指令将FastCGI参数配置文件包含了进来。
测试NGINX是否加载PHP
# vi /usr/local/nginx/html/www.abc.com/info.php
---------------
<?php
echo phpinfo();
?>
---------------
重启nginx服务
# service nginx restart
检查80端口是否打开
# lsof -i:80
浏览器输入(注意修改本机HOST文件)
显示有如下测试页面内容,PHP在GNINX下加载成功
在配置完成Nginx+FastCGI之后,为了保证Nginx下PHP环境的高速稳定运行,需要添加一些FastCGI优化缓存指令。
推荐在项目稳定后可添加如下代码。
项目页面测试阶段或经常改动页面可能造成新添加的功能无法实现,不推荐使用。
下面给出一个优化实例,将下面代码添加到Nginx主配置文件中的HTTP层级。
# vi /usr/local/nginx/conf/nginx.conf
添加到http层级:
--------------------------
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
fastcgi_cache TEST;
fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m;
-----------------------
至此,MYSQL+Nginx+PHP(Fastcgi)大功告成。