Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29419765
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: 系统运维

2010-01-20 11:13:44

nginx+php+php-fpm安装配置文档

                                                                             [整理人:hkebao#126.com 整理时间:2010-1-19]

*         简介:

1、  目前各种服务器HTTP ServerPHP的支持共三种

A.  通过HTTPServer内置的模块来实现。例如Apachemod_php5类似于apache里面的mod_perl可以对perl支持。

B.  通过CGI来实现,缺点就是性能差另外也不太安全所以很少用。

C.  最新的一种方法就是FastCGI。就是对CGI的一种改进。它一般采用C/S结构,一般脚本处理器会启动一个或多个daemon进程,每次HTTPServer遇到脚本的时候直接交给FastCGI的进程来执行。然后将结果返回给浏览器。

说明: 这种方法的问题存在一个小问题就是当遇到大流量的时候,脚本处理器的守护进程可能会超负荷从而变慢。甚至发生内存泄漏。

比起第一种方法来讲这种方法性能上要高很多。实现了服务器专心进行静态文件响应而将动态脚本丢给守护进程处理。

 

2使用FastCGI方式实现有两种常见的stack: lighttpd+spawn-fcgi;另外一种是nginx+php-FPM(也可以是spawn-fcgi).

 

说明: 两者还可以分出一个好坏来,spawn-fcgi由于是lighttpd的一部分,因此安装了lighttpd一般就会使用spawn-fcgi php支持,但是目前有用户说ligttpdspwan-fcgi在高并发访问的时候,会出现上面说的内存泄漏甚至自动重启fastcgi。即:PHP 脚本处理器当机,这个时候如果用户访问的话,可能就会出现白页(PHP不能被解析或者出错)

 

另一个:首先nginx不像lighttpd本身含带了fastcgi(spawn-fcgi),因此它完全是轻量级的,必须借助第三方的FastCGI 处理器(必须要手工安装第三方的处理器)才可以对PHP进行解析,因此其实这样看来nginx是非常灵活的,它可以和任何第三方提供解析的处理器实现连接从而实现对PHP的解析( nginx.conf中很容易设置)

 

nginx可以使用spwan-fcgi(需要一同安装lighttpd(自带的就包含了这个插件),但是需要为nginx避开端口),但是 由于spawn-fcgi具有上面所述的用户逐渐发现的缺陷,现在慢慢减少使用nginx+spawn-fcgi组合了

 

由于spawn-fcgi的缺陷,现在出现了新的第三方(目前还是,听说正在努力不久将来加入到PHP core)PHPFastCGI处理器,叫做PHP-FPM。它和spawn-fcgi比较起来有如下优点:

由于它是作为PHPpatch补丁来开发的,安装的时候需要和php源码一起编译,也就是说编译到php core中了,因此在性能方面要优秀一些;(这就是为什么要在安装的时候将patch一下了。将其打进来补丁中去)

同时它在处理高并发方面也优于spawn-fcgi,至少不会自动重启fastcgi处理器。

 

因此,如上所说由于nginx的轻量和灵活性,因此目前性能优越,越来越多人逐渐使用这个组合:nginx+PHP/PHP-FPM

 

总结:
目前在HTTPServer这块基本可以看到有三种stack比较流行:
>Apache+mod_php5
>lighttp+spawn-fcgi
>nginx+PHP-FPM       
(目前主流的配置)

三者后两者性能可能稍优,但是Apache由于有丰富的模块和功能,目前来说仍旧是老大。有人测试nginx+PHP-FPM在高并发情况下可能会达到Apache+mod_php55~10倍,现在nginx+PHP-FPM使用的人越来越多。

所以现在网络术语LEMP(Linux+EngineX(nginx)+MySQL+PHP,慢慢要代替经典很多年的LAMP

 

*         安装篇

下面整理一下有关LEMP安装步骤。其中的MYSQL安装略过.先安装PHP

#tar jxvf php-5.3.0.tar.bz2

#wget

PS: 下载补丁包

#gzip -cd php-5.3.0-fpm-0.5.12.diff.gz | sudo patch -d php-5.3.0 -p1

#cd php-5.3.0

#./configure  –-prefix=/usr/local/php --enable-fpm --with-config-file-path=/usr/local/php/etc/ --disable-all  --with-mysqli=/data/mysql/bin/mysql_config

 

PS

--enable-fpm 表示支持PHP-FPM选项

--with-mysqli=/data/mysql/bin/mysql_config 相当于编译phpMYSQL扩展到PHP内核中。这样就可以使用mysqli库访问MYSQL

另外要注意:这里面不能设置--with-apxs2=/usr/local/apache2/bin/apxs

如果设置了此选项编译安装之后Apache就无法启动了。这就是说如果打算用PHP-FPM的方式来支持FastCGI的话,基本上就不能和Apache一起使用了。如果打算跑LEMP的话就不能与Apache一块用。

如果非还想要使用,那可以另外编译安装一个PHP,编译的时候在./configure的时候设置--with-apxs2=/usr/local/apache2/bin/apxs,而且不要打PHP-FPM的补丁。
另外,如果该步骤出现错误,通常是缺乏依赖包,请按照错误信息安装依赖包即可。

 

#Make all && make install    

PS: 在此尽量用make all 而不要用make

 

#cp php.ini-production /usr/local/lib/php.ini

#ln -s /usr/local/lib/php.ini /etc/php/php.ini

#ln -s /usr/local/etc/php-fpm.conf /etc/php/php-fpm.conf

#cd /usr/local/php/bin

#php –v

输出:

PHP 5.3.0 (cli) (built: Dec 20 2009 07:41:25)

Copyright (c) 1997-2009 The PHP Group

Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies

至此PHP的安装已经成功完成!

 

以下是其简单的配置

A、配置php.ini文件 需要依据具体的需求而定制

B、指定PHP文件存放的目录。

比如我们现在打算将其放置在:/var/www/html 目录下面

 

C、创建用户与用户组

groupadd www -g 48

useradd -u 48 -g www www

chmod +w /var/www/html

chown -R www:www /var/www/html/

创建了用户与用户组www 现在开始配置FPM配置文件

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

该文件是一个xml文件,只需要修改:
    Unix user of processes
    www
    Unix group of processes
    www
注意去掉两边的注释,否则之后php-fpm启动不了;

D. 配置完之后,就可以启动PHP-FPM
$/usr/local/php/sbin/php-fpm start

启来之后查看一下9000端口是否存活:

netstat -tlnp|grep 9000|awk '{print $7}'|awk -F '/' '{print $1}'

至此PHP的安装与配置工作完成了。开始安装配置Nginx

 

 

 

 

 

第二步: 安装nginx

2.1 安装之前先作一些优化Ngnix

1、  减小nginx编译后的文件大小

默认的nginx编译选项里面居然是用debug模型(-g)的。Debug模式会插入很多的跟踪和ASSERT之类,编译以后一个nginx有好几M的。去掉nginxdebug模式编译,编译以后就会只有几百K

auto/cc/gcc    最后几行有:

#debug

CFLAGS=”$CFLAGS -g”

….

注释掉这几行或删掉重新编译即可。

(完整的如下)

# debug

#CFLAGS="$CFLAGS -g" 

# DragonFly's gcc3 generates DWARF

#CFLAGS="$CFLAGS -g -gstabs" 

#if [ ".$CPP" = "." ]; then

 #   CPP="$CC -E"

#fi

将其全部注释掉即可! 

2、修改nginxheader伪装服务器

2.1 修改nginx.h (文件位置在:nginx-0.7.51/src/core)

默认为:

#define NGINX_VERSION      "0.7.27"

#define NGINX_VER          "nginx/" NGINX_VERSION 

#define NGINX_VAR          "NGINX"

#define NGX_OLDPID_EXT     ".oldbin" 

修改成

#define NGINX_VERSION      "0.7.27"

#define NGINX_VER          "LTWS/" NGINX_VERSION 

#define NGINX_VAR          "NGINX"

#define NGX_OLDPID_EXT     ".oldbin" 

2.2 修改nginx_http_header_filter_module

#vi src/http/ngx_http_header_filter_module.c

static char ngx_http_server_string[] = "Server: nginx" CRLF;

修改为:

static char ngx_http_server_string[] = "Server: LTWS" CRLF; 

a>    修改nginx_http_header_filter_module

#vi src/http/ngx_http_special_response.c

static u_char ngx_http_error_full_tail[] =

"


" NGINX_VER "
" CRLF

" " CRLF

"" CRLF

;

static u_char ngx_http_error_tail[] =

"


nginx
" CRLF

"" CRLF

"" CRLF

;

修改成

static u_char ngx_http_error_full_tail[] =

"


" NGINX_VER "
" CRLF

"


" CRLF

"" CRLF

"" CRLF

static u_char ngx_http_error_tail[] =

"


LTWS
" CRLF

"" CRLF

"" CRLF

修改完了之后再重新编译就可以了! 

3. 利用Tcmalloc优化Nginx性能

#wget

#tar zxvf libunwind-0.99-alpha.tar.gz

#cd libunwind-0.99-alpha

#CFLAGS=-fPIC ./configure

#make CFLAGS=-fPIC

#make CFLAGS=-fPIC install

#wget

#tar zxvf google-perftools-0.98.tar.gz

#cd google-perftools-0.98

#./configure

#make && make install

#echo "/usr/lcoal/lib" > /etc/ld.so.conf.d/usr_local_lib.conf

#ldconfig

#lsof -n | grep tcmalloc

以上实现了安装 Tcmalloc的操作。

安装完了之后要记得设置环境变量

export LD_LIBRARY_PATH="/usr/local/lib"

echo $LD_LIBRARY_PATH

至此完成Nginx的优化编译

需要用到fast-cgi或正则表达式的时候需要安装pcre 模块进来

第一步:安装pcre模块进来

tar -zxvf pcre-6.6.tar.gz

cd pcre-6.6

./configure

make && make install

第二步:开始进入nginx的编译过程

现在开始进入nginx的编译过程。

开始进入编译过程:

./configure --prefix=/usr/local/nginx --with-google_perftools_module

make && make install

安装完 nginx之后需要在其配置文件nginx.conf添加

google_perftools_profiles   /path/to/profile;

4、系统内核参数优化

#vi /etc/sysctil.conf

#在未尾增加以下内容

net.ipv4.tcp_fin_timeout = 30

net.ipv4.tcp_keepalive_time = 300

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.ip_local_port_range = 5000

#使配置立即生效

/sbin/sysctl –p

添加nginx的启动脚本。至此完成Nginx 的优化安装配置

 

三、修改nginx配置使其能够支持php运行

location ~ \.php$ {

            root           html;

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

            fastcgi_param SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;

            include        fastcgi_params;

        }

说明:其中的fastcgi_param /var/www/html/目录是php程序的存放目录

你可以将你的PHP文件存放在此目录下面。

 

四、编写一个PHP文件测试运行效果

echo phpinfo();

?>

 

 

 

 

阅读(1354) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~