Nginx fastcgi模式 配置 php
1 、编译安装 nginx nginx 就不用说了,这几年很火。要是你不知道它,那就先请百度一下 nginx 。 本文介绍怎么进行编译安装 nginx 以及与 php 的结合方式。目前 nginx 已经到了 1.1.7 版本了。本文还用的是 1.0.8 版本。 wgethttp://nginx.org/download/ngin
1、编译安装nginx
nginx就不用说了,这几年很火。要是你不知道它,那就先请百度一下nginx。
本文介绍怎么进行编译安装nginx以及与php的结合方式。目前nginx已经到了1.1.7版本了。本文还用的是1.0.8版本。
wgethttp://nginx.org/download/nginx-1.0.8.tar.gz
tar-zxvf nginx-1.0.8.tar.gz
cdnginx-1.0.8
./configure–prefix=/usr/local/nginx
make
makeinstall
这里面可能大家有个疑问,在很多的地方编译安装的时候都会带上–with --enable或者—without类似的参数的。这个我刚开始也没多想,就这样子编译安装了,因为我就弄个测试服务器,可以rewrite就行。以至于在配rewrite的时候来没配好,就怀疑是否rewrite的模块有没有加载上去的。其实nginx默认加载了很多模块。执行./configure–help 就会看到一些加载的模块与没有加载的模块(默认情况)。
2、nginx配置
nginx的配置文件主要部分就如下,这里主要是配置fastcgi模式运行php。当然php肯定得有php-cgi或者php5-cgi
server{
listen 83;#监听端口
server_name localhost;#域名
#charsetkoi8-r;#字符编码
#access_log logs/host.access.log main;
location/ {
root /opt/nsfocus/web/www/; #文档目录
index index.html index.htm cavy_filter.php; #主文件
if(!-f $request_filename){
rewrite^/(.+)$ /cavy_filter.php?$1& last; #重写 zendframework的nginx重写规则,网上找了一个apache规则转换成nginx规则的网址,贴出来,貌似不怎么管用。
http://www.anilcetin.com/convert-apache-htaccess-to-nginx/
}
}
location~ .*\.(php|php5)?$ { #配置php
root/opt/nsfocus/web/www/; #php 文件目录
fastcgi_pass 127.0.0.1:9000; #fastcgi 通信
fastcgi_indexindex.php; #fastcgi 主文件
#这里指向conf目录下的
includefastcgi.conf; #fastcgi 模块相关的配置,不需要改动
}
#error_page 404 /404.html;
#redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html; #定义错误页面
location= /50x.html {
root html;
}
当负载过高,就会出现Thepage you are looking for is temporarily unavailable.
Pleasetry again later. 这个页面就是50x.html。在此php已经配置好了。但要运行让nginx跑php,还有些步骤。
3、nginx运行php
Nginx与php 结合有三种模式
第一是用php自带的fastcgi管理器php-cgi,此模式很容易崩溃,而且耗内存高。
第二种是结合lighttpd的fastcgi管理器spawn-cgi,此比较稳定,且耗内存比较少。
第三种是结合php的fastcgi管理器php-fmp。网上说比spawn-cgi要优越。
(1)php-cgi
第一种模式是用php自带的fastcgi管理器,具体运行是
执行nginx进程,然后执行 php-cgi-b 127.0.0.1:9000
nginx就能执行了。但这貌似有个很大的二个问题
1、php-cgi进程经常崩溃,即使没有负载的情况下也这样。
2、内存的消耗比较大,要大于同等条件下的apache与lighttpd
笔者暂时还没弄清楚这两个问题的原因,有知道的教教我。
(2)spanw-fcgi
spanw-fcgi是lighttpd的一个组件,安装lighttpd就会带有
启动nginx进程,然后启动spawn-fcgi。执行下面命令启动spawn-fcgi
/usr/local/bin/spawn-fcgi-a 127.0.0.1 -p 9000 -C 5 -u www-data -g www-data -f /usr/bin/php-cg
相关参数说明
-f
(3)php-fpm
fpm(FastCGIProcess Manager)fastcgi进程管理器。Php-fpm需要在安装php的时候安装进去。
Php5.3.3或者更高的版本已经包含在php源码里面,直接进行安装就可以。
PHPCore (PHP 5.3.x 版本
cdphp-5.3.x
svnco http://svn.php.net/repository/php/php-src/trunk/sapi/fpm sapi/fpm
./buildconf--force
./configure--enable-fpm ...your other configure options, etc...
make&& make install
PHP5.2.x 或者更早的php是以补丁的形式进行的
wgethttp://php-fpm.org/downloads/php-5.2.8-fpm-0.5.10.diff.gz(我的php为5.2.8)
tar-xzvf php-5.2.8.tar.gz (解压包php-5.2.8,将生成目录php-5.2.8)
gunzipphp-5.2.8-fpm-0.5.10.diff.gz (解压包php-5.2.8-fpm-0.5.10.diff)
patch-d php-5.2.8 -p1 给php-5.2.8的源码打上fpm补丁)
./configure--enable-fpm …
安装完毕后,启动php-fpm,进入php安装目录php/sbin/ ./php-fpm start
或许会出现
[ERROR]fpm_unix_conf_wp(), line 124: please specify user and group otherthan root 的错误
大体的意思就是不能用root权限运行php-fpm。
进入 php/etc目录,修改php-fpm.conf,找到
改为
运行就ok了。
4、总结
目前的主要趋势都是nginx+php ,但nginx与php到底用什么来管理fastcgi呢?php-cgi从性能跟稳定性来说,是没必要考虑的。那其他的两者到底用谁呢?笔者对spawn-fcgi与php-fpm进行过性能测试。两者的性能大体上差不多,spawn-fcgi稍微好点点。
但从技术的支持来说spawn-fcgi貌似有端时间没更新了,且它属于lighttpd的一部分,虽然已经从lighttpd独立出来了,但技术文档还是比较少。这方面,php-fpm已经在php5.3.3版本写进源码,已经成为官方的一份子。从对php-cgi的进行分析来看,笔者同时启动的6个php-cgi进程,php-fpm对内存的使用比较均匀,没个大概在0.6%左右。而spawn-fcgi就比较乱,有比较高的,也有很少的。故笔者建议用php-fpm。
推荐阅读
-
nginx php-fpm中启用慢日志配置(用于检测执行较慢的PHP脚本)
-
nginx php-fpm环境中chroot功能的配置使用方法
-
nginx支持codeigniter的pathinfo模式url重写配置写法示例
-
Nginx、Apache、Lighttpd禁止目录执行php配置示例
-
nginx中path模式配置示例
-
Nginx隐藏index.php和Pathinfo模式配置例子
-
在nginx中配置pathinfo模式支持thinkphp的URL重写
-
CentOS 6.1 环境中部署nginx、php(包括fastcgi)、虚拟主机配置
-
Nginx中运行PHP框架Laravel的配置文件分享
-
Gentoo 下安装与配置Nginx+ MySQL + PHP (fastcgi) 环境步骤分享