Ubuntu+Nginx+PHP+php-fpm配置php(path_info)环境备忘

参考网址:http://wangye.org/blog/archives/574/

http://wiki.nginx.org/HttpFcgiModule

我安装的软件版本:Ubuntu11.10 nginx1.0.5 PHP5.3.6-13

安装nginx

apt-get install nginx

安装mysql-server

apt-get install mysql-server mysql-client

安装php-cgi

apt-get install php5-cgi php5-mysql php5-fpm

配置nginx

/etc/nginx/sites-available/default是默认站点的配置

#pass the PHP scripts to FastCGI

下面的几行注释符去掉,是配置php-cgi连接的

其中有一句

include fastcgi_params;

是包含fastcgi中PHP环境变量配置的文件,我们再去这个文件(/etc/nginx/)配置pathinfo

在文件开始加入以下几行,还要注意,下面已经有了一个fastcgi_param SCRIPT_FILENAME,我们把它注释掉不用

fastcgi_split_path_info ^((?U).+\.php)(/.+)$;
fastcgi_param	SCRIPT_FILENAME		$document_root$fastcgi_script_name;
fastcgi_param	PATH_INFO		$fastcgi_path_info;
fastcgi_param	PATH_TRANSLATED		$document_root$fastcgi_path_info;

下面重新加载配置

nginx -s reload
invoke-rc.d php5-fpm restart

好了,下面在/usr/share/nginx/www/下建立一个php文件

<?php
phpinfo();

打开浏览器访问localhost/i.php,如果能看到php信息页,并检查变量无误,就配置成功了.

2012/4/17补充

关于nginx文件类型错误解析漏洞,在传入fastcgi之前检测下解析出的php文件是否存在

if ( !-e $document_root$fastcgi_script_name){
	return 404;
}

这句加入到 fastcgi_split_path_info下面就可以了